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 diagrama de protocolo siguiente 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.
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="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 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á obligado a volver a autenticarse, aunque tenga una sesión válida con el identificador de Entra de Microsoft. |
IsPassive |
Opcionales | 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 esto es cierto, el identificador de Entra de Microsoft intenta 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ónNameID
como un identificador en pares.urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
: Microsoft Entra ID emite la notificaciónNameID
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ónNameID
como un identificador en pares.urn:oasis:names:tc:SAML:2.0:nameid-format:transient
: Microsoft Entra ID emite la notificaciónNameID
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 de autenticación.
Si se especifica SPNameQualifier
, el Microsoft Entra ID 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. 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="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>
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 completa correctamente, se establece en elRedirectUri
del proveedor de servicios (servicio en la nube).InResponseTo
: se establece en el atributoID
del elementoAuthnRequest
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/aaaabbbb-0000-cccc-1111-dddd2222eeee/</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/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 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/aaaabbbb-0000-cccc-1111-dddd2222eeee/</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 atributoIssueInstant
del elementoAssertion
. 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 atributoNotBefore
.
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, comotestuser@managedtenant.com
. - Notificación de ObjectIdentifier: el valor del atributo
ObjectIdentifier
(http://schemas.microsoft.com/identity/claims/objectidentifier
) es elObjectId
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>