Freigeben über


SamL-Protokoll für einmaliges Anmelden

In diesem Artikel werden die SAML 2.0-Authentifizierungsanforderungen und -antworten behandelt, die von Microsoft Entra ID für einmaliges Anmelden (Single Sign-On, SSO) unterstützt werden.

Das folgende Protokolldiagramm beschreibt die Single Sign-On-Sequenz. Der Clouddienst (der Dienstanbieter) verwendet eine HTTP-Umleitungsbindung, um ein AuthnRequest -Element (Authentifizierungsanforderung) an Microsoft Entra ID (den Identitätsanbieter) zu übergeben. Microsoft Entra-ID verwendet dann eine HTTP-Postbindung, um ein Response-Element an den Clouddienst zu senden.

Screenshot des SSO-Workflows (Single Sign-On).

Anmerkung

In diesem Artikel wird die Verwendung von SAML für einmaliges Anmelden erläutert. Weitere Informationen zu anderen Möglichkeiten zum Behandeln des einmaligen Anmeldens (z. B. mithilfe von OpenID Connect oder integrierter Windows-Authentifizierung) finden Sie unter Einmaliges Anmelden bei Anwendungen in Microsoft Entra ID.

AuthnRequest

Um eine Benutzerauthentifizierung anzufordern, senden Clouddienste ein AuthnRequest Element an die Microsoft Entra-ID. Ein Beispiel für SAML 2.0-AuthnRequest 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 Art Beschreibung
ID Erforderlich Die Microsoft Entra-ID verwendet dieses Attribut, um das attribut InResponseTo der zurückgegebenen Antwort aufzufüllen. DIE ID darf nicht mit einer Zahl beginnen, daher besteht eine allgemeine Strategie darin, eine Zeichenfolge wie "ID" der Zeichenfolgendarstellung einer GUID voranzugestellt. Beispielsweise ist id6c1c178c166d486687be4aaf5e482730 eine gültige ID.
Version Erforderlich Dieser Parameter sollte auf 2.0festgelegt werden.
IssueInstant Erforderlich Dies ist eine DateTime-Zeichenfolge mit einem UTC-Wert und Roundtripformat ("o"). Microsoft Entra-ID erwartet einen DateTime-Wert dieses Typs, wertet den Wert aber nicht aus oder verwendet diesen wert.
AssertionConsumerServiceURL Wahlfrei Wenn angegeben, muss dieser Parameter mit dem RedirectUri des Clouddiensts in microsoft Entra ID übereinstimmen.
ForceAuthn Wahlfrei Dies ist ein boolescher Wert. Wenn true, bedeutet dies, dass der Benutzer gezwungen wird, erneut zu authentifizieren, auch wenn er über eine gültige Sitzung mit der Microsoft Entra-ID verfügt.
IsPassive Wahlfrei Dies ist ein boolescher Wert, der angibt, ob die Microsoft Entra-ID den Benutzer ohne Benutzerinteraktion im Hintergrund authentifizieren soll, wenn vorhanden. Wenn dies zutrifft, versucht Microsoft Entra-ID, den Benutzer mithilfe des Sitzungscookies zu authentifizieren.

Alle anderen AuthnRequest Attribute wie Consent, Destination, AssertionConsumerServiceIndex, AttributeConsumerServiceIndexund ProviderName werden ignoriert.

Die Microsoft Entra-ID ignoriert auch das Conditions-Element in AuthnRequest.

Emittent

Das Issuer-Element in einem AuthnRequest muss genau mit einem der ServicePrincipalNames- im Clouddienst in Microsoft Entra ID übereinstimmen. In der Regel wird dies auf den App-ID-URI festgelegt, der während der Anwendungsregistrierung angegeben wird.

Ein SAML-Auszug mit dem Issuer-Element sieht wie im folgenden Beispiel aus:

<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>

NameIDPolicy

Dieses Element fordert ein bestimmtes Namens-ID-Format in der Antwort an und ist optional in AuthnRequest Elementen, die an Microsoft Entra ID gesendet werden.

Ein NameIdPolicy-Element sieht wie im folgenden Beispiel aus:

<NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>

