Protocollo SAML per Single Sign-OnSingle Sign-On SAML protocol

Questo articolo illustra le richieste di autenticazione SAML 2.0 e le risposte supportate da Azure Active Directory (Azure AD) per Single Sign-On.This article covers the SAML 2.0 authentication requests and responses that Azure Active Directory (Azure AD) supports for Single Sign-On.

Il diagramma del protocollo di seguito descrive la sequenza di accesso Single Sign-On.The protocol diagram below describes the single sign-on sequence. Il servizio cloud (provider di servizi) usa un'associazione di reindirizzamento HTTP per passare un elemento AuthnRequest (richiesta di autenticazione) ad Azure AD (provider di identità).The cloud service (the service provider) uses an HTTP Redirect binding to pass an AuthnRequest (authentication request) element to Azure AD (the identity provider). Azure AD usa quindi una un'associazione HTTP Post per inviare un elemento Response al servizio cloud.Azure AD then uses an HTTP post binding to post a Response element to the cloud service.

Flusso di lavoro di Single Sign-On

AuthnRequestAuthnRequest

Per richiedere un'autenticazione utente, i servizi cloud inviano un elemento AuthnRequest ad Azure AD.To request a user authentication, cloud services send an AuthnRequest element to Azure AD. Un esempio di SAML 2.0 AuthnRequest può essere simile al seguente:A sample SAML 2.0 AuthnRequest could look like this:

<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>
ParametroParameter DescrizioneDescription
IDID Obbligatoriarequired Azure AD usa questo attributo per popolare l'attributo InResponseTo della risposta restituita.Azure AD uses this attribute to populate the InResponseTo attribute of the returned response. 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.ID must not begin with a number, so a common strategy is to prepend a string like "id" to the string representation of a GUID. Ad esempio, id6c1c178c166d486687be4aaf5e482730 è un ID valido.For example, id6c1c178c166d486687be4aaf5e482730 is a valid ID.
VersioneVersion Obbligatoriarequired Deve essere 2.0.This should be 2.0.
IssueInstantIssueInstant Obbligatoriarequired Stringa DateTime con un valore UTC e formato round trip ("o").This is a DateTime string with a UTC value and round-trip format ("o"). Azure AD prevede un valore DateTime di questo tipo, ma non valuta o usa il valore.Azure AD expects a DateTime value of this type, but does not evaluate or use the value.
AssertionConsumerServiceUrlAssertionConsumerServiceUrl Facoltativaoptional Se specificato deve corrispondere al valore RedirectUri del servizio cloud in Azure AD.If provided, this must match the RedirectUri of the cloud service in Azure AD.
ForceAuthnForceAuthn Facoltativaoptional Si tratta di un valore booleano.This is a boolean value. Se è true, significa che l'utente dovrà ripetere l'autenticazione, anche se ha una sessione valida con Azure AD.If true, this means that the user will be forced to re-authenticate, even if they have a valid session with Azure AD.
IsPassiveIsPassive Facoltativaoptional È un valore booleano che specifica se Azure AD deve autenticare l'utente in modalità invisibile, senza interazione dell'utente, usando il cookie di sessione, se è disponibile.This is a boolean value that specifies whether Azure AD should authenticate the user silently, without user interaction, using the session cookie if one exists. In questo caso Azure AD tenterà di autenticare l'utente usando il cookie di sessione.If this is true, Azure AD will attempt to authenticate the user using the session cookie.

Tutti gli altri attributi AuthnRequest , ad esempio Consent, Destination, AssertionConsumerServiceIndex, AttributeConsumerServiceIndex e ProviderName, vengono ignorati.All other AuthnRequest attributes, such as Consent, Destination, AssertionConsumerServiceIndex, AttributeConsumerServiceIndex and ProviderName are ignored.

Azure AD ignora anche l'elemento Conditions in AuthnRequest.Azure AD also ignores the Conditions element in AuthnRequest.

IssuerIssuer

