Protocollo SAML per Single Sign-On
Questo articolo illustra le richieste di autenticazione SAML 2.0 e le risposte supportate da Microsoft Entra ID per l'accesso Single Sign-On (SSO).
Il diagramma del protocollo seguente descrive la sequenza di Single Sign-On. Il servizio cloud (provider di servizi) usa un'associazione di reindirizzamento HTTP per passare un AuthnRequest
elemento (richiesta di autenticazione) a Microsoft Entra ID (il provider di identità). Microsoft Entra ID usa quindi un'associazione post HTTP per pubblicare un Response
elemento nel servizio cloud.
Nota
Questo articolo illustra l'uso di SAML per Single Sign-On. Per altre informazioni su altri modi per gestire l'accesso Single Sign-On(ad esempio, usando OpenID Connessione o autenticazione di Windows integrato), vedere Single Sign-On per le applicazioni in Microsoft Entra ID.
AuthnRequest
Per richiedere l'autenticazione utente, i servizi cloud inviano un AuthnRequest
elemento a Microsoft Entra ID. Un elemento AuthnRequest
SAML 2.0 di esempio dovrebbe essere simile al seguente:
<samlp:AuthnRequest
xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
ID="C2dE3fH4iJ5kL6mN7oP8qR9sT0uV1w"
Version="2.0" IssueInstant="2013-03-18T03:28:54.1839884Z"
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>
</samlp:AuthnRequest>
Parametro | Tipo | Descrizione |
---|---|---|
ID |
Richiesto | Microsoft Entra ID usa questo attributo per popolare l'attributo InResponseTo della risposta restituita. L'ID non deve iniziare con un numero, quindi una strategia comune consiste nell'anteporre una stringa come "ID" alla rappresentazione di stringa di un GUID. Ad esempio, id6c1c178c166d486687be4aaf5e482730 è un ID valido. |
Version |
Richiesto | Questo parametro deve essere impostato su 2.0 . |
IssueInstant |
Richiesto | Stringa DateTime con un valore UTC e formato round trip ("o"). Microsoft Entra ID prevede un valore DateTime di questo tipo, ma non valuta o usa il valore. |
AssertionConsumerServiceURL |
Facoltativo | Se specificato, questo parametro deve corrispondere a quello RedirectUri del servizio cloud in Microsoft Entra ID. |
ForceAuthn |
Facoltativo | Si tratta di un valore booleano. Se true, significa che l'utente sarà costretto a ripetere l'autenticazione, anche se ha una sessione valida con l'ID Microsoft Entra. |
IsPassive |
Facoltativo | Si tratta di un valore booleano che specifica se Microsoft Entra ID deve autenticare l'utente in modo invisibile all'utente, senza interazione dell'utente, usando il cookie di sessione, se presente. Se è true, Microsoft Entra ID tenta di autenticare l'utente usando il cookie di sessione. |
Tutti gli altri AuthnRequest
attributi, ad esempio Consent
, AssertionConsumerServiceIndex
Destination
, AttributeConsumerServiceIndex
, e ProviderName
vengono ignorati.
Microsoft Entra ID ignora anche l'elemento Conditions
in AuthnRequest
.
Autorità di certificazione
L'elemento Issuer
in un AuthnRequest
deve corrispondere esattamente a uno dei ServicePrincipalNames nel servizio cloud in Microsoft Entra ID. Viene in genere impostato sull' URI ID app specificato durante la registrazione dell'applicazione.
Un estratto di codice SAML di esempio contenente l'elemento Issuer
è simile al seguente:
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>
NameIDPolicy
Questo elemento richiede un particolare formato ID nome nella risposta ed è facoltativo negli AuthnRequest
elementi inviati all'ID Microsoft Entra.
Un elemento NameIdPolicy
è simile all'esempio seguente:
<NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>
Se viene specificato NameIDPolicy
è possibile includere l'attributo facoltativo Format
. L'attributo Format
può avere solo uno dei valori seguenti; qualsiasi altro valore causa un errore.
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
: Microsoft Entra ID rilascia l'attestazioneNameID
come identificatore pairwise.urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
: Microsoft Entra ID rilascia l'attestazioneNameID
in formato indirizzo di posta elettronica.urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
: questo valore consente a Microsoft Entra ID di selezionare il formato di attestazione. Microsoft Entra ID rilascia l'attestazioneNameID
come identificatore pairwise.urn:oasis:names:tc:SAML:2.0:nameid-format:transient
: Microsoft Entra ID rilascia l'attestazioneNameID
come valore generato in modo casuale univoco per l'operazione SSO corrente. Ciò significa che il valore è temporaneo e non può essere usato per identificare l'utente che esegue l'autenticazione.
Se SPNameQualifier
viene specificato, l'ID Microsoft Entra include lo stesso SPNameQualifier
nella risposta.
Microsoft Entra ID ignora l'attributo AllowCreate
.
RequestedAuthnContext
L'elemento RequestedAuthnContext
specifica i metodi di autenticazione. È facoltativo negli AuthnRequest
elementi inviati a Microsoft Entra ID. Microsoft Entra ID supporta AuthnContextClassRef
valori come urn:oasis:names:tc:SAML:2.0:ac:classes:Password
.
Scoping
L'elemento Scoping
, che include un elenco di provider di identità, è facoltativo negli AuthnRequest
elementi inviati a Microsoft Entra ID.
Se viene specificato, non includere l'attributo ProxyCount
e l'elemento IDPListOption
o RequesterID
perché non sono supportati.
Firma
Un Signature
elemento negli AuthnRequest
elementi è facoltativo. Microsoft Entra ID può essere configurato per applicare il requisito delle richieste di autenticazione firmate. Se abilitata, vengono accettate solo le richieste di autenticazione firmate; in caso contrario, la verifica del richiedente viene fornita solo rispondendo agli URL del servizio consumer di asserzione registrati.
Oggetto
Non includere un elemento Subject
. Microsoft Entra ID non supporta la specifica di un oggetto in AuthnRequest
e restituirà un errore se ne viene specificato uno.
Un oggetto può invece essere fornito aggiungendo un login_hint
parametro alla richiesta HTTP all'URL single sign-on, con nameID dell'oggetto come valore del parametro.
Response
Al termine dell'accesso richiesto, Microsoft Entra ID invia una risposta al servizio cloud. Una risposta a un tentativo di accesso riuscito è simile all'esempio seguente:
<samlp:Response ID="_a4958bfd-e107-4e67-b06d-0d85ade2e76a" Version="2.0" IssueInstant="2013-03-18T07:38:15.144Z" Destination="https://contoso.com/identity/inboundsso.aspx" InResponseTo="C2dE3fH4iJ5kL6mN7oP8qR9sT0uV1w" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
...
</ds:Signature>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
</samlp:Status>
<Assertion ID="_bf9c623d-cc20-407a-9a59-c2d0aee84d12" IssueInstant="2013-03-18T07:38:15.144Z" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
<Issuer>https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
...
</ds:Signature>
<Subject>
<NameID>Uz2Pqz1X7pxe4XLWxV9KJQ+n59d573SepSAkuYKSde8=</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData InResponseTo="id758d0ef385634593a77bdf7e632984b6" NotOnOrAfter="2013-03-18T07:43:15.144Z" Recipient="https://contoso.com/identity/inboundsso.aspx" />
</SubjectConfirmation>
</Subject>
<Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z">
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
</Conditions>
<AttributeStatement>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
<AttributeValue>testuser@contoso.com</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
<AttributeValue>3F2504E0-4F89-11D3-9A0C-0305E82C3301</AttributeValue>
</Attribute>
...
</AttributeStatement>
<AuthnStatement AuthnInstant="2013-03-18T07:33:56.000Z" SessionIndex="_bf9c623d-cc20-407a-9a59-c2d0aee84d12">
<AuthnContext>
<AuthnContextClassRef> urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
</AuthnContext>
</AuthnStatement>
</Assertion>
</samlp:Response>
Response
L'elemento Response
include il risultato della richiesta di autorizzazione. Microsoft Entra ID imposta i ID
valori e IssueInstant
Version
nell'elemento Response
. Imposta anche gli attributi seguenti:
Destination
: al termine dell'accesso, questa opzione viene impostata suRedirectUri
del provider di servizi (servizio cloud).InResponseTo
: viene impostato sull'attributoID
dell'elementoAuthnRequest
che ha avviato la risposta.
Autorità di certificazione
Microsoft Entra ID imposta l'elemento Issuer
su https://sts.windows.net/<TenantIDGUID>/
dove <TenantIDGUID>
è l'ID tenant del tenant di Microsoft Entra.
Ad esempio, una risposta con elemento Issuer può avere un aspetto simile al seguente:
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
Status
L'elemento Status
indica l'esito positivo o negativo dell'accesso. Include l'elemento StatusCode
che contiene un codice o un set di codici annidati che rappresentano lo stato della richiesta. Include anche l'elemento StatusMessage
che contiene i messaggi di errore personalizzati generati durante il processo di accesso.
L'esempio seguente rappresenta una risposta SAML a un tentativo di accesso non riuscito.
<samlp:Response ID="_f0961a83-d071-4be5-a18c-9ae7b22987a4" Version="2.0" IssueInstant="2013-03-18T08:49:24.405Z" InResponseTo="iddce91f96e56747b5ace6d2e2aa9d4f8c" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Requester">
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:RequestUnsupported" />
</samlp:StatusCode>
<samlp:StatusMessage>AADSTS75006: An error occurred while processing a SAML2 Authentication request. AADSTS90011: The SAML authentication request property 'NameIdentifierPolicy/SPNameQualifier' is not supported.
Trace ID: 0000aaaa-11bb-cccc-dd22-eeeeee333333
Timestamp: 2013-03-18 08:49:24Z</samlp:StatusMessage>
</samlp:Status>
</samlp:Response>
Asserzione
Oltre a ID
, IssueInstant
e Version
, Microsoft Entra ID imposta gli elementi seguenti nell'elemento Assertion
della risposta.
Autorità di certificazione
Viene impostato su https://sts.windows.net/<TenantIDGUID>/
dove <TenantIDGUID>
è l'ID tenant del tenant di Microsoft Entra.
<Issuer>https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
Firma
Microsoft Entra ID firma l'asserzione in risposta a un accesso riuscito. L'elemento Signature
contiene una firma digitale che il servizio cloud può usare per autenticare l'origine e verificare l'integrità dell'asserzione.
Per generare questa firma digitale, Microsoft Entra ID usa la chiave di firma nell'elemento IDPSSODescriptor
del documento di metadati.
<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
digital_signature_here
</ds:Signature>
Oggetto
Specifica il principio che è l'oggetto delle istruzioni nell'asserzione. Contiene un elemento NameID
che rappresenta l'utente autenticato. Il valore NameID
è un identificatore di destinazione che viene indirizzato solo al provider di servizi destinatario del token. È persistente: può essere revocato, ma mai riassegnato. È anche opaco perché non rivela alcun dettaglio relativo all'utente e non può essere usato come identificatore per le query di attributi.
L'attributo Method
dell'elemento SubjectConfirmation
è sempre impostato su urn:oasis:names:tc:SAML:2.0:cm:bearer
.
<Subject>
<NameID>Uz2Pqz1X7pxe4XLWxV9KJQ+n59d573SepSAkuYKSde8=</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData InResponseTo="id758d0ef385634593a77bdf7e632984b6" NotOnOrAfter="2013-03-18T07:43:15.144Z" Recipient="https://contoso.com/identity/inboundsso.aspx" />
</SubjectConfirmation>
</Subject>
Condizioni
Questo elemento specifica le condizioni che definiscono l'uso accettabile delle asserzioni SAML.
<Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z">
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
</Conditions>
Gli attributi NotBefore
e NotOnOrAfter
specificano l'intervallo durante il quale l'asserzione è valida.
- Il valore dell'attributo
NotBefore
è uguale o leggermente successivo (meno di un secondo) al valore dell'attributoIssueInstant
dell'elementoAssertion
. Microsoft Entra ID non tiene conto di alcuna differenza di tempo tra se stesso e il servizio cloud (provider di servizi) e non aggiunge alcun buffer a questa volta. - Il valore dell'attributo
NotOnOrAfter
è successivo di 70 minuti al valore dell'attributoNotBefore
.
Destinatari
Contiene un URI che identifica un gruppo di destinatari. Microsoft Entra ID imposta il valore di questo elemento sul valore dell'elemento Issuer
dell'oggetto AuthnRequest
che ha avviato l'accesso. Per valutare il valore di Audience
, usare il valore di App ID URI
specificato durante la registrazione dell'applicazione.
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
Analogamente al Issuer
valore, il Audience
valore deve corrispondere esattamente a uno dei nomi dell'entità servizio che rappresenta il servizio cloud in Microsoft Entra ID. Se tuttavia il valore dell'elemento Issuer
non è un valore URI, il valore Audience
nella risposta è il valore Issuer
preceduto da spn:
.
AttributeStatement
Contiene attestazioni relative all'oggetto o all'utente. L'estratto seguente contiene un esempio di elemento AttributeStatement
. I puntini di sospensione indicano che l'elemento può includere più attributi e valori di attributo.
<AttributeStatement>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
<AttributeValue>testuser@contoso.com</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
<AttributeValue>3F2504E0-4F89-11D3-9A0C-0305E82C3301</AttributeValue>
</Attribute>
...
</AttributeStatement>
- Attestazione Name: il valore dell'attributo
Name
,http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
, è il nome entità dell'utente autenticato, ad esempiotestuser@managedtenant.com
. - Attestazione ObjectIdentifier: il valore dell'attributo (
http://schemas.microsoft.com/identity/claims/objectidentifier
) è l'oggettoObjectId
dell'oggettoObjectIdentifier
directory che rappresenta l'utente autenticato in Microsoft Entra ID.ObjectId
è un identificatore non modificabile, globalmente univoco e riutilizzabile in modo sicuro dell'utente autenticato.
AuthnStatement
Questo elemento asserisce che l'oggetto dell'asserzione è stato autenticato in un determinato modo e in un determinato momento.
- L'attributo
AuthnInstant
specifica l'ora in cui l'utente ha eseguito l'autenticazione con l'ID Microsoft Entra. - L'elemento
AuthnContext
specifica il contesto di autenticazione usato per autenticare l'utente.
<AuthnStatement AuthnInstant="2013-03-18T07:33:56.000Z" SessionIndex="_bf9c623d-cc20-407a-9a59-c2d0aee84d12">
<AuthnContext>
<AuthnContextClassRef> urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
</AuthnContext>
</AuthnStatement>