Wenn NameIDPolicy bereitgestellt wird, können Sie das optionale Format-Attribut einschließen. Das attribut Format kann nur einen der folgenden Werte aufweisen. ein anderer Wert führt zu einem Fehler.

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent: Die Microsoft Entra-ID gibt den NameID Anspruch als Kopplungsbezeichner aus.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: Die Microsoft Entra-ID gibt den NameID Anspruch im E-Mail-Adressformat aus.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified: Mit diesem Wert kann Microsoft Entra-ID das Anspruchsformat auswählen. Die Microsoft Entra-ID gibt den NameID Anspruch als pairwise identifier aus.
  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient: Microsoft Entra ID gibt den NameID Anspruch als zufällig generierten Wert aus, der für den aktuellen SSO-Vorgang eindeutig ist. Dies bedeutet, dass der Wert temporär ist und nicht verwendet werden kann, um den authentifizierenden Benutzer zu identifizieren.

Wenn SPNameQualifier angegeben ist, enthält die Microsoft Entra-ID dieselbe SPNameQualifier in der Antwort.

Die Microsoft Entra-ID ignoriert das attribut AllowCreate.

RequestedAuthnContext

Das RequestedAuthnContext-Element gibt die gewünschten Authentifizierungsmethoden an. Sie ist in AuthnRequest Elementen optional, die an die Microsoft Entra-ID gesendet werden.

Anmerkung

Wenn die RequestedAuthnContext in der SAML-Anforderung enthalten ist, muss das Comparison-Element auf exactfestgelegt werden.

Die Microsoft Entra-ID unterstützt die folgenden AuthnContextClassRef Werte.

Authentifizierungsmethode Authentifizierungskontextklassen-URI
Kerberos urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos
Benutzername und Kennwort urn:oasis:names:tc:SAML:2.0:ac:classes:Password
PGP Public Key-Infrastruktur urn:oasis:names:tc:SAML:2.0:ac:classes:PGP
Sicheres Remotekennwort urn:oasis:names:tc:SAML:2.0:ac:classes:SecureRemotePassword
Digitale XML-Signatur urn:oasis:names:tc:SAML:2.0:ac:classes:XMLDSig
Einfache Public Key-Infrastruktur urn:oasis:names:tc:SAML:2.0:ac:classes:SPKI
Smartcard urn:oasis:names:tc:SAML:2.0:ac:classes:Smartcard
Smartcard mit eingeschlossenem privaten Schlüssel und einer PIN urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI
Transport Layer Security (TLS)-Client urn:oasis:names:tc:SAML:2.0:ac:classes:TLSClient
Unspezifiziert urn:oasis:names:tc:SAML:2.0:ac:classes:Unspecified
X.509-Zertifikat urn:oasis:names:tc:SAML:2.0:ac:classes:X509
Integrierte Windows-Authentifizierung urn:federation:authentication:windows

Scoping

Das Scoping-Element, das eine Liste von Identitätsanbietern enthält, ist in AuthnRequest Elementen optional, die an die Microsoft Entra-ID gesendet werden.

Wenn angegeben, schließen Sie das ProxyCount-Attribut, IDPListOption oder RequesterID Element nicht ein, da sie nicht unterstützt werden.

Unterschrift

Ein Signature-Element in AuthnRequest Elementen ist optional. Microsoft Entra-ID kann so konfiguriert werden, dass die Anforderung signierter Authentifizierungsanforderungen erzwungen wird. Wenn diese Option aktiviert ist, werden nur signierte Authentifizierungsanforderungen akzeptiert, andernfalls wird die Überprüfung des Anforderers nur für registrierte Assertion Consumer Service-URLs bereitgestellt.

Betreff

Fügen Sie kein Subject-Element ein. Microsoft Entra-ID unterstützt die Angabe eines Betreffs in AuthnRequest nicht und gibt einen Fehler zurück, wenn eine angegeben wird.

Ein Betreff kann stattdessen durch Hinzufügen eines login_hint Parameters zur HTTP-Anforderung zur URL für einmaliges Anmelden mit der NameID des Betreffs als Parameterwert bereitgestellt werden.

Antwort

Wenn die angeforderte Anmeldung erfolgreich abgeschlossen wurde, sendet Die Microsoft Entra-ID eine Antwort auf 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. Die Microsoft Entra-ID legt die Werte ID, Version und IssueInstant im Response-Element fest. Außerdem werden die folgenden Attribute festgelegt:

  • Destination: Wenn die Anmeldung erfolgreich abgeschlossen ist, wird dies auf die RedirectUri des Dienstanbieters (Clouddienst) festgelegt.
  • InResponseTo: Dies wird auf das ID Attribut des AuthnRequest Elements festgelegt, das die Antwort initiiert hat.

Emittent

Die 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 issuer-Element könnte beispielsweise wie im folgenden Beispiel aussehen:

<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>

Status

