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.

Screenshot del flusso di lavoro Single Sign-On (SSO).

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="id6c1c178c166d486687be4aaf5e482730"
  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, AssertionConsumerServiceIndexDestination, 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'attestazione NameID come identificatore pairwise.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: Microsoft Entra ID rilascia l'attestazione NameID 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'attestazione NameID come identificatore pairwise.
  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient: Microsoft Entra ID rilascia l'attestazione NameID 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="id758d0ef385634593a77bdf7e632984b6" 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 IDvalori e IssueInstantVersion nell'elemento Response . Imposta anche gli attributi seguenti:

  • Destination: al termine dell'accesso, questa opzione viene impostata su RedirectUri del provider di servizi (servizio cloud).
  • InResponseTo: viene impostato sull'attributo ID dell'elemento AuthnRequest 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-dd33-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'attributo IssueInstant dell'elemento Assertion. 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'attributo NotBefore.

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 esempio testuser@managedtenant.com.
  • Attestazione ObjectIdentifier: il valore dell'attributo (http://schemas.microsoft.com/identity/claims/objectidentifier) è l'oggetto ObjectId dell'oggetto ObjectIdentifier 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>