Protocollo SAML 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 elemento AuthnRequest
(richiesta di autenticazione) a Microsoft Entra ID (provider di identità). Microsoft Entra ID usa quindi un'associazione post HTTP per pubblicare un elemento Response
al servizio cloud.
Nota
Questo articolo illustra l'uso di SAML per l'accesso Single Sign-On. Per altre informazioni su altri modi per gestire l'accesso Single Sign-On (ad esempio, usando OpenID Connect o l'autenticazione integrata di Windows), vedere Single Sign-On alle applicazioni in Microsoft Entra ID.
AuthnRequest
Per richiedere l'autenticazione utente, i servizi cloud inviano un elemento AuthnRequest
all'ID Microsoft Entra. Un esempio di SAML 2.0 AuthnRequest
potrebbe essere simile all'esempio 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 | Digitare | Descrizione |
---|---|---|
ID |
Obbligatorio | 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 |
Obbligatorio | Questo parametro deve essere impostato su 2.0 . |
IssueInstant |
Obbligatorio | 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 |
Opzionale | Se specificato, questo parametro deve corrispondere al RedirectUri del servizio cloud in Microsoft Entra ID. |
ForceAuthn |
Opzionale | 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 |
Opzionale | 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 attributi di AuthnRequest
, ad esempio Consent
, Destination
, AssertionConsumerServiceIndex
, AttributeConsumerServiceIndex
e ProviderName
vengono ignorati.
Microsoft Entra ID ignora anche l'elemento Conditions
in AuthnRequest
.
Emittente
L'elemento Issuer
in un AuthnRequest
deve corrispondere esattamente a uno dei ServicePrincipalNames nel servizio cloud in Microsoft Entra ID. In genere, questa opzione viene impostata
Un estratto SAML contenente l'elemento Issuer
è simile all'esempio 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 elementi AuthnRequest
inviati a Microsoft Entra ID.
Un elemento NameIdPolicy
è simile all'esempio seguente:
<NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>
Se viene fornito NameIDPolicy
, è possibile includerne l'attributo facoltativo Format
. L'attributo Format
può avere solo uno dei valori seguenti; qualsiasi altro valore genera 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
nel formato dell'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 dell'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 si specifica SPNameQualifier
, l'ID Entra di Microsoft include lo stesso SPNameQualifier
nella risposta.
Microsoft Entra ID ignora l'attributo AllowCreate
.
RequestedAuthnContext
L'elemento RequestedAuthnContext
specifica i metodi di autenticazione desiderati. È facoltativo in AuthnRequest
elementi inviati a Microsoft Entra ID.
Nota
Se il RequestedAuthnContext
è incluso nella richiesta SAML, l'elemento Comparison
deve essere impostato su exact
.
Microsoft Entra ID supporta i valori di AuthnContextClassRef
seguenti.
Metodo di autenticazione | URI della classe di contesto di autenticazione |
---|---|
Kerberos | urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos |
Nome utente e password | urn:oasis:names:tc:SAML:2.0:ac:classes:Password |
Infrastruttura a chiave pubblica PGP | urn:oasis:names:tc:SAML:2.0:ac:classes:PGP |
Proteggere la password remota | urn:oasis:names:tc:SAML:2.0:ac:classes:SecureRemotePassword |
Firma digitale XML | urn:oasis:names:tc:SAML:2.0:ac:classes:XMLDSig |
Infrastruttura a chiave pubblica semplice | urn:oasis:names:tc:SAML:2.0:ac:classes:SPKI |
Smart card | urn:oasis:names:tc:SAML:2.0:ac:classes:Smartcard |
Smart card con chiave privata racchiusa e UN PIN | urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI |
Client Transport Layer Security (TLS) | urn:oasis:names:tc:SAML:2.0:ac:classes:TLSClient |
Specificato | urn:oasis:names:tc:SAML:2.0:ac:classes:Unspecified |
Certificato X.509 | urn:oasis:names:tc:SAML:2.0:ac:classes:X509 |
Autenticazione integrata di Windows | urn:federation:authentication:windows |
Ambito
L'elemento Scoping
, che include un elenco di provider di identità, è facoltativo in AuthnRequest
elementi inviati a Microsoft Entra ID.
Se specificato, non includere l'attributo ProxyCount
, IDPListOption
o RequesterID
elemento, perché non sono supportati.
Firma
Un elemento Signature
negli elementi AuthnRequest
è 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 parametro login_hint
alla richiesta HTTP all'URL single sign-on, con nameID dell'oggetto come valore del parametro.
Risposta
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>
Risposta
L'elemento Response
include il risultato della richiesta di autorizzazione. Microsoft Entra ID imposta i valori ID
, Version
e IssueInstant
nell'elemento Response
. Imposta anche gli attributi seguenti:
-
Destination
: al termine dell'accesso, questa opzione viene impostata sulRedirectUri
del provider di servizi (servizio cloud). -
InResponseTo
: è impostato sull'attributoID
dell'elementoAuthnRequest
che ha avviato la risposta.
Emittente
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 potrebbe essere simile all'esempio seguente:
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
Stato
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 rappresenta lo stato della richiesta. Include anche l'elemento StatusMessage
, che contiene messaggi di errore personalizzati generati durante il processo di accesso.
L'esempio seguente è 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 al ID
, IssueInstant
e Version
, Microsoft Entra ID imposta gli elementi seguenti nell'elemento Assertion
della risposta.
Emittente
Questa opzione è impostata su https://sts.windows.net/<TenantIDGUID>/
in cui <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 per 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 indirizzato solo al provider di servizi che rappresenta il gruppo di destinatari per il token. È persistente: può essere revocato, ma non viene mai riassegnato. È anche opaco, in quanto non rivela nulla sull'utente e non può essere usato come identificatore per le query sugli 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 (minore di un secondo) successivo al valore diIssueInstant
attributo 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
è 70 minuti dopo il valore dell'attributoNotBefore
.
Pubblico
Contiene un URI che identifica un gruppo di destinatari previsto. Microsoft Entra ID imposta il valore di questo elemento sul valore di Issuer
elemento del AuthnRequest
che ha avviato l'accesso. Per valutare il valore Audience
, usare il valore del App ID URI
specificato durante la registrazione dell'applicazione.
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
Analogamente al valore Issuer
, il valore Audience
deve corrispondere esattamente a uno dei nomi delle entità servizio che rappresenta il servizio cloud in Microsoft Entra ID. Tuttavia, se 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 elemento di esempio 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>
-
nome attestazione : il valore dell'attributo
Name
(http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
) è il nome dell'entità utente dell'utente autenticato, ad esempiotestuser@managedtenant.com
. -
'attestazione ObjectIdentifier : il valore dell'attributo
ObjectIdentifier
(http://schemas.microsoft.com/identity/claims/objectidentifier
) è ilObjectId
dell'oggetto directory che rappresenta l'utente autenticato in Microsoft Entra ID.ObjectId
è un identificatore sicuro non modificabile, globalmente univoco e riutilizzabile dell'utente autenticato.
AuthnStatement
Questo elemento afferma che l'oggetto dell'asserzione è stato autenticato da un determinato mezzo in un determinato momento.
- L'attributo
AuthnInstant
specifica il momento 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>