SAML-Protokoll für einmaliges Anmelden
In diesem Artikel erfahren Sie mehr über die SAML 2.0-Authentifizierungsanforderungen und -antworten, die Microsoft Entra ID für das einmalige Anmelden unterstützt.
Im folgenden Protokolldiagramm wird der Ablauf beim einmaligen Anmelden (Single Sign-On, SSO) beschrieben. Der Clouddienst (der Dienstanbieter) verwendet eine HTTP-Umleitungsbindung, um eine Authentifizierungsanforderung (AuthnRequest
) an Microsoft Entra ID (den Identitätsanbieter) zu übergeben. Microsoft Entra ID verwendet daraufhin eine HTTP Post-Bindung, um ein Response
-Element an den Clouddienst zu senden.
Hinweis
In diesem Artikel wird die Verwendung von SAML für einmaliges Anmelden (Single Sign-On, SSO) erläutert. Weitere Informationen zu anderen Möglichkeiten der Verwendung des einmaligen Anmeldens (z. B. mit OpenID Connect oder der integrierten Windows-Authentifizierung) finden Sie unter Einmaliges Anmelden bei Anwendungen in Microsoft Entra ID.
AuthnRequest
Clouddienste senden ein AuthnRequest
-Element an Microsoft Entra ID, um eine Benutzerauthentifizierung anzufordern. Eine AuthnRequest
für SAML 2.0 könnte wie im folgenden Beispiel aussehen:
<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>
Parameter | Typ | Beschreibung |
---|---|---|
ID |
Erforderlich | Microsoft Entra ID verwendet dieses Attribut, um das InResponseTo -Attribut der zurückgegebenen Antwort aufzufüllen. Die ID darf nicht mit einer Zahl beginnen, weshalb dem GUID-String im Allgemeinen eine Zeichenfolge wie etwa „ID“ vorangestellt wird. id6c1c178c166d486687be4aaf5e482730 ist beispielsweise eine gültige ID. |
Version |
Erforderlich | Dieser Parameter sollte auf 2.0 festgelegt werden. |
IssueInstant |
Erforderlich | Eine DateTime-Zeichenfolge mit einem UTC-Wert und im Roundtrip-Format („o“). Microsoft Entra ID erwartet einen DateTime-Wert dieses Typs, dieser Wert wird jedoch weder ausgewertet noch verwendet. |
AssertionConsumerServiceURL |
Optional | Dieser Parameter muss (falls angegeben) dem RedirectUri des Clouddiensts in Microsoft Entra ID entsprechen. |
ForceAuthn |
Optional | Dies ist ein Boolescher Wert. Bei TRUE werden die Benutzer gezwungen, sich erneut zu authentifizieren, selbst wenn für sie bereits eine gültige Sitzung mit Microsoft Entra ID besteht. |
IsPassive |
Optional | Dies ist ein boolescher Wert, der festlegt, ob Microsoft Entra ID die Benutzer*innen im Hintergrund ohne Benutzereingriff, jedoch mithilfe des Sitzungscookies authentifiziert, sofern ein solches vorhanden ist. Bei TRUE versucht Microsoft Entra ID die Benutzer mithilfe des Sitzungscookies zu authentifizieren. |
Alle anderen AuthnRequest
Attribute wie Consent
, Destination
, AssertionConsumerServiceIndex
, AttributeConsumerServiceIndex
und ProviderName
werden ignoriert.
Microsoft Entra ID ignoriert auch das Conditions
-Element in AuthnRequest
.
Aussteller
Das Issuer
-Element in einem AuthnRequest
muss mit einem der ServicePrincipalNames im Clouddienst von Microsoft Entra ID exakt übereinstimmen. Normalerweise ist es auf den App-ID-URI festgelegt, der bei der Anwendungsregistrierung angegeben wird.
Im Anschluss finden Sie einen SAML-Ausschnitt, der das Issuer
-Element enthält. Dies wird im folgenden Beispiel veranschaulicht:
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>
NameIDPolicy
Dieses Element erfordert in der Antwort ein bestimmtes Namens-ID-Format und ist bei an Microsoft Entra ID gesendeten AuthnRequest
-Elementen optional.
Ein NameIdPolicy
-Element sieht wie im folgenden Beispiel aus:
<NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>
Wenn NameIDPolicy
angegeben ist, können Sie sein optionales Format
-Attribut einbeziehen. Das Format
-Attribut kann nur einen der folgenden Werte besitzen. Jeder andere Wert führt zu einem Fehler.
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
: Microsoft Entra ID gibt denNameID
-Anspruch als paarweisen Bezeichner aus.urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
: Microsoft Entra ID gibt denNameID
-Anspruch im E-Mail-Adressformat aus.urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
: Microsoft Entra ID kann das Anspruchsformat selbst wählen. Microsoft Entra ID gibt denNameID
-Anspruch als paarweisen Bezeichner aus.urn:oasis:names:tc:SAML:2.0:nameid-format:transient
: Microsoft Entra ID gibt denNameID
-Anspruch in Form eines zufällig generierten Werts aus, der für den aktuellen SSO-Vorgang eindeutig ist. Der Wert ist somit temporär und kann nicht zur Identifizierung des sich authentifizierenden Benutzers verwendet werden.
Wenn ein SPNameQualifier
angegeben ist, nimmt Microsoft Entra ID denselben SPNameQualifier
in die Antwort auf.
Microsoft Entra ID ignoriert das AllowCreate
-Attribut.
RequestedAuthnContext
Das RequestedAuthnContext
-Element gibt die gewünschten Authentifizierungsmethoden an. Dies ist in AuthnRequest
-Elementen, die an Microsoft Entra ID gesendet werden, optional. Microsoft Entra ID unterstützt AuthnContextClassRef
-Werte wie urn:oasis:names:tc:SAML:2.0:ac:classes:Password
.
Bereichsdefinition
Das Scoping
-Element enthält eine Liste mit Identitätsanbietern und ist bei AuthnRequest
-Elementen, die an Microsoft Entra ID gesendet werden, optional.
Wenn Sie sich für die Angabe entscheiden, schließen Sie nicht das ProxyCount
-Attribut, IDPListOption
oder das RequesterID
-Element ein, da diese nicht unterstützt werden.
Signatur
Ein Signature
-Element in AuthnRequest
-Elementen ist optional. Sie können Microsoft Entra ID so konfigurieren, dass signierte Authentifizierungsanforderungen erzwungen werden. Wenn dies aktiviert ist, werden nur signierte Authentifizierungsanforderungen akzeptiert; andernfalls erfolgt die Überprüfung des Anforderers nur durch das Antworten auf registrierte Assertion Consumer Service-URLs.
Subject
Fügen Sie kein Subject
-Element ein. Das Angeben eines subject-Elements in AuthnRequest
wird von Microsoft Entra ID nicht unterstützt, und bei Angabe wird ein Fehler zurückgegeben.
Ein Subject-Element kann stattdessen bereitgestellt werden, indem der Parameter login_hint
zur HTTP-Anforderung an die URL für einmaliges Anmelden hinzugefügt wird. Dabei wird die Namens-ID (NameID) des Subject-Elements als Parameterwert angegeben.
Antwort
Wenn eine angeforderte Anmeldung erfolgreich abgeschlossen wird, sendet Microsoft Entra ID eine Antwort an den Clouddienst. Eine Antwort auf einen erfolgreichen Anmeldeversuch sieht wie im folgenden Beispiel aus:
<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>
Antwort
Das Response
-Element enthält das Ergebnis der Autorisierungsanforderung. Microsoft Entra ID legt die ID
, Version
und IssueInstant
Werte im Response
-Element fest. Außerdem legt es die folgenden Attribute fest:
Destination
: Dies wird nach erfolgreichem Abschluss der Anmeldung auf denRedirectUri
des Dienstanbieters (Clouddienst) festgelegt.InResponseTo
: Wird auf dasID
-Attribut desAuthnRequest
-Elements festgelegt, das die Antwort initiiert hat.
Issuer (Aussteller)
Microsoft Entra ID legt das Issuer
-Element auf https://sts.windows.net/<TenantIDGUID>/
fest, wobei <TenantIDGUID>
die Mandanten-ID des Microsoft Entra-Mandanten ist.
Eine Antwort mit einem Issuer-Element sieht beispielsweise wie im folgenden Beispiel aus:
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
Status
Das Status
-Element gibt an, ob die Anmeldung erfolgreich war. Es enthält das StatusCode
-Element, das einen Code oder mehrere geschachtelte Codes enthält, die den Status der Anforderung darstellen. Außerdem enthält es das StatusMessage
-Element mit spezifischen, während der Anmeldung generierten Fehlermeldungen.
Im folgenden Beispiel finden Sie eine SAML-Antwort auf einen fehlerhaften Anmeldeversuch.
<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
Zusätzlich zu ID
, IssueInstant
und Version
legt Microsoft Entra ID im Assertion
-Element der Antwort die folgenden Elemente fest.
Aussteller
Dies wird auf https://sts.windows.net/<TenantIDGUID>/
festgelegt, wobei <TenantIDGUID>
die Mandanten-ID des Microsoft Entra-Mandanten ist.
<Issuer>https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
Unterschrift
Microsoft Entra ID signiert die Assertion als Antwort auf eine erfolgreiche Anmeldung. Das Signature
-Element enthält eine digitale Signatur, die vom Clouddienst zum Authentifizieren der Quelle und zum Überprüfen der Integrität der Assertion verwendet werden kann.
Microsoft Entra ID verwendet den im IDPSSODescriptor
-Element des Metadatendokuments festgelegten Signaturschlüssel, um diese digitale Signatur zu generieren.
<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
digital_signature_here
</ds:Signature>
Betreff
Legt den Prinzipal fest, der Gegenstand der Anweisungen in der Assertion ist. Er enthält ein NameID
-Element, das den authentifizierten Benutzer darstellt. Der NameID
-Wert ist ein gezielter Bezeichner, der nur an den Dienstanbieter gerichtet ist, welcher die Zielgruppe für das Token darstellt. Er ist persistent – er kann widerrufen werden, eine erneute Zuweisung ist jedoch nicht mehr möglich. Er ist zudem nicht transparent, d.h. Informationen über den Benutzer werden nicht preisgegeben, und er kann nicht als Bezeichner für Attributabfragen verwendet werden.
Das Method
-Attribut des SubjectConfirmation
-Elements ist immer auf urn:oasis:names:tc:SAML:2.0:cm:bearer
festgelegt.
<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>
Bedingungen
Dieses Element legt die Bedingungen fest, die die akzeptable Verwendung von SAML-Assertions definieren.
<Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z">
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
</Conditions>
Die Attribute NotBefore
und NotOnOrAfter
legen das Intervall fest, in dem die Assertion gültig ist.
- Der Wert des
NotBefore
-Attributs entspricht dem Wert desIssueInstant
-Attributs desAssertion
-Elements oder ist etwas (weniger als einer Sekunde) höher. Microsoft Entra ID berücksichtigt keine Zeitunterschiede zwischen sich selbst und dem Clouddienst (Dienstanbieter) und fügt dieser Zeit keinen Puffer hinzu. - Der Wert des
NotOnOrAfter
-Attributs liegt 70 Minuten nach dem Wert desNotBefore
-Attributs.
Zielgruppe
Dieses Element enthält einen URI, der die beabsichtigte Zielgruppe identifiziert. Microsoft Entra ID legt den Wert dieses Elements auf den Wert des Issuer
-Elements des AuthnRequest
fest, der die Anmeldung initiiert hat. Verwenden Sie zum Auswerten des Werts Audience
den Wert von App ID URI
, der bei der Anwendungsregistrierung angegeben wurde.
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
Genau wie der Issuer
-Wert muss auch der Audience
-Wert genau mit einem der Dienstprinzipalnamen des Clouddiensts in Microsoft Entra ID übereinstimmen. Falls es sich beim Wert des Issuer
-Elements allerdings nicht um einen URI-Wert handelt, entspricht der Audience
-Wert in der Antwort dem Issuer
-Wert mit dem Präfix spn:
.
AttributeStatement
Enthält Ansprüche bezüglich des Antragstellers oder des Benutzers. Der folgende Auszug enthält ein AttributeStatement
-Beispielelement. Die Auslassungszeichen weisen darauf hin, dass das Element mehrere Attribute und Attributwerte enthalten kann.
<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>
- Name-Anspruch: Der Wert des
Name
-Attributs (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
) ist der Benutzerprinzipalname des authentifizierten Benutzers (z.B.testuser@managedtenant.com
). - ObjectIdentifier-Anspruch: Der Wert des
ObjectIdentifier
-Attributs (http://schemas.microsoft.com/identity/claims/objectidentifier
) ist dieObjectId
des Verzeichnisobjekts, das die authentifizierten Benutzer*innen in Microsoft Entra ID darstellt.ObjectId
ist ein unveränderlicher, global eindeutiger und sicher wiederverwendbarer Bezeichner des authentifizierten Benutzers.
AuthnStatement
Dieses Element bestätigt, dass das Assertion-Subjekt mit einer bestimmten Methode zu einem bestimmten Zeitpunkt authentifiziert wurde.
- Das
AuthnInstant
-Attribut gibt die Uhrzeit an, zu der die Benutzer*innen mit Microsoft Entra ID authentifiziert wurden. - Das
AuthnContext
-Element gibt den Authentifizierungskontext an, der zum Authentifizieren des Benutzers verwendet wurde.
<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>