Purlin.SAMLS.Integration
4.1.0
Prefix Reserved
dotnet add package Purlin.SAMLS.Integration --version 4.1.0
NuGet\Install-Package Purlin.SAMLS.Integration -Version 4.1.0
<PackageReference Include="Purlin.SAMLS.Integration" Version="4.1.0" />
<PackageVersion Include="Purlin.SAMLS.Integration" Version="4.1.0" />
<PackageReference Include="Purlin.SAMLS.Integration" />
paket add Purlin.SAMLS.Integration --version 4.1.0
#r "nuget: Purlin.SAMLS.Integration, 4.1.0"
#:package Purlin.SAMLS.Integration@4.1.0
#addin nuget:?package=Purlin.SAMLS.Integration&version=4.1.0
#tool nuget:?package=Purlin.SAMLS.Integration&version=4.1.0
SAMLS-Integration
Client-side SDK for consuming the SAMLS Provider API.
Targets net8.0, net9.0 and net10.0.
Registration
The SAMLS clients authenticate through a client-credentials token client that your service
registers, and look it up by name. Register it with
Duende.AccessTokenManagement
(a dependency of this package), then pass the same name to AddSamlsClient:
services.AddClientCredentialsTokenManagement()
.AddClient("samls", options =>
{
options.TokenEndpoint = new Uri(tokenEndpointUrl);
options.ClientId = ClientId.Parse(clientId);
options.ClientSecret = ClientSecret.Parse(clientSecret);
// options.Scope = Scope.Parse("...");
});
services.AddSamlsClient<MyDelegatingHandler>(baseAddress, "samls", agency);
// optional: the listing cache API, which has its own base address
services.AddSamlsCacheClient<MyDelegatingHandler>(cacheBaseAddress, "samls");
One token client can serve the SAMLS clients and any other clients in your service that use the same credentials — register it once and pass its name to each.
Then inject ISamlsClient (or ISamlsCacheClient) and use one property per resource:
ApiResponse<ListingModel> response = await samlsClient.Listings.Get(new GetByIdRequestModel { Id = id });
The agency argument is sent as an agency request header, and only when non-empty.
Upgrading from 4.x
Three changes, only the first of which is about the SAMLS clients themselves.
1. Register the token client with Duende instead of IdentityModel.AspNetCore. This package
replaced the deprecated IdentityModel.AspNetCore with Duende.AccessTokenManagement, and the two
libraries keep client registrations in separate stores.
// before
services.AddAccessTokenManagement(options =>
options.Client.Clients.Add("samls", new ClientCredentialsTokenRequest
{
Address = tokenEndpointUrl, ClientId = clientId, ClientSecret = clientSecret
}));
// after
services.AddClientCredentialsTokenManagement()
.AddClient("samls", options =>
{
options.TokenEndpoint = new Uri(tokenEndpointUrl);
options.ClientId = ClientId.Parse(clientId);
options.ClientSecret = ClientSecret.Parse(clientSecret);
});
AddSamlsClient and AddSamlsCacheClient are unchanged. Keeping the old registration compiles and
then throws on first client resolution:
No service for type 'Duende.AccessTokenManagement.IClientCredentialsTokenManager' has been registered.
2. Replace your own AddClientAccessTokenHandler calls. If your service used that extension on
its other HTTP clients, it came from IdentityModel.AspNetCore and is gone
(CS1061). The Duende equivalent is
.AddClientCredentialsTokenHandler(ClientCredentialsClientName.Parse(name)).
Drop any direct IdentityModel.AspNetCore package reference.
3. Refit moved from 8.0.0 to 15.2.0. If your service calls AddRefitClient<T> for its own Refit
interfaces, that now needs a request builder that ships separately — it compiles and throws
NotSupportedException on first resolution. Either add
<PackageReference Include="Refit.Reflection" Version="15.2.0" /> (no code change) or switch those
calls to AddRefitGeneratedClient<T>. A direct Refit reference below 15.2.0 becomes an NU1605
downgrade error.
Services still targeting net7.0 must retarget to net8.0 or later.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Duende.AccessTokenManagement (>= 4.2.0)
- NetTopologySuite (>= 2.6.0)
- NetTopologySuite.IO.GeoJSON4STJ (>= 4.0.0)
- Purlin.PData.Search.Model (>= 2.2.0)
- Refit (>= 15.2.0)
- Refit.HttpClientFactory (>= 15.2.0)
-
net8.0
- Duende.AccessTokenManagement (>= 4.2.0)
- NetTopologySuite (>= 2.6.0)
- NetTopologySuite.IO.GeoJSON4STJ (>= 4.0.0)
- Purlin.PData.Search.Model (>= 2.2.0)
- Refit (>= 15.2.0)
- Refit.HttpClientFactory (>= 15.2.0)
-
net9.0
- Duende.AccessTokenManagement (>= 4.2.0)
- NetTopologySuite (>= 2.6.0)
- NetTopologySuite.IO.GeoJSON4STJ (>= 4.0.0)
- Purlin.PData.Search.Model (>= 2.2.0)
- Refit (>= 15.2.0)
- Refit.HttpClientFactory (>= 15.2.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Purlin.SAMLS.Integration:
| Package | Downloads |
|---|---|
|
Purlin.PSE.Client
A client library for interacting with the Purlin PSE API. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.1.0 | 47 | 9/8/2026 |
| 4.0.9 | 158 | 9/4/2026 |
| 4.0.8 | 87 | 9/3/2026 |
| 4.0.7 | 79 | 9/2/2026 |
| 4.0.6 | 134 | 9/1/2026 |
| 4.0.5 | 142 | 8/27/2026 |
| 4.0.4 | 120 | 8/25/2026 |
| 4.0.3 | 359 | 8/5/2026 |
| 4.0.2 | 89 | 8/5/2026 |
| 4.0.1 | 104 | 8/5/2026 |
| 4.0.0 | 109 | 7/30/2026 |
| 3.1.1 | 224 | 7/22/2026 |
| 3.1.0 | 130 | 7/21/2026 |
| 3.0.9 | 110 | 7/15/2026 |
| 3.0.8 | 603 | 7/13/2026 |
| 3.0.7 | 274 | 7/3/2026 |
| 3.0.6 | 302 | 6/29/2026 |
| 3.0.5 | 132 | 6/16/2026 |
| 3.0.4 | 120 | 6/15/2026 |
| 3.0.3 | 196 | 6/9/2026 |
Initial release of the package.