Opzioni per la registrazione di un'applicazione SAML in Azure AD B2C
Questo articolo descrive le opzioni di configurazione disponibili quando si connette Azure Active Directory B2C (Azure AD B2C) all'applicazione Security Assertion Markup Language (SAML).
Prima di iniziare, usare il selettore Scegli un tipo di criterio per scegliere il tipo di criterio che si sta configurando. Azure Active Directory B2C offre due metodi per definire il modo in cui gli utenti interagiscono con le applicazioni: tramite flussi utente predefiniti o tramite criteri personalizzati completamente configurabili. I passaggi necessari in questo articolo sono diversi per ogni metodo.
Questa funzionalità è disponibile solo per i criteri personalizzati. Per i passaggi di installazione, selezionare Criteri personalizzati nel selettore precedente.
Specificare una firma di risposta SAML
È possibile specificare un certificato da usare per firmare i messaggi SAML. Il messaggio è l'elemento <samlp:Response>
all'interno della risposta SAML inviata all'applicazione.
Se non si ha già una chiave dei criteri, crearne una. Configurare quindi l'elemento SamlMessageSigning
dei metadati nel profilo tecnico dell'autorità di certificazione token SAML. StorageReferenceId
deve fare riferimento al nome della chiave del criterio.
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<!-- SAML Token Issuer technical profile -->
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Protocol Name="SAML2"/>
<OutputTokenFormat>SAML2</OutputTokenFormat>
...
<CryptographicKeys>
<Key Id="SamlMessageSigning" StorageReferenceId="B2C_1A_SamlMessageCert"/>
...
</CryptographicKeys>
...
</TechnicalProfile>
Algoritmo di firma
È possibile configurare l'algoritmo di firma usato per firmare l'asserzione SAML. I possibili valori sono Sha256
, Sha384
, Sha512
o Sha1
. Assicurarsi che il profilo tecnico e l'applicazione usino lo stesso algoritmo di firma. Usare solo l'algoritmo supportato dal certificato.
Configurare l'algoritmo di firma usando la XmlSignatureAlgorithm
chiave di metadati all'interno dell'elemento relying party Metadata
.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="XmlSignatureAlgorithm">Sha256</Item>
</Metadata>
..
</TechnicalProfile>
</RelyingParty>
Controllare la firma dell'asserzione SAML
Quando l'applicazione prevede che la sezione asserzione SAML sia firmata, assicurarsi che il provider di servizi SAML imposti su WantAssertionsSigned
true
. Se è impostato su false
o non esiste, la sezione di asserzione non verrà firmata.
L'esempio seguente mostra i metadati per un provider di servizi SAML, con WantAssertionsSigned
impostato su true
.
<EntityDescriptor ID="id123456789" entityID="https://samltestapp2.azurewebsites.net" validUntil="2099-12-31T23:59:59Z" xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
<SPSSODescriptor WantAssertionsSigned="true" AuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
...
</SPSSODescriptor>
</EntityDescriptor>
Certificato di firma
I criteri devono specificare un certificato da usare per firmare la sezione asserzioni SAML della risposta SAML. Se non si ha già una chiave dei criteri, crearne una. Configurare quindi l'elemento SamlAssertionSigning
dei metadati nel profilo tecnico dell'autorità di certificazione token SAML. StorageReferenceId
deve fare riferimento al nome della chiave del criterio.
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<!-- SAML Token Issuer technical profile -->
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Protocol Name="SAML2"/>
<OutputTokenFormat>SAML2</OutputTokenFormat>
...
<CryptographicKeys>
<Key Id="SamlAssertionSigning" StorageReferenceId="B2C_1A_SamlMessageCert"/>
...
</CryptographicKeys>
...
</TechnicalProfile>
Abilitare la crittografia nelle asserzioni SAML
Quando l'applicazione prevede che le asserzioni SAML siano in formato crittografato, assicurarsi che la crittografia sia abilitata nei criteri di Azure AD B2C.
Azure AD B2C usa il certificato di chiave pubblica del provider di servizi per crittografare l'asserzione SAML. La chiave pubblica deve esistere nell'endpoint dei metadati dell'applicazione SAML con il KeyDescriptor
use
valore impostato su Encryption
, come illustrato nell'esempio seguente:
<KeyDescriptor use="encryption">
<KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
<X509Data>
<X509Certificate>valid certificate</X509Certificate>
</X509Data>
</KeyInfo>
</KeyDescriptor>
Per consentire ad Azure AD B2C di inviare asserzioni crittografate, impostare l'elemento WantsEncryptedAssertion
dei metadati su true
nel profilo tecnico della relying party. È anche possibile configurare l'algoritmo usato per crittografare l'asserzione SAML.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="WantsEncryptedAssertions">true</Item>
</Metadata>
..
</TechnicalProfile>
</RelyingParty>
Metodo di crittografia
Per configurare il metodo di crittografia usato per crittografare i dati dell'asserzione SAML, impostare la DataEncryptionMethod
chiave di metadati all'interno della relying party. I valori possibili sono Aes256
(impostazione predefinita), Aes192
, Sha512
o Aes128
. I metadati controllano il valore dell'elemento <EncryptedData>
nella risposta SAML.
Per configurare il metodo di crittografia per crittografare la copia della chiave usata per crittografare i dati dell'asserzione SAML, impostare la KeyEncryptionMethod
chiave di metadati all'interno della relying party. I valori possibili sono:
Rsa15
(impostazione predefinita): algoritmo RSA Public Key Cryptography Standard (PKCS) versione 1.5.RsaOaep
: algoritmo di crittografia OAEP (Optimal Asymmetric Encryption Padding) RSA.
I metadati controllano il valore dell'elemento <EncryptedKey>
nella risposta SAML.
Nell'esempio seguente viene illustrata la EncryptedAssertion
sezione di un'asserzione SAML. Il metodo di dati crittografato è Aes128
e il metodo della chiave crittografata è Rsa15
.
<saml:EncryptedAssertion>
<xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Type="http://www.w3.org/2001/04/xmlenc#Element">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" />
<dsig:KeyInfo>
<xenc:EncryptedKey>
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<xenc:CipherData>
<xenc:CipherValue>...</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedKey>
</dsig:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>...</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
</saml:EncryptedAssertion>
È possibile modificare il formato delle asserzioni crittografate. Per configurare il formato di crittografia, impostare la UseDetachedKeys
chiave di metadati all'interno della relying party. Valori possibili: true
o false
(impostazione predefinita). Quando il valore è impostato su true
, le chiavi scollegate aggiungono l'asserzione crittografata come figlio di EncryptedData
EncryptedAssertion
anziché .
Configurare il metodo di crittografia e il formato usando le chiavi di metadati all'interno del profilo tecnico della relying party:
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="DataEncryptionMethod">Aes128</Item>
<Item Key="KeyEncryptionMethod">Rsa15</Item>
<Item Key="UseDetachedKeys">false</Item>
</Metadata>
..
</TechnicalProfile>
</RelyingParty>
Configurare il flusso avviato da IdP
Quando l'applicazione prevede di ricevere un'asserzione SAML senza prima inviare una richiesta SAML AuthN al provider di identità (IdP), è necessario configurare Azure AD B2C per il flusso avviato da IdP.
Nel flusso avviato da IdP il provider di identità (Azure AD B2C) avvia il processo di accesso. Il provider di identità invia una risposta SAML non richiesta al provider di servizi (applicazione relying party).
Attualmente non sono supportati scenari in cui il provider di identità di avvio è un provider di identità esterno federato con Azure AD B2C, ad esempio Active Directory Federation Services o Salesforce. Il flusso avviato da IdP è supportato solo per l'autenticazione dell'account locale in Azure AD B2C.
Per abilitare il flusso avviato da IdP, impostare l'elemento dei IdpInitiatedProfileEnabled
metadati su true
nel profilo tecnico della relying party.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="IdpInitiatedProfileEnabled">true</Item>
</Metadata>
..
</TechnicalProfile>
</RelyingParty>
Per accedere o iscriversi a un utente tramite il flusso avviato da IdP, usare l'URL seguente:
https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/generic/login?EntityId=<app-identifier-uri>&RelayState=<relay-state>
Sostituire i valori seguenti:
- Sostituire
<tenant-name>
con il nome del tenant. - Sostituire
<policy-name>
con il nome dei criteri della relying party SAML. - Sostituire
<app-identifier-uri>
con ilidentifierUris
valore nel file di metadati, ad esempiohttps://contoso.onmicrosoft.com/app-name
. - [Facoltativo] sostituire
<relay-state>
con un valore incluso nella richiesta di autorizzazione restituito anche nella risposta del token. Ilrelay-state
parametro viene usato per codificare informazioni sullo stato dell'utente nell'app prima che si sia verificata la richiesta di autenticazione, ad esempio la pagina in cui si trovavano.
Criterio di esempio
È possibile usare un criterio di esempio completo per i test con l'app di test SAML:
- Scaricare i criteri di esempio di accesso avviati da SAML-SP.
- Aggiornare
TenantId
in modo che corrisponda al nome del tenant. Questo articolo usa l'esempio contoso.b2clogin.com. - Mantenere il nome del criterio B2C_1A_signup_signin_saml.
Configurare la durata della risposta SAML
È possibile configurare l'intervallo di tempo in cui la risposta SAML rimane valida. Impostare la durata usando l'elemento TokenLifeTimeInSeconds
di metadati all'interno del profilo tecnico dell'autorità di certificazione del token SAML. Questo valore è il numero di secondi che possono trascorrere dal NotBefore
timestamp, calcolato al momento del rilascio del token. La durata predefinita è 300 secondi (cinque minuti).
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Protocol Name="SAML2"/>
<OutputTokenFormat>SAML2</OutputTokenFormat>
<Metadata>
<Item Key="TokenLifeTimeInSeconds">400</Item>
</Metadata>
...
</TechnicalProfile>
Configurare l'asimmetria temporale di una risposta SAML
È possibile configurare l'asimmetria temporale applicata al timestamp di risposta NotBefore
SAML. Questa configurazione garantisce che se i tempi tra due piattaforme non sono sincronizzati, l'asserzione SAML verrà comunque considerata valida quando è entro questo intervallo di tempo.
Impostare l'asimmetria temporale usando l'elemento TokenNotBeforeSkewInSeconds
dei metadati all'interno del profilo tecnico dell'autorità di certificazione del token SAML. Il valore di asimmetria viene specificato in secondi, con un valore predefinito pari a 0. Il valore massimo è 3600 (un'ora).
Ad esempio, quando TokenNotBeforeSkewInSeconds
è impostato su 120
secondi:
- Il token viene emesso alle 13:05:10 UTC.
- Il token è valido dalle 13:03:10 UTC.
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Protocol Name="SAML2"/>
<OutputTokenFormat>SAML2</OutputTokenFormat>
<Metadata>
<Item Key="TokenNotBeforeSkewInSeconds">120</Item>
</Metadata>
...
</TechnicalProfile>
Rimuovere millisecondi dalla data e dall'ora
È possibile specificare se i millisecondi verranno rimossi dai valori di data e ora all'interno della risposta SAML. Questi valori includono IssueInstant
, NotBefore
, NotOnOrAfter
e AuthnInstant
. Per rimuovere i millisecondi, impostare la RemoveMillisecondsFromDateTime
chiave di metadati all'interno della relying party. Valori possibili: false
(impostazione predefinita) o true
.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2" />
<Metadata>
<Item Key="RemoveMillisecondsFromDateTime">true</Item>
</Metadata>
<OutputClaims>
...
</OutputClaims>
<SubjectNamingInfo ClaimType="objectId" ExcludeAsClaim="true" />
</TechnicalProfile>
</RelyingParty>
Usare un ID autorità di certificazione per eseguire l'override di un URI dell'autorità di certificazione
Se sono presenti più applicazioni SAML che dipendono da valori diversi entityID
, è possibile eseguire l'override del IssuerUri
valore nel file della relying party. Per eseguire l'override dell'URI dell'autorità di certificazione, copiare il profilo tecnico con l'ID dal file di base ed eseguire l'override Saml2AssertionIssuer
del IssuerUri
valore.
Suggerimento
Copiare la <ClaimsProviders>
sezione dalla base e mantenere questi elementi all'interno del provider di attestazioni: <DisplayName>Token Issuer</DisplayName>
, <TechnicalProfile Id="Saml2AssertionIssuer">
e <DisplayName>Token Issuer</DisplayName>
.
Esempio:
<ClaimsProviders>
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Metadata>
<Item Key="IssuerUri">customURI</Item>
</Metadata>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
</ClaimsProviders>
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpInSAML" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2" />
<Metadata>
…
Gestire una sessione
È possibile gestire la sessione tra Azure AD B2C e l'applicazione relying party SAML usando l'elemento UseTechnicalProfileForSessionManagement
e SamlSSOSessionProvider.
Forzare gli utenti a ripetere l'autenticazione
Per forzare gli utenti a ripetere l'autenticazione, l'applicazione può includere l'attributo ForceAuthn
nella richiesta di autenticazione SAML. L'attributo ForceAuthn
è un valore booleano. Quando è impostata su true
, la sessione dell'utente verrà invalidata in Azure AD B2C e l'utente è costretto a ripetere l'autenticazione.
La richiesta di autenticazione SAML seguente illustra come impostare l'attributo ForceAuthn
su true
.
<samlp:AuthnRequest
Destination="https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1A_SAML2_signup_signin/samlp/sso/login"
ForceAuthn="true" ...>
...
</samlp:AuthnRequest>
Firmare i metadati SAML idP di Azure AD B2C
È possibile indicare ad Azure AD B2C di firmare il relativo documento di metadati per il provider di identità SAML, se l'applicazione lo richiede. Se non si ha già una chiave dei criteri, crearne una. Configurare quindi l'elemento MetadataSigning
dei metadati nel profilo tecnico dell'autorità di certificazione token SAML. StorageReferenceId
deve fare riferimento al nome della chiave del criterio.
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<!-- SAML Token Issuer technical profile -->
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Protocol Name="SAML2"/>
<OutputTokenFormat>SAML2</OutputTokenFormat>
...
<CryptographicKeys>
<Key Id="MetadataSigning" StorageReferenceId="B2C_1A_SamlMetadataCert"/>
...
</CryptographicKeys>
...
</TechnicalProfile>
Eseguire il debug del protocollo SAML
Per configurare ed eseguire il debug dell'integrazione con il provider di servizi, è possibile usare un'estensione del browser per il protocollo SAML. Le estensioni del browser includono l'estensione SAML DevTools per Chrome, SAML-tracer per Firefox e Strumenti di sviluppo per Edge o Internet Explorer.
Usando questi strumenti, è possibile controllare l'integrazione tra l'applicazione e Azure AD B2C. Ad esempio:
- Controllare se la richiesta SAML contiene una firma e determinare quale algoritmo viene usato per accedere alla richiesta di autorizzazione.
- Controllare se Azure AD B2C restituisce un messaggio di errore.
- Controllare se la sezione asserzione è crittografata.
Passaggi successivi
- Per altre informazioni sul protocollo SAML, vedere il sito Web OASIS.
- Ottenere l'app Web di test SAML dal repository della community GitHub di Azure AD B2C.