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 pour 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) à l’ID Microsoft Entra (le fournisseur d’identité). Microsoft Entra ID utilise ensuite une liaison de publication HTTP pour publier un élément Response
au service cloud.
capture d’écran
Note
Cet article décrit 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 de l’authentification OpenID Connect ou de l’authentification Windows intégrée), consultez Authentification unique aux applications dans Microsoft Entra ID.
AuthnRequest
Pour demander une authentification utilisateur, les services cloud envoient un élément AuthnRequest
à Microsoft Entra ID. Un exemple de AuthnRequest
SAML 2.0 peut ressembler à l’exemple suivant :
<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 remplir l’attribut InResponseTo de la réponse retournée. L’ID ne doit pas commencer par un nombre. Par conséquent, une stratégie commune consiste à ajouter une chaîne comme « ID » à la représentation sous forme de chaîne d’un GUID. Par exemple, id6c1c178c166d486687be4aaf5e482730 est un ID valide. |
Version |
Obligatoire | Ce paramètre doit être défini sur 2.0 . |
IssueInstant |
Obligatoire | Il s’agit d’une chaîne DateTime avec une valeur UTC et format aller-retour (« o »). Microsoft Entra ID attend une valeur DateTime de ce type, mais n’évalue pas ou n’utilise pas la valeur. |
AssertionConsumerServiceURL |
Optionnel | S’il est fourni, ce paramètre doit correspondre à la RedirectUri du service cloud dans l’ID Microsoft Entra. |
ForceAuthn |
Optionnel | Il s’agit d’une valeur booléenne. Si la valeur est true, cela signifie que l’utilisateur est obligé de se réauthentifier, même s’il dispose d’une session valide avec l’ID Microsoft Entra. |
IsPassive |
Optionnel | Il s’agit d’une valeur booléenne qui spécifie si l’ID Microsoft Entra doit authentifier l’utilisateur en mode silencieux, sans interaction utilisateur, à l’aide du cookie de session s’il en existe un. S’il s’agit de la valeur true, l’ID Microsoft Entra tente d’authentifier l’utilisateur à l’aide du cookie de 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
d’un AuthnRequest
doit correspondre exactement à l’un des ServicePrincipalNames dans le service cloud dans l’ID Microsoft Entra. En règle générale, il est défini sur l’URI d’ID d’application spécifié lors de l’inscription de l’application.
Un extrait SAML contenant l’élément Issuer
ressemble à l’exemple suivant :
<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 AuthnRequest
éléments envoyés à Microsoft Entra ID.
Un élément NameIdPolicy
ressemble à l’exemple suivant :
<NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>
Si NameIDPolicy
est fourni, vous pouvez inclure son attribut facultatif Format
. L’attribut Format
ne peut avoir qu’une des valeurs suivantes ; toute autre valeur entraîne une erreur.
-
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
: Microsoft Entra ID émet la revendicationNameID
en tant qu’identificateur pair. -
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 pair. -
urn:oasis:names:tc:SAML:2.0:nameid-format:transient
: Microsoft Entra ID émet la revendicationNameID
en tant que valeur générée de manière aléatoire unique à l’opération d’authentification unique actuelle. Cela signifie que la valeur est temporaire et ne peut pas être utilisée pour identifier l’utilisateur d’authentification.
Si SPNameQualifier
est spécifié, l’ID Microsoft Entra inclut la même 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 AuthnRequest
éléments envoyés à Microsoft Entra ID.
Note
Si la RequestedAuthnContext
est incluse dans la requête SAML, l’élément Comparison
doit être défini sur exact
.
Microsoft Entra ID prend en charge les valeurs de AuthnContextClassRef
suivantes.
Méthode d’authentification | URI de classe de contexte d’authentification |
---|---|
Kerberos | urn :oasis :names :tc :SAML :2.0 :ac :classes :Kerberos |
Nom d’utilisateur et mot de passe | urn :oasis :names :tc :SAML :2.0 :ac :classes :Password |
Infrastructure de clé publique PGP | urn :oasis :names :tc :SAML :2.0 :ac :classes :PGP |
Sécuriser le mot de passe distant | urn :oasis :names :tc :SAML :2.0 :ac :classes :SecureRemotePassword |
Signature numérique XML | urn :oasis :names :tc :SAML :2.0 :ac :classes :XMLDSig |
Infrastructure à clé publique simple | urn :oasis :names :tc :SAML :2.0 :ac :classes :SPKI |
Carte à puce | urn :oasis :names :tc :SAML :2.0 :ac :classes :Smartcard |
Carte à puce avec clé privée fermée et code confidentiel | urn :oasis :names :tc :SAML :2.0 :ac :classes :SmartcardPKI |
Client TLS (Transport Layer Security) | urn :oasis :names :tc :SAML :2.0 :ac :classes :TLSClient |
Quelconque | urn :oasis :names :tc :SAML :2.0 :ac :classes :Unspecified |
Certificat X.509 | urn :oasis :names :tc :SAML :2.0 :ac :classes :X509 |
Authentification Windows intégrée | urn :federation :authentication :windows |
Portée
L’élément Scoping
, qui inclut une liste de fournisseurs d’identité, est facultatif dans AuthnRequest
éléments envoyés à Microsoft Entra ID.
Si elle est fournie, n’incluez pas l’attribut ProxyCount
, IDPListOption
ou RequesterID
élément, car ils ne sont pas pris en charge.
Signature
Un élément Signature
dans AuthnRequest
éléments est facultatif. L’ID Microsoft Entra peut être configuré pour appliquer l’exigence des 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 uniquement 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 sujet dans AuthnRequest
et retourne une erreur si un objet est fourni.
Un objet peut à la place être fourni en ajoutant un paramètre login_hint
à la requête HTTP à l’URL d’authentification unique, avec l’ID de nom de l’objet comme valeur de paramètre.
Réponse
Une fois l’authentification demandée terminée, Microsoft Entra ID publie une réponse au service cloud. Une réponse à une tentative d’authentification réussie ressemble à l’exemple suivant :
<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>
Réponse
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
: une fois l’authentification terminée, elle est définie sur laRedirectUri
du fournisseur de services (service cloud). -
InResponseTo
: il s’agit de l’attributID
de l’élémentAuthnRequest
qui a lancé la réponse.
Émetteur
Microsoft Entra ID définit l’élément Issuer
sur https://sts.windows.net/<TenantIDGUID>/
où <TenantIDGUID>
est l’ID de locataire du locataire Microsoft Entra.
Par exemple, une réponse avec l’élément Issuer peut ressembler à l’exemple suivant :
<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
transmet la réussite ou l’échec de l’authentification. Il inclut l’élément StatusCode
, qui contient un code ou un ensemble de codes imbriqués qui représente l’état de la requête. Il inclut également l’élément StatusMessage
, qui contient des messages d’erreur personnalisés générés pendant le processus d’authentification.
L’exemple suivant est une réponse SAML à une tentative d’authentification 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 ID
, IssueInstant
et Version
, l’ID Microsoft Entra 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>
est l’ID de locataire 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 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
Cela spécifie le principe qui est l’objet des instructions 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 qui est l’audience du jeton. Il est persistant - il peut être révoqué, mais n’est jamais réaffecté. Il est également opaque, car il ne révèle rien sur l’utilisateur et ne peut pas être utilisé 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 des conditions qui définissent l’utilisation 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 ou légèrement (inférieure à une seconde) plus tard que la valeur d'IssueInstant
attribut de l’élémentAssertion
. L’ID Microsoft Entra ne tient compte d’aucune différence de temps entre lui-même et le service cloud (fournisseur de services) et n’ajoute pas de mémoire tampon à cette fois. - La valeur de l’attribut
NotOnOrAfter
est de 70 minutes plus tard que la valeur de l’attributNotBefore
.
Audience
Il contient un URI qui identifie une audience prévue. Microsoft Entra ID définit la valeur de cet élément sur la valeur de Issuer
élément du AuthnRequest
qui a lancé l’authentification. Pour évaluer la valeur Audience
, utilisez la valeur du App ID URI
spécifié 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 à l’un des noms de principal de service qui représente le service cloud dans l’ID Microsoft Entra. Toutefois, si la valeur de l’élément Issuer
n’est pas une valeur URI, la valeur Audience
dans la réponse est la valeur Issuer
précédée de spn:
.
AttributeStatement
Cela contient des revendications relatives à 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 inclure 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 de nom : 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é, tel quetestuser@managedtenant.com
. -
revendication ObjectIdentifier : la valeur de l’attribut
ObjectIdentifier
(http://schemas.microsoft.com/identity/claims/objectidentifier
) est laObjectId
de l’objet de répertoire qui représente l’utilisateur authentifié dans l’ID Microsoft Entra.ObjectId
est un identificateur immuable, globalement unique et réutilisable de l’utilisateur authentifié.
AuthnStatement
Cet élément affirme que l’objet d’assertion a été authentifié par un moyen particulier à un moment donné.
- L’attribut
AuthnInstant
spécifie l’heure à laquelle l’utilisateur s’est authentifié avec l’ID Microsoft Entra. - 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>