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.

Screenshot des Workflows für das einmalige Anmelden (SSO).

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="id6c1c178c166d486687be4aaf5e482730"
  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, AttributeConsumerServiceIndexund 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 den NameID-Anspruch als paarweisen Bezeichner aus.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: Microsoft Entra ID gibt den NameID-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 den NameID-Anspruch als paarweisen Bezeichner aus.
  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient: Microsoft Entra ID gibt den NameID-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="id758d0ef385634593a77bdf7e632984b6" 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 den RedirectUri des Dienstanbieters (Clouddienst) festgelegt.
  • InResponseTo: Wird auf das ID-Attribut des AuthnRequest-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-dd33-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 des IssueInstant-Attributs des Assertion-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 des NotBefore-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 die ObjectId 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>