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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Purlin.SAMLS.Integration" Version="4.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Purlin.SAMLS.Integration" Version="4.1.0" />
                    
Directory.Packages.props
<PackageReference Include="Purlin.SAMLS.Integration" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Purlin.SAMLS.Integration --version 4.1.0
                    
#r "nuget: Purlin.SAMLS.Integration, 4.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Purlin.SAMLS.Integration@4.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Purlin.SAMLS.Integration&version=4.1.0
                    
Install as a Cake Addin
#tool nuget:?package=Purlin.SAMLS.Integration&version=4.1.0
                    
Install as a Cake Tool

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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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 46 9/8/2026
4.0.9 144 9/4/2026
4.0.8 84 9/3/2026
4.0.7 77 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
Loading failed

Initial release of the package.