A6tm.Core6.Sso 0.3.0

A6tm.Core6.Sso

SSO multi-tenant OpenID Connect générique pour les applications bâties sur le socle 6tm. Provider-agnostique : Azure Entra ID, Keycloak, Google… ne sont que des configurations — aucune dépendance verrouillée à un fournisseur.

En bref

  • Flux Authorization Code + PKCE (S256), validation anti-CSRF du state.
  • Multi-tenant : résolution par AppTenantId explicite → host (exact / *.domaine / sous-domaine) → tenant par défaut.
  • Raccourci Azure Entra ID (converti automatiquement en OpenID Connect).
  • Découverte automatique via .well-known/openid-configuration.
  • Un seul point d'extension applicatif : ISsoUserAuth.
  • Cible net8.0 / net9.0 / net10.0.

Démarrage rapide

// 1. Implémenter ISsoUserAuth (logique métier : utilisateur + session + redirection)
public class AppUserSsoAuth : ISsoUserAuth
{
    public Task<SsoLoginResult> HandleSsoLoginAsync(SsoUserInfoDto info)
        => Task.FromResult(SsoLoginResult.Redirect($"/auto-connect/{/* token applicatif */}"));
}

// 2. Câbler (Program.cs) — fournir un SsoSettings dont ClientSecret est DÉJÀ déchiffré (cf. AI-GUIDE §6)
var ssoSettings = builder.Configuration.GetSection("Sso").Get<SsoSettings>() ?? new SsoSettings();
// … déchiffrer ssoSettings.Tenants[].(AzureEntraId|OpenIdConnect).ClientSecret — voir AI-GUIDE §6 …
builder.Services.AddScoped<AppUserSsoAuth>();
builder.Services.AddSsoServices(ssoSettings, sp => sp.GetRequiredService<AppUserSsoAuth>());
builder.Services.AddControllers().AddSsoControllers();
// 3. appsettings.json
"Sso": {
  "Enabled": true,
  "DefaultAppTenantId": "mon-tenant",
  "Tenants": [{
    "AppTenantId": "mon-tenant",
    "DisplayName": "Connexion SSO",
    "Enabled": true,
    "Hosts": [ "localhost:3000" ],
    "AzureEntraId": { "TenantId": "…", "ClientId": "…", "ClientSecret": "cipher-…", "AdditionalScopes": [ "User.Read" ] }
  }]
}

Important

  • Le package ne déchiffre pas le ClientSecret (la config est portée par TON appSettings). Deux cas, détaillés dans A6tm.Core6.Sso.AI-GUIDE.md §6 : (1) app qui chiffre → le SsoSettings du package porte déjà [Encrypted] (de A6tm.Core6.Abstractions) : imbrique-le dans ton AppSettings et ton ConfigureAndDecrypt le déchiffre en cascade, puis AddSsoServices(SsoSettings, …)plus de DTO miroir ; (2) app sans chiffrement → injection directe (AddSsoServices(ssoUserAuth, IConfiguration)). ⚠️ Ne lie pas une config chiffrée via IConfiguration : elle n'est pas déchiffrée.
  • SSO « server-centric » : pas de MSAL côté SPA, la redirection se fait via GET /sso/signin/{appTenantId}.
  • Dev local avec SSO : la SPA et l'API étant sur des ports localhost distincts, un reverse-proxy de dev (origine HTTPS commune + en-tête Forwarded, lu automatiquement par le package) est nécessaire pour que le flux OIDC fonctionne. Guide + web.config d'exemple fournis dans le template (docs/reverse-proxy/). En production, aucun proxy requis (API servie en sous-site de la SPA).

Documentation

Endpoints exposés

Endpoint Rôle
GET /sso/config/{appTenantId?} Config SSO du tenant (+ URL d'auth si AutoRedirect)
GET /sso/tenants Liste des tenants disponibles
GET /sso/signin/{appTenantId?} Démarre l'authentification (redirection)
GET /sso/oidc/callback/{appTenantId?} Callback OIDC (échange code → session)
POST /sso/logout/{appTenantId} URL de déconnexion
GET /sso/metadata/{appTenantId} Métadonnées Service Provider
GET /sso/{appTenantId?}/.well-known/openid-configuration Document de découverte

No packages depend on A6tm.Core6.Sso.

0.3.0 — Documentation embarquée corrigée/complétée : déchiffrement direct du SsoSettings via [Encrypted] (fin du « DTO miroir »), nouvelle section « Contrat SPA (types TS) » pour les projets hors socle, note de génération TS conditionnelle, guide Azure Entra ID embarqué (docs/) et section « Modes de déploiement ». Aucun changement de code ni de comportement. 0.2.0 — Référence A6tm.Core6.Abstractions : DTO front (SsoTenantConfigDto, ESsoType) exposés à la génération TypeScript des apps, et ClientSecret annoté [Encrypted] (déchiffrement par l'app hôte). 0.1.0 — Version initiale : SSO OpenID Connect multi-tenant, multi-tenant, PKCE, ISsoUserAuth. Détail complet dans le CHANGELOG.md (inclus dans docs/).

.NET 10.0

.NET 8.0

.NET 9.0

Version Downloads Last updated
1.0.0 12 09/07/2026
0.3.0 5 09/07/2026