Das Status-Element vermittelt den Erfolg oder Fehler der Anmeldung. Es enthält das StatusCode-Element, das einen Code oder eine Reihe geschachtelter Codes enthält, die den Status der Anforderung darstellen. Es enthält auch das StatusMessage-Element, das benutzerdefinierte Fehlermeldungen enthält, die während des Anmeldevorgangs generiert werden.

Das folgende Beispiel ist eine SAML-Antwort auf einen erfolglosen 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>

Behauptung

Zusätzlich zu den ID, IssueInstant und Versionlegt Microsoft Entra ID die folgenden Elemente im Assertion Element der Antwort fest.

Emittent

Dies ist 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

Die Microsoft Entra-ID signiert die Assertion als Reaktion auf eine erfolgreiche Anmeldung. Das Signature-Element enthält eine digitale Signatur, mit der der Clouddienst die Quelle authentifizieren kann, um die Integrität der Assertion zu überprüfen.

Um diese digitale Signatur zu generieren, verwendet Microsoft Entra ID den Signaturschlüssel im IDPSSODescriptor Element des Metadatendokuments.

<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
  digital_signature_here
</ds:Signature>

Betreff

Dies gibt den Grundsatz an, der Gegenstand der Erklärungen in der Assertion ist. Es enthält ein NameID-Element, das den authentifizierten Benutzer darstellt. Der wert NameID ist ein gezielter Bezeichner, der nur an den Dienstanbieter weitergeleitet wird, der die Zielgruppe für das Token ist. Es ist dauerhaft - es kann widerrufen werden, wird aber nie neu zugewiesen. Es ist auch undurchsichtig, da nichts über den Benutzer angezeigt wird und nicht als Bezeichner für Attributabfragen verwendet werden kann.

Das Method Attribut des SubjectConfirmation-Elements ist immer auf urn:oasis:names:tc:SAML:2.0:cm:bearerfestgelegt.

<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 gibt Bedingungen an, die die akzeptable Verwendung von SAML-Assertionen 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 geben das Intervall an, in dem die Assertion gültig ist.

  • Der Wert des attributs NotBefore ist gleich oder etwas (kleiner als eine Sekunde) später als der Wert IssueInstant Attributs des Assertion-Elements. Die Microsoft Entra-ID berücksichtigt keinen Zeitunterschied zwischen sich selbst und dem Clouddienst (Dienstanbieter) und fügt diesem Zeitpunkt keinen Puffer hinzu.
  • Der Wert des attributs NotOnOrAfter liegt 70 Minuten später als der Wert des attributs NotBefore.

Publikum

Dies enthält einen URI, der eine beabsichtigte Zielgruppe identifiziert. Die Microsoft Entra-ID legt den Wert dieses Elements auf den Wert Issuer Elements der AuthnRequest fest, die die Anmeldung initiiert hat. Verwenden Sie zum Auswerten des Audience Werts den Wert der App ID URI, die während der Anwendungsregistrierung angegeben wurde.

<AudienceRestriction>
  <Audience>https://www.contoso.com</Audience>
</AudienceRestriction>

Wie der Issuer Wert muss der Audience Wert genau mit einem der Dienstprinzipalnamen übereinstimmen, die den Clouddienst in Microsoft Entra ID darstellen. Wenn der Wert des Issuer Elements jedoch kein URI-Wert ist, ist der Audience Wert in der Antwort der Issuer Wert, dem spn:vorangestellt ist.

AttributeStatement

Dies enthält Ansprüche über den Betreff oder den Benutzer. Der folgende Auszug enthält ein Beispiel AttributeStatement Element. Die Auslassungspunkte deuten 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 Claim - Der Wert des attributs Name (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name) ist der Benutzerprinzipalname des authentifizierten Benutzers, z. B. testuser@managedtenant.com.
  • ObjectIdentifier Claim – Der Wert des attributs ObjectIdentifier (http://schemas.microsoft.com/identity/claims/objectidentifier) ist die ObjectId des Verzeichnisobjekts, das den authentifizierten Benutzer in der Microsoft Entra-ID darstellt. ObjectId ist ein unveränderlicher, global eindeutiger und wiederverwendeter sicherer Bezeichner des authentifizierten Benutzers.

AuthnStatement

Dieses Element bestätigt, dass der Assertionsbetreff zu einem bestimmten Zeitpunkt durch ein bestimmtes Mittel authentifiziert wurde.

  • Das attribut AuthnInstant gibt die Uhrzeit an, zu der sich der Benutzer mit microsoft Entra ID authentifiziert hat.
  • Das AuthnContext-Element gibt den Authentifizierungskontext an, der zum Authentifizieren des Benutzers verwendet wird.
<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>