Compartir a través de


Protocolo SAML de inicio de sesión único

En este artículo se tratan las solicitudes y respuestas de autenticación de SAML 2.0 que admite Microsoft Entra ID para el inicio de sesión único (SSO).

En el diagrama de protocolo siguiente se describe la secuencia de inicio de sesión único. El servicio en la nube (el proveedor de servicios) usa un enlace de redirección HTTP para pasar un elemento de AuthnRequest (solicitud de autenticación) a Microsoft Entra ID (el proveedor de identidades). A continuación, microsoft Entra ID usa un enlace de entrada HTTP para publicar un elemento Response en el servicio en la nube.

captura de pantalla del flujo de trabajo de Sign-On único (SSO).

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 controlar 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. Un ejemplo de SAML 2.0 AuthnRequest podría parecerse al ejemplo siguiente:

<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>
Parámetro Tipo Descripción
ID Obligatorio Microsoft Entra ID usa este atributo para rellenar el atributo InResponseTo de la respuesta devuelta. El identificador no debe comenzar con un número, por lo que una estrategia común consiste en anteponer una cadena como "ID" a la representación de cadena de un GUID. Por ejemplo, id6c1c178c166d486687be4aaf5e482730 es un identificador válido.
Version Obligatorio Este parámetro debe establecerse en 2.0.
IssueInstant Obligatorio Se trata de una cadena DateTime con un valor UTC y formato de ida y vuelta ("o"). Microsoft Entra ID espera un valor DateTime de este tipo, pero no evalúa ni usa el valor.
AssertionConsumerServiceURL Opcional Si se proporciona, este parámetro debe coincidir con el RedirectUri del servicio en la nube en el id. de Microsoft Entra.
ForceAuthn Opcional Se trata de un valor booleano. Si es true, significa que el usuario se verá obligado a volver a autenticarse, aunque tenga una sesión válida con el identificador de Entra de Microsoft.
IsPassive Opcional Se trata de un valor booleano que especifica si Microsoft Entra ID debe autenticar al usuario de forma silenciosa, sin interacción del usuario, mediante la cookie de sesión si existe una. Si esto es cierto, el identificador de Entra de Microsoft intenta autenticar al usuario mediante la cookie de sesión.

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

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

Emisor

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

Un extracto de 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 identificador de nombre determinado en la respuesta y es opcional en AuthnRequest elementos 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 opcional Format. El atributo Format solo puede tener uno de los siguientes valores; cualquier otro valor produce un error.

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent: El identificador de Microsoft Entra emite la notificación NameID como identificador en pares.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: El identificador de Entra de Microsoft 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 que Microsoft Entra ID seleccione 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: El identificador de Microsoft Entra emite la notificación NameID como un valor generado aleatoriamente que es único para la operación de inicio de sesión único actual. Esto significa que el valor es temporal y no se puede usar para identificar al usuario de autenticación.

Si se especifica SPNameQualifier, el identificador de Entra de Microsoft incluye 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 AuthnRequest elementos enviados a Microsoft Entra ID.

Nota

Si el RequestedAuthnContext se incluye en la solicitud SAML, el elemento Comparison debe establecerse en exact.

Microsoft Entra ID admite los siguientes valores de AuthnContextClassRef.

Método de autenticación URI de clase de contexto de autenticación
Kerberos urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos
Nombre de usuario y contraseña urn:oasis:names:tc:SAML:2.0:ac:classes:Password
Infraestructura de clave pública PGP urn:oasis:names:tc:SAML:2.0:ac:classes:PGP
Contraseña remota segura urn:oasis:names:tc:SAML:2.0:ac:classes:SecureRemotePassword
Firma digital XML urn:oasis:names:tc:SAML:2.0:ac:classes:XMLDSig
Infraestructura de clave pública simple urn:oasis:names:tc:SAML:2.0:ac:classes:SPKI
Tarjeta inteligente urn:oasis:names:tc:SAML:2.0:ac:classes:Smartcard
Tarjeta inteligente con clave privada cerrada y un PIN urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI
Cliente de seguridad de la capa de transporte (TLS) urn:oasis:names:tc:SAML:2.0:ac:classes:TLSClient
No especificado urn:oasis:names:tc:SAML:2.0:ac:classes:Unspecified
Certificado X.509 urn:oasis:names:tc:SAML:2.0:ac:classes:X509
Autenticación integrada de Windows urn:federation:authentication:windows