L'elemento Issuer in una AuthnRequest deve corrispondere esattamente a uno dei ServicePrincipalNames nel servizio cloud in Azure AD.The Issuer element in an AuthnRequest must exactly match one of the ServicePrincipalNames in the cloud service in Azure AD. Viene in genere impostato sull' URI ID app specificato durante la registrazione dell'applicazione.Typically, this is set to the App ID URI that is specified during application registration.

Un estratto di codice SAML di esempio contenente l'elemento Issuer è simile al seguente:A sample SAML excerpt containing the Issuer element looks like this:

<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>

NameIDPolicyNameIDPolicy

Questo elemento richiede un formato di ID nome specifico nella risposta ed è facoltativo negli elementi AuthnRequest inviati ad Azure AD.This element requests a particular name ID format in the response and is optional in AuthnRequest elements sent to Azure AD.

Un elemento NameIdPolicy di esempio è simile al seguente:A sample NameIdPolicy element looks like this:

<NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>

Se viene specificato NameIDPolicy è possibile includere l'attributo facoltativo Format.If NameIDPolicy is provided, you can include its optional Format attribute. L'attributo Format può avere solo uno dei valori seguenti; qualsiasi altro valore causa un errore.The Format attribute can have only one of the following values; any other value results in an error.

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent: Azure Active Directory rilascia l'attestazione NameID come identificatore pairwise.urn:oasis:names:tc:SAML:2.0:nameid-format:persistent: Azure Active Directory issues the NameID claim as a pairwise identifier.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: Azure Active Directory rilascia l'attestazione NameID in formato di indirizzo di posta elettronica.urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: Azure Active Directory issues the NameID claim in e-mail address format.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified: Questo valore consente ad Azure Active Directory di selezionare il formato dell'attestazione.urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified: This value permits Azure Active Directory to select the claim format. Azure Active Directory rilascia NameID come identificatore pairwise.Azure Active Directory issues the NameID as a pairwise identifier.
  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient: Azure Active Directory rilascia l'attestazione NameID come valore generato in modo casuale che è univoco per l'operazione di SSO corrente.urn:oasis:names:tc:SAML:2.0:nameid-format:transient: Azure Active Directory issues the NameID claim as a randomly-generated value that is unique to the current SSO operation. Ciò significa che il valore è temporaneo e non può essere usato per identificare l'utente che esegue l'autenticazione.This means that the value is temporary and cannot be used to identify the authenticating user.

Azure AD ignora l'attributo AllowCreate .Azure AD ignores the AllowCreate attribute.

RequestAuthnContextRequestAuthnContext

L'elemento RequestedAuthnContext specifica i metodi di autenticazione.The RequestedAuthnContext element specifies the desired authentication methods. È facoltativo negli elementi AuthnRequest inviati ad Azure AD.It is optional in AuthnRequest elements sent to Azure AD. Azure AD supporta un solo valore AuthnContextClassRef: urn:oasis:names:tc:SAML:2.0:ac:classes:Password.Azure AD supports only one AuthnContextClassRef value: urn:oasis:names:tc:SAML:2.0:ac:classes:Password.

ScopingScoping

L'elemento Scoping, che include un elenco di provider di identità, è facoltativo negli elementi AuthnRequest inviati ad Azure AD.The Scoping element, which includes a list of identity providers, is optional in AuthnRequest elements sent to Azure AD.

Se viene specificato, non includere l'attributo ProxyCount e l'elemento IDPListOption o RequesterID perché non sono supportati.If provided, do not include the ProxyCount attribute, IDPListOption or RequesterID element, as they are not supported.

FirmaSignature

Non includere un elemento Signature negli elementi AuthnRequest perché Azure AD non supporta le richieste di autenticazione firmate.Do not include a Signature element in AuthnRequest elements, as Azure AD does not support signed authentication requests.

OggettoSubject

Azure AD ignora l'elemento Subject degli elementi AuthnRequest.Azure AD ignores the Subject element of AuthnRequest elements.

ResponseResponse

Quando viene completato un accesso richiesto, Azure AD invia una risposta al servizio cloud.When a requested sign-on completes successfully, Azure AD posts a response to the cloud service. Un esempio di risposta a un tentativo di accesso riuscito è simile al seguente:A sample response to a successful sign-on attempt looks like this:

