Franz.Common.SSO
2.2.16
dotnet add package Franz.Common.SSO --version 2.2.16
NuGet\Install-Package Franz.Common.SSO -Version 2.2.16
<PackageReference Include="Franz.Common.SSO" Version="2.2.16" />
<PackageVersion Include="Franz.Common.SSO" Version="2.2.16" />Directory.Packages.props
<PackageReference Include="Franz.Common.SSO" />Project file
paket add Franz.Common.SSO --version 2.2.16
#r "nuget: Franz.Common.SSO, 2.2.16"
#:package Franz.Common.SSO@2.2.16
#addin nuget:?package=Franz.Common.SSO&version=2.2.16Install as a Cake Addin
#tool nuget:?package=Franz.Common.SSO&version=2.2.16Install as a Cake Tool
Franz.Common.SSO
A library within the Franz Framework that provides streamlined support for Single Sign-On (SSO) in ASP.NET Core applications.
This package unifies configuration and registration of multiple SSO providers into a single, consistent bootstrapping mechanism, while normalizing all claims into a unified FranzIdentityContext.
-Current Version: v2.2.16
Features
Centralized SSO Bootstrapping
- One entry point:
AddFranzSsoIdentity(configuration) - Loads provider settings directly from
appsettings.json - Ensures only one interactive provider is active unless explicitly configured
- One entry point:
Supported Providers
- WS-Federation (Azure AD classic / ADFS)
- SAML2 (via Sustainsys.Saml2)
- OpenID Connect (OIDC)
- Keycloak (via OIDC, with claims transformation)
- JWT Bearer (API token validation for microservices)
Claims Normalization
Maps provider-specific claims (Azure AD, Keycloak, SAML attributes, etc.)
Produces a unified
FranzIdentityContextwith:UserId,Email,FullNameRolesTenantId,DomainId
Structured Logging
- Bootstrapping and provider activation logged via
ILogger<T> - Clean integration with Franz.Common.Logging / Serilog
- Bootstrapping and provider activation logged via
Configuration-Driven
- All providers enabled/disabled via config
- No hard-coded values in code
Installation
From your private Azure feed:
dotnet nuget add source "https://your-private-feed-url" \
--name "AzurePrivateFeed" \
--username "YourAzureUsername" \
--password "YourAzurePassword" \
--store-password-in-clear-text
dotnet add package Franz.Common.SSO
Usage
1. Configure appsettings.json
{
"FranzIdentity": {
"AllowMultipleInteractiveProviders": false,
"WsFederation": {
"Enabled": false,
"MetadataAddress": "https://login.microsoftonline.com/...",
"Wtrealm": "https://your-app"
},
"Saml2": {
"Enabled": false,
"IdpMetadata": "https://idp.example.com/metadata",
"EntityId": "https://your-app"
},
"Oidc": {
"Enabled": true,
"Authority": "https://login.microsoftonline.com/{tenantId}/v2.0",
"ClientId": "your-client-id",
"ClientSecret": "your-client-secret"
},
"Keycloak": {
"Enabled": false,
"Authority": "https://keycloak.example.com/realms/yourrealm",
"ClientId": "your-client-id",
"ClientSecret": "your-client-secret"
},
"Jwt": {
"Enabled": true,
"Authority": "https://login.microsoftonline.com/{tenantId}/v2.0",
"Audience": "api://your-api"
}
}
}
2. Register SSO in Program.cs
using Franz.Common.SSO.Extensions;
var builder = WebApplication.CreateBuilder(args);
// Add Franz SSO Identity
builder.Services.AddFranzSsoIdentity(builder.Configuration);
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.MapGet("/whoami", (IIdentityContextAccessor accessor) =>
{
var identity = accessor.GetCurrentIdentity();
return Results.Json(identity);
});
app.Run();
3. Normalized Identity Usage
var identity = _accessor.GetCurrentIdentity();
Console.WriteLine($"User: {identity.FullName}, Tenant: {identity.TenantId}, Roles: {string.Join(", ", identity.Roles)}");
Integration with Franz Framework
- Works with Franz.Common.Identity for the core identity context.
- Works with Franz.Common.Http.Identity for ASP.NET Core providers.
- Centralizes all SSO wiring into one consistent package.
Changelog
Version 1.6.2
Complete SSO overhaul
- Removed legacy
GenericSSOManager/GenericSSOProvider - Introduced
FranzSsoSettingsfor unified config binding - Added
AddFranzSsoIdentity()bootstrap extension - Integrated WS-Fed, SAML2, OIDC, Keycloak, JWT Bearer providers
- Added claims normalization pipeline to
FranzIdentityContext - Added structured startup logging via
FranzSsoStartupFilter
- Removed legacy
Version 1.3
- Upgraded to .NET 9.0.8
- Added new features and improvements
- Separated business concepts from mediator concepts
- Now compatible with both the in-house mediator and MediatR
Version 1.2.65
- Added
ISsoProviderfor custom SSO provider implementation - Introduced
GenericSSOProviderandGenericSSOManagerfor generic workflows - Integrated with ASP.NET Core Identity and EF Core
- Provided
SsoServiceRegistrationfor streamlined configuration
⚡ With v1.6.2, Franz.Common.SSO is now a unified, production-ready SSO abstraction for all supported protocols.
Version 1.6.20
- Updated to .NET 10.0
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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
- Franz.Common.EntityFramework (>= 2.2.16)
- Franz.Common.Http.Identity (>= 2.2.16)
- Franz.Common.Logging (>= 2.2.16)
- Microsoft.AspNetCore.Identity.EntityFrameworkCore (>= 10.0.9)
- SharpCompress (>= 1.0.0)
- System.Security.Cryptography.Xml (>= 10.0.9)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.2.16 | 39 | 7/2/2026 |
| 2.2.15 | 97 | 6/29/2026 |
| 2.2.14 | 91 | 6/29/2026 |
| 2.2.13 | 91 | 6/29/2026 |
| 2.2.12 | 92 | 6/28/2026 |
| 2.2.11 | 99 | 6/28/2026 |
| 2.2.10 | 90 | 6/28/2026 |
| 2.2.9 | 100 | 6/28/2026 |
| 2.2.8 | 91 | 6/28/2026 |
| 2.2.7 | 108 | 6/7/2026 |
| 2.2.6 | 105 | 6/6/2026 |
| 2.2.5 | 103 | 6/4/2026 |
| 2.2.4 | 100 | 6/3/2026 |
| 2.2.3 | 98 | 6/2/2026 |
| 2.2.2 | 102 | 6/2/2026 |
| 2.2.1 | 99 | 5/24/2026 |
| 2.1.4 | 109 | 4/27/2026 |
| 2.1.3 | 103 | 4/26/2026 |
| 2.1.2 | 107 | 4/26/2026 |
| 2.1.1 | 110 | 4/22/2026 |