Ámbito

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

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

Firma

Un elemento Signature de AuthnRequest elementos es opcional. Microsoft Entra ID se puede configurar para aplicar 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 al responder a las direcciones URL registradas del Servicio de consumidor de aserciones.

Asunto

No incluya un elemento Subject. Microsoft Entra ID no admite la especificación de un asunto en AuthnRequest y devolverá un error si se proporciona uno.

En su lugar, se puede proporcionar un asunto agregando un parámetro login_hint a la solicitud HTTP a la dirección URL de inicio de sesión único, con nameID del firmante como valor de parámetro.

Respuesta

Cuando un 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 es similar al ejemplo siguiente:

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

Respuesta

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

  • Destination: cuando el inicio de sesión se completa 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

El identificador de Microsoft Entra 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 tener un aspecto similar al ejemplo siguiente:

<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>

Estado

El elemento Status transmite el éxito o el error de inicio de sesión. Incluye el elemento StatusCode, que contiene un código o un conjunto de códigos anidados que representa 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.

El ejemplo siguiente es una respuesta SAML a un intento de inicio de sesión incorrecto.

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

Aserción

Además de la ID, IssueInstant y Version, el identificador de Microsoft Entra establece los siguientes elementos 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/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>

Firma

Microsoft Entra ID firma la aserción en respuesta a un inicio de sesión correcto. El elemento Signature contiene una firma digital que el servicio en la nube puede usar para autenticar el origen para comprobar la integridad de la aserción.

Para generar esta firma digital, Microsoft Entra ID usa la clave de firma en el elemento IDPSSODescriptor de su documento de metadatos.

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

Asunto

Esto especifica el principio que es 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 solo al proveedor de servicios que es la audiencia del token. Es persistente: se puede revocar, pero nunca se reasigna. También es opaco, en que no revela nada sobre el usuario y no se puede usar como identificador para las consultas de atributos.

El 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 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 la aserción es válida.

  • El valor del atributo NotBefore es igual o ligeramente (menor que un segundo) posterior al valor de IssueInstant atributo del elemento Assertion. Microsoft Entra ID no tiene en cuenta ninguna diferencia de tiempo entre sí y el servicio en la nube (proveedor de servicios) y no agrega ningún búfer a este momento.
  • El valor del atributo NotOnOrAfter es 70 minutos más tarde que el valor del atributo NotBefore.

Audiencia

Contiene un URI que identifica una audiencia prevista. Microsoft Entra ID establece el valor de este elemento en el valor de Issuer elemento del AuthnRequest que inició el inicio de sesión. Para evaluar el valor de Audience, use el valor del 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 valor de Audience debe coincidir exactamente con uno de los nombres de entidad de seguridad de servicio que representa el servicio en la nube en el identificador de Microsoft Entra. Sin embargo, si el valor del elemento Issuer no es un valor URI, el valor de Audience en la respuesta es el valor Issuer prefijo con spn:.

AttributeStatement

Esto contiene notificaciones sobre el asunto o el usuario. El fragmento 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>
  • de notificación de nombre: 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.
  • ObjectIdentifier Claim: 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 el identificador de Microsoft Entra. ObjectId es un identificador seguro inmutable, globalmente único y reutilizado del usuario autenticado.

AuthnStatement

Este elemento afirma que el sujeto de aserción se autenticó mediante un medio determinado en un momento determinado.

  • El atributo AuthnInstant especifica la hora en la que el usuario se autenticó con el identificador de Microsoft Entra.
  • El elemento AuthnContext especifica el contexto de autenticación que se usa 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>