Protocolo SAML de inicio de sesión único

Este artículo se centra en las solicitudes y las respuestas de autenticación SAML 2.0 de Microsoft Entra ID compatibles con el inicio de sesión único (SSO).

En el siguiente diagrama de protocolo se describe la secuencia de inicio de sesión único. 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 Microsoft Entra ID (el proveedor de identidades). Después, Microsoft Entra ID utiliza un enlace HTTP POST para registrar un elemento Response en el servicio en la nube.

Screenshot of the Single Sign-On (SSO) Workflow.

Nota:

En este artículo se describe el uso de SAML para el inicio de sesión único. Para obtener más información sobre otras formas de administrar el inicio de sesión único (por ejemplo, mediante OpenID Connect o la autenticación integrada de Windows), consulte Inicio de sesión único en aplicaciones de Microsoft Entra ID.

AuthnRequest

Para solicitar una autenticación de usuario, los servicios en la nube envían un elemento AuthnRequest a Microsoft Entra ID. Una muestra de SAML 2.0 AuthnRequest debería tener un aspecto similar al ejemplo siguiente:

<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ámetro Tipo Descripción
ID Obligatorio Microsoft Entra ID usa este atributo para rellenar el atributo InResponseTo de la respuesta devuelta. 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. Por ejemplo, id6c1c178c166d486687be4aaf5e482730 es un id. válido.
Version Obligatorio Este parámetro debe establecerse en 2.0.
IssueInstant Obligatorio Se trata de una cadena DateTime con un valor de hora UTC y un formato de tiempo de ida y vuelta ("o"). Microsoft Entra ID espera un valor DateTime de este tipo, pero no evalúa ni utiliza el valor.
AssertionConsumerServiceURL Opcional Si se proporciona, este parámetro debe coincidir con el elemento RedirectUri del servicio en la nube de Microsoft Entra ID.
ForceAuthn Opcional Se trata de un elemento booleano. Si es true, significa que el usuario se verá forzado a volver a autenticarse, incluso si tiene una sesión válida con Microsoft Entra ID.
IsPassive Opcional Se trata de un valor booleano que especifica si Microsoft Entra ID debe autenticar al usuario en modo silencioso, sin interacción del usuario, usando la cookie de sesión, si existe. Si es true, Microsoft Entra ID intentará autenticar al usuario mediante la cookie de sesión.

Todos los demás atributos AuthnRequest, como Consent, Destination, AssertionConsumerServiceIndex, AttributeConsumerServiceIndex y ProviderName se omiten.

Microsoft Entra ID también omite el elemento Conditions de AuthnRequest.

Emisor

El elemento Issuer de AuthnRequest debe coincidir exactamente con uno de los valores de ServicePrincipalNames del servicio en la nube de Microsoft Entra ID. Normalmente, se establece en el identificador URI de id. de aplicación , que se especifica durante el registro de la aplicación.

Un extracto SAML que contiene el elemento Issuer tiene el siguiente aspecto:

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

NameIDPolicy

Este elemento solicita un formato de id. de nombre determinado en la respuesta y es opcional en los elementos AuthnRequest enviados a Microsoft Entra ID.

Un elemento NameIdPolicy tiene el siguiente aspecto:

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

Si se proporciona NameIDPolicy, puede incluir su atributo Format opcional. El atributo Format solo puede tener uno de los siguientes valores; cualquier otro valor generará un error.

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent: Microsoft Entra ID emite la notificación NameID como un identificador en pares.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: Microsoft Entra ID emite la notificación NameID en formato de dirección de correo electrónico.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified: este valor permite a Microsoft Entra ID seleccionar el formato de notificación. Microsoft Entra ID emite la notificación NameID como un identificador en pares.
  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient: Microsoft Entra ID emite la notificación NameID como un valor generado aleatoriamente que es único para la operación de SSO actual. Esto significa que el valor es temporal y no se puede usar para identificar al usuario en proceso de autenticación.

Si SPNameQualifier se especifica, Microsoft Entra ID incluirá el mismo SPNameQualifier en la respuesta.

Microsoft Entra ID omite el atributo AllowCreate.

RequestedAuthnContext

El elemento RequestedAuthnContext especifica los métodos de autenticación deseados. Es opcional en los elementos AuthnRequest enviados a Microsoft Entra ID. Microsoft Entra ID admite valores AuthnContextClassRef como urn:oasis:names:tc:SAML:2.0:ac:classes:Password.

Ámbito

El elemento Scoping, que incluye una lista de proveedores de identidades, es opcional en los elementos AuthnRequest enviados a Microsoft Entra ID.

