Protocolo SAML de inicio de sesión únicoSingle Sign-On SAML protocol

Este artículo se centra en las solicitudes y las respuestas de autenticación SAML 2.0 de Azure Active Directory (Azure AD) compatibles con el inicio de sesión único.This article covers the SAML 2.0 authentication requests and responses that Azure Active Directory (Azure AD) supports for Single Sign-On.

En el siguiente diagrama de protocolo se describe la secuencia de inicio de sesión único.The protocol diagram below describes the single sign-on sequence. El servicio en la nube (proveedor de servicios) utiliza un enlace de redirección HTTP para pasar un elemento AuthnRequest (solicitud de autenticación) a Azure AD (el proveedor de identidades).The cloud service (the service provider) uses an HTTP Redirect binding to pass an AuthnRequest (authentication request) element to Azure AD (the identity provider). Después, Azure AD utiliza un enlace HTTP POST para registrar un elemento Response en el servicio en la nube.Azure AD then uses an HTTP post binding to post a Response element to the cloud service.

Flujo de trabajo de inicio de sesión único

AuthnRequestAuthnRequest

Para solicitar una autenticación de usuario, los servicios en la nube envían un elemento AuthnRequest a Azure AD.To request a user authentication, cloud services send an AuthnRequest element to Azure AD. Una muestra de SAML 2.0 AuthnRequest debería tener un aspecto similar al ejemplo siguiente:A sample SAML 2.0 AuthnRequest could look like the following example:

<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>
ParámetroParameter DescripciónDescription
idID ObligatorioRequired Azure AD usa este atributo para rellenar el atributo InResponseTo de la respuesta devuelta.Azure AD uses this attribute to populate the InResponseTo attribute of the returned response. El id. no debe empezar con un número. La estrategia habitual consiste en anteponer una cadena como "id" en la representación de cadena de 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. Por ejemplo, id6c1c178c166d486687be4aaf5e482730 es un id. válido.For example, id6c1c178c166d486687be4aaf5e482730 is a valid ID.
VersiónVersion ObligatorioRequired Este parámetro debe establecerse en 2.0.This parameter should be set to 2.0.
IssueInstantIssueInstant ObligatorioRequired Se trata de una cadena DateTime con un valor de hora UTC y un formato de tiempo de ida y vuelta ("o").This is a DateTime string with a UTC value and round-trip format ("o"). Azure AD espera un valor DateTime de este tipo, pero no evalúa ni utiliza el valor.Azure AD expects a DateTime value of this type, but doesn't evaluate or use the value.
AssertionConsumerServiceUrlAssertionConsumerServiceUrl OpcionalOptional Si se proporciona, este parámetro debe coincidir con el elemento RedirectUri del servicio en la nube de Azure AD.If provided, this parameter must match the RedirectUri of the cloud service in Azure AD.
ForceAuthnForceAuthn OpcionalOptional Se trata de un elemento booleano.This is a boolean value. Si es true, significa que el usuario se verá forzado a volver a autenticarse, incluso si tiene una sesión válida con Azure AD.If true, it means that the user will be forced to re-authenticate, even if they have a valid session with Azure AD.
IsPassiveIsPassive OpcionalOptional Se trata de un valor booleano que especifica si Azure AD debe autenticar al usuario en modo silencioso, sin interacción del usuario, usando la cookie de sesión, si existe.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. Si es true, Azure AD intentará autenticar al usuario mediante la cookie de sesión.If this is true, Azure AD will attempt to authenticate the user using the session cookie.

Todos los demás atributos AuthnRequest, como Consent, Destination, AssertionConsumerServiceIndex, AttributeConsumerServiceIndex y ProviderName, se omiten.All other AuthnRequest attributes, such as Consent, Destination, AssertionConsumerServiceIndex, AttributeConsumerServiceIndex, and ProviderName are ignored.

Azure AD también omite el elemento Conditions de AuthnRequest.Azure AD also ignores the Conditions element in AuthnRequest.

EmisorIssuer

El elemento Issuer de AuthnRequest debe coincidir exactamente con uno de los valores de ServicePrincipalNames del servicio en la nube de Azure AD.The Issuer element in an AuthnRequest must exactly match one of the ServicePrincipalNames in the cloud service in Azure AD. Normalmente, se establece en el identificador URI de id. de aplicación , que se especifica durante el registro de la aplicación.Typically, this is set to the App ID URI that is specified during application registration.

Un extracto SAML que contiene el elemento Issuer tiene el siguiente aspecto:A SAML excerpt containing the Issuer element looks like the following sample:

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

NameIDPolicyNameIDPolicy

Este elemento solicita un formato de id. de nombre determinado en la respuesta y es opcional en los elementos AuthnRequest enviados a 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 tiene el siguiente aspecto:A NameIdPolicy element looks like the following sample:

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