<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/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>
  <ds:Signature xmlns:ds="http://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/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>
    <ds:Signature xmlns:ds="http://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>

ResponseResponse

L'elemento Response include il risultato della richiesta di autorizzazione.The Response element includes the result of the authorization request. Azure AD imposta i valori ID, Version e IssueInstant nell'elemento Response.Azure AD sets the ID, Version and IssueInstant values in the Response element. Imposta anche gli attributi seguenti:It also sets the following attributes:

  • Destination: quando l'accesso viene completato correttamente, questo attributo viene impostato sul RedirectUri del provider di servizi (servizio cloud).Destination: When sign-on completes successfully, this is set to the RedirectUri of the service provider (cloud service).
  • InResponseTo: viene impostato sull'attributo ID dell'elemento AuthnRequest che ha avviato la risposta.InResponseTo: This is set to the ID attribute of the AuthnRequest element that initiated the response.

IssuerIssuer

Azure AD imposta l'elemento Issuer su https://login.microsoftonline.com/<TenantIDGUID>/, dove è l'ID del tenant di Azure AD.Azure AD sets the Issuer element to https://login.microsoftonline.com/<TenantIDGUID>/ where is the tenant ID of the Azure AD tenant.

Una risposta di esempio con elemento Issuer può avere un aspetto simile al seguente:For example, a sample response with Issuer element could look like this:

<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://login.microsoftonline.com/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>

StatoStatus

L'elemento Status indica l'esito positivo o negativo dell'accesso.The Status element conveys the success or failure of sign-on. Include l'elemento StatusCode che contiene un codice o un set di codici annidati che rappresentano lo stato della richiesta.It includes the StatusCode element, which contains a code or a set of nested codes that represent the status of the request. Include anche l'elemento StatusMessage che contiene i messaggi di errore personalizzati generati durante il processo di accesso.It also includes the StatusMessage element, which contains custom error messages that are generated during the sign-on process.

Di seguito è indicata una risposta SAML a un tentativo di accesso non riuscito.The following is a SAML response to an unsuccessful sign-on attempt.

<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/82869000-6ad1-48f0-8171-272ed18796e9/</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: 66febed4-e737-49ff-ac23-464ba090d57c
Timestamp: 2013-03-18 08:49:24Z</samlp:StatusMessage>
  </samlp:Status>

AssertionAssertion

Oltre a ID, IssueInstant e Version, Azure AD imposta gli elementi seguenti nell'elemento Assertion della risposta.In addition to the ID, IssueInstant and Version, Azure AD sets the following elements in the Assertion element of the response.

IssuerIssuer

Viene impostato su https://sts.windows.net/<TenantIDGUID>/, dove è l'ID del tenant di Azure AD.This is set to https://sts.windows.net/<TenantIDGUID>/where is the Tenant ID of the Azure AD tenant.

<Issuer>https://login.microsoftonline.com/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>

FirmaSignature

Azure AD firma l'asserzione in risposta a un accesso riuscito.Azure AD signs the assertion in response to a successful sign-on. L'elemento Signature contiene una firma digitale che il servizio cloud può usare per autenticare l'origine e verificare l'integrità dell'asserzione.The Signature element contains a digital signature that the cloud service can use to authenticate the source to verify the integrity of the assertion.

Per generare questa firma digitale, Azure AD usa la chiave di firma specificata nell'elemento IDPSSODescriptor del relativo documento di metadati.To generate this digital signature, Azure AD uses the signing key in the IDPSSODescriptor element of its metadata document.

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
      digital_signature_here
    </ds:Signature>

OggettoSubject

Specifica l'entità oggetto delle istruzioni nell'asserzione.This specifies the principal that is the subject of the statements in the assertion. Contiene un elemento NameID che rappresenta l'utente autenticato.It contains a NameID element, which represents the authenticated user. Il valore NameID è un identificatore di destinazione che viene indirizzato solo al provider di servizi destinatario del token.The NameID value is a targeted identifier that is directed only to the service provider that is the audience for the token. È persistente: può essere revocato, ma mai riassegnato.It is persistent - it can be revoked, but is never reassigned. È anche opaco perché non rivela alcun dettaglio relativo all'utente e non può essere usato come identificatore per le query di attributi.It is also opaque, in that it does not reveal anything about the user and cannot be used as an identifier for attribute queries.

