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.
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
, AttributeConsumerServiceIndex
y 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ónNameID
como identificador en pares. -
urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
: El identificador de Entra de Microsoft 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 que Microsoft Entra ID seleccione 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
: El identificador de Microsoft Entra emite la notificaciónNameID
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 elRedirectUri
del proveedor de servicios (servicio en la nube). -
InResponseTo
: se establece en el atributoID
del elementoAuthnRequest
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 deIssueInstant
atributo del elementoAssertion
. 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 atributoNotBefore
.
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, comotestuser@managedtenant.com
. -
ObjectIdentifier Claim: el valor del atributo
ObjectIdentifier
(http://schemas.microsoft.com/identity/claims/objectidentifier
) es elObjectId
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>