Si se proporciona NameIDPolicy, puede incluir su atributo Format opcional.If NameIDPolicy is provided, you can include its optional Format attribute. El atributo Format solo puede tener uno de los siguientes valores; cualquier otro valor generará un error.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 emite la notificación NameID como identificador en pares.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 emite la notificación NameID en formato de dirección de correo electrónico.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: este valor permite a Azure Active Directory seleccionar el formato de notificación.urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified: This value permits Azure Active Directory to select the claim format. Azure Active Directory emite la notificación NameID como identificador en pares.Azure Active Directory issues the NameID as a pairwise identifier.
  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient: Azure Active Directory emite la notificación NameID como un valor generado aleatoriamente que es único para la operación de SSO actual.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. Esto significa que el valor es temporal y no se puede usar para identificar al usuario en proceso de autenticación.This means that the value is temporary and cannot be used to identify the authenticating user.

Azure AD omite el atributo AllowCreate .Azure AD ignores the AllowCreate attribute.

RequestAuthnContextRequestAuthnContext

El elemento RequestedAuthnContext especifica los métodos de autenticación deseados.The RequestedAuthnContext element specifies the desired authentication methods. Es opcional en los elementos AuthnRequest enviados a Azure AD.It is optional in AuthnRequest elements sent to Azure AD. Azure AD admite valores de AuthnContextClassRef como urn:oasis:names:tc:SAML:2.0:ac:classes:Password.Azure AD supports AuthnContextClassRef values such as urn:oasis:names:tc:SAML:2.0:ac:classes:Password.

ÁmbitoScoping

El elemento Scoping, que incluye una lista de proveedores de identidades, es opcional en los elementos AuthnRequest enviados a Azure AD.The Scoping element, which includes a list of identity providers, is optional in AuthnRequest elements sent to Azure AD.

Si se proporciona, no incluya el atributo ProxyCount ni el elemento IDPListOption o RequesterID, ya que no se admiten.If provided, don't include the ProxyCount attribute, IDPListOption or RequesterID element, as they aren't supported.

SignatureSignature

No incluya un elemento Signature en los elementos AuthnRequest, ya que Azure AD no es compatible con la firma de solicitudes de autenticación.Don't include a Signature element in AuthnRequest elements, as Azure AD does not support signed authentication requests.

AsuntoSubject

Azure AD omite el elemento Subject de los elementos AuthnRequest.Azure AD ignores the Subject element of AuthnRequest elements.

ResponseResponse

Cuando un proceso de inicio de sesión solicitado se completa correctamente, Azure AD envía una respuesta al servicio en la nube.When a requested sign-on completes successfully, Azure AD posts a response to the cloud service. Una respuesta a un intento de inicio de sesión correcto tiene este aspecto:A response to a successful sign-on attempt looks like the following sample:

<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="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/82869000-6ad1-48f0-8171-272ed18796e9/</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>

ResponseResponse

El elemento Response incluye el resultado de la solicitud de autorización.The Response element includes the result of the authorization request. Azure AD configura los valores ID, Version y IssueInstant en el elemento Response.Azure AD sets the ID, Version and IssueInstant values in the Response element. También establece los siguientes atributos:It also sets the following attributes:

  • Destination: cuando el inicio de sesión se realiza correctamente, se establece en el RedirectUri del proveedor de servicios (servicio en la nube).Destination: When sign-on completes successfully, this is set to the RedirectUri of the service provider (cloud service).
  • InResponseTo: se establece en el atributo ID del elemento AuthnRequest que inició la respuesta.InResponseTo: This is set to the ID attribute of the AuthnRequest element that initiated the response.

EmisorIssuer

Azure AD establece el elemento Issuer en https://login.microsoftonline.com/<TenantIDGUID>/, donde <TenantIdGUID> es el identificador del inquilino de Azure AD.Azure AD sets the Issuer element to https://login.microsoftonline.com/<TenantIDGUID>/ where <TenantIDGUID> is the tenant ID of the Azure AD tenant.

Por ejemplo, una respuesta con el elemento Issuer podría ser similar a la siguiente:For example, a response with Issuer element could look like the following sample:

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

StatusStatus

El elemento Status transmite el éxito o el fracaso del inicio de sesión.The Status element conveys the success or failure of sign-on. Incluye el elemento StatusCode, que contiene un código o un conjunto de códigos anidados que representan el estado de la solicitud.It includes the StatusCode element, which contains a code or a set of nested codes that represents the status of the request. También incluye el elemento StatusMessage , que contiene mensajes de error personalizados que se generan durante el proceso de inicio de sesión.It also includes the StatusMessage element, which contains custom error messages that are generated during the sign-on process.

A continuación, veremos una respuesta SAML a un intento fallido de inicio de sesión.The following sample 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>

AserciónAssertion

