Condividi tramite


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.

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

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, AttributeConsumerServiceIndexe 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 sull' URI ID app specificato durante la registrazione dell'applicazione.

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'attestazione NameID come identificatore pairwise.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: Microsoft Entra ID rilascia l'attestazione NameID 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'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 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 sul RedirectUri del provider di servizi (servizio cloud).
  • InResponseTo: è impostato sull'attributo ID dell'elemento AuthnRequest 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 di IssueInstant attributo 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 è 70 minuti dopo il valore dell'attributo NotBefore.

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