Si se proporciona, no incluya el atributo ProxyCount ni el elemento IDPListOption o RequesterID, ya que no se admiten.

Signature

Un elemento Signature de AuthnRequest elementos es opcional. Microsoft Entra ID se puede configurar para que aplique el requisito de solicitudes de autenticación firmadas. Si está habilitada, solo se aceptan solicitudes de autenticación firmadas; de lo contrario, solo se proporciona la comprobación del solicitante respondiendo a las direcciones URL registradas del Servicio de consumidor de aserciones.

Asunto

No incluya un elemento Subject. Microsoft Entra ID no admite especificar un sujeto en AuthnRequest y devolverá un error si se proporciona uno.

En su lugar, puede proporcionar el sujeto agregando un login_hint parámetro a la solicitud HTTP para la URL de inicio de sesión único, con el valor de NameID del sujeto como parámetro.

Respuesta

Cuando un proceso de inicio de sesión solicitado se completa correctamente, Microsoft Entra ID envía una respuesta al servicio en la nube. Una respuesta a un intento de inicio de sesión correcto tiene este aspecto:

<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>

Response

El elemento Response incluye el resultado de la solicitud de autorización. Microsoft Entra ID establece los valores ID, Version y IssueInstant en el elemento Response. También establece los siguientes atributos:

  • Destination: cuando el inicio de sesión se realiza correctamente, se establece en el RedirectUri del proveedor de servicios (servicio en la nube).
  • InResponseTo: se establece en el atributo ID del elemento AuthnRequest que inició la respuesta.

Emisor

Microsoft Entra ID establece el elemento Issuer en https://sts.windows.net/<TenantIDGUID>/ donde <TenantIDGUID> es el identificador de inquilino del inquilino de Microsoft Entra.

Por ejemplo, una respuesta con el elemento Issuer podría ser similar a la siguiente:

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

Estado

El elemento Status transmite el éxito o el fracaso del inicio de sesión. Incluye el elemento StatusCode, que contiene un código o un conjunto de códigos anidados que representan el estado de la solicitud. También incluye el elemento StatusMessage , que contiene mensajes de error personalizados que se generan durante el proceso de inicio de sesión.

A continuación, veremos una respuesta SAML a un intento fallido de inicio de sesión.

<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>
</samlp:Response>

Aserción

Además de ID, IssueInstant y Version, Microsoft Entra ID establece los elementos siguientes en el elemento Assertion de la respuesta.

Emisor

Se establece en https://sts.windows.net/<TenantIDGUID>/donde <TenantIDGUID> es el identificador de inquilino del inquilino de Microsoft Entra.

<Issuer>https://sts.windows.net/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>

Firma

Microsoft Entra ID firma la aserción como respuesta a un inicio de sesión correcto. 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.

Para generar esta firma digital, Microsoft Entra ID utiliza la clave de firma del elemento IDPSSODescriptor de su documento de metadatos.

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

Asunto

Especifica el principio que constituye el asunto de las instrucciones de la aserción. Contiene un elemento NameID , que representa al usuario autenticado. El valor de NameID es un identificador de destino que se dirige únicamente al proveedor de servicios que es la audiencia del token. Es persistente; es decir se puede revocar, pero nunca volver a asignar. 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.

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

Condiciones

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

Los atributos NotBefore y NotOnOrAfter especifican el intervalo durante el cual es válida la aserción.

  • El valor del atributo NotBefore es igual a o ligeramente posterior (menos de un segundo) al del atributo IssueInstant del elemento Assertion. Microsoft Entra ID 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.
  • El valor del atributo NotOnOrAfter es 70 minutos posterior al del atributo NotBefore.

Público

Contiene un URI que identifica una audiencia prevista. Microsoft Entra ID establece el valor de este elemento en el valor del elemento Issuer del objeto AuthnRequest que inició la sesión. Para evaluar el valor de Audience, utilice el valor del elemento App ID URI que se especificó durante el registro de la aplicación.

<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 Microsoft Entra ID. 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:.

AttributeStatement

Contiene notificaciones sobre el firmante o el usuario. El extracto siguiente contiene un elemento AttributeStatement de ejemplo. Los puntos suspensivos indican que el elemento puede incluir varios atributos y valores de atributo.

<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.
  • 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 Microsoft Entra ID. ObjectId es un identificador único global seguro, reutilizable e inmutable del usuario autenticado.

AuthnStatement

Este elemento declara que se autenticó el firmante de la aserción por un medio concreto y en una hora determinada.

  • El atributo AuthnInstant especifica la hora a la que el usuario se autenticó con Microsoft Entra ID.
  • El elemento AuthnContext especifica el contexto de autenticación utilizado para autenticar al usuario.
<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>