L'attributo Method dell'elemento SubjectConfirmation è sempre impostato su urn:oasis:names:tc:SAML:2.0:cm:bearer.The Method attribute of the SubjectConfirmation element is always set to 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>

CondizioniConditions

Questo elemento specifica le condizioni che definiscono l'uso accettabile delle asserzioni SAML.This element specifies conditions that define the acceptable use of SAML assertions.

<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.The NotBefore and NotOnOrAfter attributes specify the interval during which the assertion is valid.

  • Il valore dell'attributo NotBefore è uguale o leggermente successivo (meno di un secondo) al valore dell'attributo IssueInstant dell'elemento Assertion.The value of the NotBefore attribute is equal to or slightly (less than a second) later than the value of IssueInstant attribute of the Assertion element. Azure AD non tiene conto dell'eventuale differenza di orario con il servizio cloud (provider di servizi) e non aggiunge alcun buffer a questo orario.Azure AD does not account for any time difference between itself and the cloud service (service provider), and does not add any buffer to this time.
  • Il valore dell'attributo NotOnOrAfter è successivo di 70 minuti al valore dell'attributo NotBefore.The value of the NotOnOrAfter attribute is 70 minutes later than the value of the NotBefore attribute.

DestinatariAudience

Contiene un URI che identifica un gruppo di destinatari.This contains a URI that identifies an intended audience. Azure AD imposta il valore di questo elemento sul valore dell'elemento Issuer della AuthnRequest che ha avviato l'accesso.Azure AD sets the value of this element to the value of Issuer element of the AuthnRequest that initiated the sign-on. Per valutare il valore di Audience, usare il valore di App ID URI specificato durante la registrazione dell'applicazione.To evaluate the Audience value, use the value of the App ID URI that was specified during application registration.

<AudienceRestriction>
        <Audience>https://www.contoso.com</Audience>
</AudienceRestriction>

Come il valore Issuer, il valore Audience deve corrispondere esattamente a uno dei nomi dell'entità servizio che rappresenta il servizio cloud in Azure AD.Like the Issuer value, the Audience value must exactly match one of the service principal names that represents the cloud service in Azure AD. Se tuttavia il valore dell'elemento Issuer non è un valore URI, il valore Audience nella risposta è il valore Issuer preceduto da spn:.However, if the value of the Issuer element is not a URI value, the Audience value in the response is the Issuer value prefixed with spn:.

AttributeStatementAttributeStatement

Contiene attestazioni relative all'oggetto o all'utente.This contains claims about the subject or user. L'estratto seguente contiene un esempio di elemento AttributeStatement .The following excerpt contains a sample AttributeStatement element. I puntini di sospensione indicano che l'elemento può includere più attributi e valori di attributo.The ellipsis indicates that the element can include multiple attributes and attribute values.

<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.Name Claim : The value of the Name attribute (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name) is the user principal name of the authenticated user, such as 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 Azure AD.ObjectIdentifier Claim : The value of the ObjectIdentifier attribute (http://schemas.microsoft.com/identity/claims/objectidentifier) is the ObjectId of the directory object that represents the authenticated user in Azure AD. ObjectId è un identificatore non modificabile, globalmente univoco e riutilizzabile in modo sicuro dell'utente autenticato.ObjectId is an immutable, globally unique, and re-use safe identifier of the authenticated user.

AuthnStatementAuthnStatement

Questo elemento asserisce che l'oggetto dell'asserzione è stato autenticato in un determinato modo e in un determinato momento.This element asserts that the assertion subject was authenticated by a particular means at a particular time.

  • L'attributo AuthnInstant specifica il momento in cui l'utente ha eseguito l'autenticazione con Azure AD.The AuthnInstant attribute specifies the time at which the user authenticated with Azure AD.
  • L'elemento AuthnContext specifica il contesto di autenticazione usato per autenticare l'utente.The AuthnContext element specifies the authentication context used to authenticate the user.
<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>