Además de ID, IssueInstant y Version, Azure AD establece los elementos siguientes en el elemento Assertion de la respuesta.In addition to the ID, IssueInstant and Version, Azure AD sets the following elements in the Assertion element of the response.

EmisorIssuer

Se establece en https://sts.windows.net/<TenantIDGUID>/, donde <TenantIDGUID> es el identificador del inquilino de Azure AD.This is set to https://sts.windows.net/<TenantIDGUID>/where <TenantIDGUID> is the Tenant ID of the Azure AD tenant.

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

SignatureSignature

Azure AD firma la aserción como respuesta a un inicio de sesión correcto.Azure AD signs the assertion in response to a successful sign-on. El elemento Signature contiene una firma digital que el servicio en la nube puede utilizar para autenticar el origen con el fin de comprobar la integridad de la aserción.The Signature element contains a digital signature that the cloud service can use to authenticate the source to verify the integrity of the assertion.

Para generar esta firma digital, Azure AD utiliza la clave de firma del elemento IDPSSODescriptor de su documento de metadatos.To generate this digital signature, Azure AD uses the signing key in the IDPSSODescriptor element of its metadata document.

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

AsuntoSubject

Especifica la entidad que es el firmante de las instrucciones de la aserción.This specifies the principal that is the subject of the statements in the assertion. Contiene un elemento NameID , que representa al usuario autenticado.It contains a NameID element, which represents the authenticated user. El valor de NameID es un identificador de destino que se dirige únicamente al proveedor de servicios que es la audiencia del token.The NameID value is a targeted identifier that is directed only to the service provider that is the audience for the token. Es persistente; es decir se puede revocar, pero nunca volver a asignar.It is persistent - it can be revoked, but is never reassigned. También es opaco, ya que no revela ningún dato del usuario y no se puede utilizar como identificador en las consultas de atributo.It is also opaque, in that it does not reveal anything about the user and cannot be used as an identifier for attribute queries.

El valor del atributo Method del elemento SubjectConfirmation siempre se establece en 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>

CondicionesConditions

Este elemento especifica las condiciones que definen el uso aceptable de las aserciones de 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>

Los atributos NotBefore y NotOnOrAfter especifican el intervalo durante el cual es válida la aserción.The NotBefore and NotOnOrAfter attributes specify the interval during which the assertion is valid.

  • El valor del atributo NotBefore es igual a o ligeramente posterior (menos de un segundo) al del atributo IssueInstant del 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 no tiene en cuenta ninguna diferencia horaria entre sí y el servicio en la nube (proveedor de servicios). Además, no agrega ningún búfer a esa hora.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.
  • El valor del atributo NotOnOrAfter es 70 minutos posterior al del atributo NotBefore.The value of the NotOnOrAfter attribute is 70 minutes later than the value of the NotBefore attribute.

PúblicoAudience

Contiene un URI que identifica una audiencia prevista.This contains a URI that identifies an intended audience. Azure AD establece el valor de este elemento en el valor del elemento Issuer del objeto AuthnRequest que inició la sesión.Azure AD sets the value of this element to the value of Issuer element of the AuthnRequest that initiated the sign-on. Para evaluar el valor de Audience, utilice el valor del elemento App ID URI que se especificó durante el registro de la aplicación.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>

Al igual que el valor de Issuer, el de Audience debe coincidir exactamente con uno de los nombres de entidad de seguridad de servicio que representa el servicio en la nube de 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. Sin embargo, si el valor del elemento Issuer no es un valor de URI, el de Audience de la respuesta será el valor de Issuer con el prefijo 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 notificaciones sobre el firmante o el usuario.This contains claims about the subject or user. El extracto siguiente contiene un elemento AttributeStatement de ejemplo.The following excerpt contains a sample AttributeStatement element. Los puntos suspensivos indican que el elemento puede incluir varios atributos y valores de atributo.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>
  • Notificación de Name: el valor del atributo Name (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name) es el nombre principal de usuario del usuario autenticado, como 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.
  • Notificación de ObjectIdentifier: el valor del atributo ObjectIdentifier (http://schemas.microsoft.com/identity/claims/objectidentifier) es el ObjectId del objeto de directorio que representa al usuario autenticado en 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 es un identificador único global seguro, reutilizable e inmutable del usuario autenticado.ObjectId is an immutable, globally unique, and reuse safe identifier of the authenticated user.

AuthnStatementAuthnStatement

Este elemento declara que se autenticó el firmante de la aserción por un medio concreto y en una hora determinada.This element asserts that the assertion subject was authenticated by a particular means at a particular time.

  • El atributo AuthnInstant especifica la hora a la que el usuario se autenticó con Azure AD.The AuthnInstant attribute specifies the time at which the user authenticated with Azure AD.
  • El elemento AuthnContext especifica el contexto de autenticación utilizado para autenticar al usuario.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>