Protocole SAML d’authentification unique
Cet article traite des demandes et réponses d’authentification SAML 2.0 prises en charge par Microsoft Entra ID dans le cadre de l’authentification unique (SSO).
Le diagramme de protocole suivant décrit la séquence d’authentification unique. Le service cloud (le fournisseur de services) utilise une liaison de redirection HTTP pour transmettre un élément AuthnRequest
(demande d’authentification) à Microsoft Entra ID (le fournisseur d’identité). Microsoft Entra ID utilise ensuite une liaison HTTP POST pour valider un élément Response
auprès du service cloud.
Notes
Cet article traite de l’utilisation de SAML pour l’authentification unique. Pour plus d’informations sur d’autres façons de gérer l’authentification unique (par exemple, à l’aide d’OpenID Connect ou de l’authentification Windows intégrée), consultez l’article S’authentifier avec l’authentification unique auprès des applications dans Microsoft Entra ID.
AuthnRequest
Pour demander une authentification utilisateur, les services cloud envoient un élément AuthnRequest
à Microsoft Entra ID. Exemple de AuthnRequest
SAML 2.0 :
<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>
Paramètre | Type | Description |
---|---|---|
ID |
Obligatoire | Microsoft Entra ID utilise cet attribut pour compléter l’attribut InResponseTo de la réponse retournée. L’ID ne doit pas commencer par un nombre. Vous pouvez donc suivre la stratégie courante qui consiste à ajouter une chaîne de type « ID » devant la représentation sous forme de chaîne d’un GUID. Par exemple, id6c1c178c166d486687be4aaf5e482730 est un ID valide. |
Version |
Requis | Ce paramètre doit être défini sur 2.0 . |
IssueInstant |
Requis | Chaîne DateTime associée à une valeur UTC et comportant le format aller-retour (« o »). Microsoft Entra ID attend une valeur DateHeure de ce type, sans pour autant l’évaluer ni l’utiliser. |
AssertionConsumerServiceURL |
Facultatif | Si ce paramètre est fourni, il doit correspondre à l’élément RedirectUri du service cloud dans Microsoft Entra ID. |
ForceAuthn |
Facultatif | Il s’agit d’une valeur booléenne. La valeur true signifie que l’utilisateur doit se réauthentifier, même s’il a ouvert une session valide avec Microsoft Entra ID. |
IsPassive |
Facultatif | Il s’agit d’une valeur booléenne qui spécifie si Microsoft Entra ID doit authentifier l’utilisateur en mode silencieux, sans intervention de l’utilisateur, en utilisant le cookie de la session s’il en existe un. Si la valeur est true, Microsoft Entra ID tente d’authentifier l’utilisateur en utilisant le cookie de la session. |
Tous les autres attributs AuthnRequest
, tels que Consent
, Destination
, AssertionConsumerServiceIndex
, AttributeConsumerServiceIndex
et ProviderName
sont ignorés.
Microsoft Entra ID ignore également l’élément Conditions
dans AuthnRequest
.
Émetteur
L’élément Issuer
dans AuthnRequest
doit correspondre exactement à l’un des attributs ServicePrincipalNames du service cloud dans Microsoft Entra ID. En règle générale, il est défini sur l’URI ID d’application spécifié au moment de l’inscription de l’application.
Exemple d’extrait SAML contenant l’élément Issuer
:
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>
NameIDPolicy
Cet élément demande un format d’ID de nom particulier dans la réponse et est facultatif dans les éléments AuthnRequest
envoyés à Microsoft Entra ID.
Voici un exemple d’élément NameIdPolicy
:
<NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>
Si NameIDPolicy
est fourni, vous pouvez inclure son attribut Format
facultatif. L’attribut Format
ne peut comporter qu’une des valeurs suivantes ; toute autre valeur produira une erreur.
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
: Microsoft Entra ID émet la revendicationNameID
en tant qu’identificateur par paire.urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
: Microsoft Entra ID émet la revendicationNameID
au format d’adresse e-mail.urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
: cette valeur permet à Microsoft Entra ID de sélectionner le format de revendication. Microsoft Entra ID émet la revendicationNameID
en tant qu’identificateur par paire.urn:oasis:names:tc:SAML:2.0:nameid-format:transient
: Microsoft Entra ID émet la revendicationNameID
sous la forme d’une valeur générée de manière aléatoire et propre à l’opération d’authentification unique en cours. Cela signifie que la valeur est temporaire et ne peut pas être utilisée pour identifier l’utilisateur à l’origine de l’authentification.
Si SPNameQualifier
est spécifié, Microsoft Entra ID inclut le même attribut SPNameQualifier
dans la réponse.
Microsoft Entra ID ignore l’attribut AllowCreate
.
RequestedAuthnContext
L’élément RequestedAuthnContext
spécifie les méthodes d’authentification souhaitées. Il est facultatif dans les éléments AuthnRequest
envoyés à Microsoft Entra ID. Microsoft Entra ID prend en charge des valeurs AuthnContextClassRef
telles que urn:oasis:names:tc:SAML:2.0:ac:classes:Password
.
Scoping
L’élément Scoping
, qui comprend une liste de fournisseurs d’identité, est facultatif dans les éléments AuthnRequest
envoyés à Microsoft Entra ID.
S’il est fourni, n’incluez ni l’attribut ProxyCount
ni l’élément IDPListOption
ou RequesterID
, car ils ne sont pas pris en charge.
Signature
Un élément Signature
dans des éléments AuthnRequest
est facultatif. Microsoft Entra ID peut être configuré pour appliquer l’exigence de demandes d’authentification signées. Si cette option est activée, seules les demandes d’authentification signées sont acceptées ; sinon, la vérification du demandeur est fournie en répondant uniquement aux URL Assertion Consumer Service inscrites.
Objet
N’incluez pas d’élément Subject
. Microsoft Entra ID ne prend pas en charge la spécification d’un objet dans AuthnRequest
et renvoie une erreur si un objet est fourni.
Un objet peut plutôt être fourni en ajoutant un paramètre login_hint
à la requête HTTP adressée à l’URL d’authentification unique, avec l’ID de nom de l’objet comme valeur de paramètre.
Response
Quand une demande d’authentification aboutit, Microsoft Entra ID publie une réponse au service cloud. Exemple de réponse à une tentative d’ouverture de session réussie :
<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
L’élément Response
inclut le résultat de la demande d’autorisation. Microsoft Entra ID définit les valeurs ID
, Version
et IssueInstant
dans l’élément Response
. Il définit également les attributs suivants :
Destination
: lorsque l’authentification aboutit, il est défini sur l’élémentRedirectUri
du fournisseur de services (service cloud).InResponseTo
: cet attribut est défini sur l’attributID
de l’élémentAuthnRequest
qui a émis la réponse.
Émetteur
Microsoft Entra ID définit l’élément Issuer
sur https://sts.windows.net/<TenantIDGUID>/
, où <TenantIDGUID>
correspond à l’ID du locataire Microsoft Entra.
Exemple de réponse comportant l’élément Issuer :
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
Statut
L’élément Status
indique si l’authentification a abouti ou échoué. Il comporte l’élément StatusCode
, qui contient un code ou un ensemble de codes imbriqués représentant l’état de la demande. Il inclut également l’élément StatusMessage
, qui contient des messages d’erreur personnalisés générés pendant le processus d’authentification.
Exemple de réponse SAML à une tentative d’ouverture de session infructueuse :
<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>
Assertion
Outre les éléments ID
, IssueInstant
et Version
, Microsoft Entra ID définit les éléments suivants dans l’élément Assertion
de la réponse.
Émetteur
Cette valeur est définie sur https://sts.windows.net/<TenantIDGUID>/
, où <TenantIDGUID>
correspond à l’ID du locataire Microsoft Entra.
<Issuer>https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
Signature
Microsoft Entra ID signe l’assertion en réponse à une authentification réussie. L’élément Signature
contient une signature numérique que le service cloud peut utiliser pour authentifier la source afin de vérifier l’intégrité de l’assertion.
Pour générer cette signature numérique, Microsoft Entra ID utilise la clé de signature spécifiée dans l’élément IDPSSODescriptor
de son document de métadonnées.
<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
digital_signature_here
</ds:Signature>
Objet
Spécifie le principe qui fait l’objet des instructions contenues dans l’assertion. Il contient un élément NameID
qui représente l’utilisateur authentifié. La valeur NameID
est un identificateur ciblé qui est dirigé uniquement vers le fournisseur de services visé pour le jeton. Elle est persistante : elle peut être révoquée, mais n’est jamais réaffectée. Elle est également opaque, car elle ne révèle rien sur l’utilisateur et ne peut pas être utilisée comme identificateur pour les requêtes d’attribut.
L’attribut Method
de l’élément SubjectConfirmation
est toujours défini sur 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>
Conditions
Cet élément spécifie les conditions qui définissent l’usage acceptable des assertions 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>
Les attributs NotBefore
et NotOnOrAfter
spécifient l’intervalle pendant lequel l’assertion est valide.
- La valeur de l’attribut
NotBefore
est égale à la valeur de l’attributIssueInstant
de l’élémentAssertion
, ou légèrement supérieure (moins d’une seconde). Microsoft Entra ID ne tient pas compte des différences de temps entre sa propre horloge et celle du service cloud (fournisseur de services) et n’ajoute pas de mémoire tampon à cette durée. - La valeur de l’attribut
NotOnOrAfter
est de 70 minutes de plus que la valeur de l’attributNotBefore
.
Public visé
Contient un URI qui identifie une audience visée. Microsoft Entra ID définit la valeur de cet élément sur la valeur de l’élément Issuer
de l’attribut AuthnRequest
qui a lancé l’authentification. Pour évaluer la valeur Audience
, utilisez la valeur de App ID URI
spécifiée lors de l’inscription de l’application.
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
Comme la valeur Issuer
, la valeur Audience
doit correspondre exactement à un des noms de principal du service qui représentent le service cloud dans Microsoft Entra ID. Toutefois, si la valeur de l’élément Issuer
n’est pas une valeur d’URI, la valeur Audience
contenue dans la réponse correspond à la valeur Issuer
précédée de spn:
.
AttributeStatement
Contient les revendications sur l’objet ou l’utilisateur. L’extrait suivant contient un exemple d’élément AttributeStatement
. Les points de suspension indiquent que l’élément peut contenir plusieurs attributs et valeurs d’attribut.
<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>
- Revendication Name : la valeur de l’attribut
Name
(http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
) est le nom d’utilisateur principal de l’utilisateur authentifié, par exemple,testuser@managedtenant.com
. - Revendication ObjectIdentifier : la valeur de l’attribut
ObjectIdentifier
(http://schemas.microsoft.com/identity/claims/objectidentifier
) est l’élémentObjectId
de l’objet annuaire représentant l’utilisateur authentifié dans Microsoft Entra ID.ObjectId
est un identificateur global unique sûr, immuable et réutilisable de l’utilisateur authentifié.
AuthnStatement
Cet élément déclare que le sujet de l’assertion a été authentifié par un moyen précis à un moment donné.
- L’attribut
AuthnInstant
spécifie l’heure à laquelle l’utilisateur s’est authentifié auprès de Microsoft Entra ID. - L’élément
AuthnContext
spécifie le contexte d’authentification utilisé pour authentifier l’utilisateur.
<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>