Udostępnij za pośrednictwem


Protokół SAML logowania jednokrotnego

W tym artykule opisano żądania uwierzytelniania SAML 2.0 i odpowiedzi obsługiwane przez usługę Microsoft Entra ID na potrzeby logowania jednokrotnego.

Na poniższym diagramie protokołu opisano sekwencję logowania jednokrotnego. Usługa w chmurze (dostawca usług) używa powiązania przekierowania HTTP, aby przekazać element AuthnRequest (żądanie uwierzytelniania) do identyfikatora Entra firmy Microsoft (dostawcy tożsamości). Następnie identyfikator Entra firmy Microsoft używa powiązania post http, aby opublikować element Response w usłudze w chmurze.

zrzut ekranu przedstawiający przepływ pracy z jednym Sign-On (SSO).

Nuta

W tym artykule omówiono używanie protokołu SAML na potrzeby logowania jednokrotnego. Aby uzyskać więcej informacji na temat innych sposobów obsługi logowania jednokrotnego (na przykład przy użyciu programu OpenID Connect lub zintegrowanego uwierzytelniania systemu Windows), zobacz logowanie jednokrotne do aplikacji w usłudze Microsoft Entra ID.

AuthnRequest

Aby zażądać uwierzytelniania użytkownika, usługi w chmurze wysyłają element AuthnRequest do identyfikatora Entra firmy Microsoft. Przykładowy AuthnRequest SAML 2.0 może wyglądać następująco:

<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>
Parametr Typ Opis
ID Wymagane Identyfikator entra firmy Microsoft używa tego atrybutu do wypełnienia atrybutu InResponseTo zwróconej odpowiedzi. Identyfikator nie może zaczynać się od liczby, dlatego typową strategią jest utworzenie ciągu takiego jak "ID" do ciągu reprezentującego identyfikator GUID. Na przykład id6c1c178c166d486687be4aaf5e482730 jest prawidłowym identyfikatorem.
Version Wymagane Ten parametr powinien być ustawiony na wartość 2.0.
IssueInstant Wymagane Jest to ciąg Typu data/godzina z wartością UTC i formatem dwukierunkowym ("o"). Identyfikator Entra firmy Microsoft oczekuje wartości DateTime tego typu, ale nie oblicza ani nie używa wartości.
AssertionConsumerServiceURL Fakultatywny Jeśli zostanie podany, ten parametr musi być zgodny z RedirectUri usługi w chmurze w identyfikatorze Entra firmy Microsoft.
ForceAuthn Fakultatywny Jest to wartość logiczna. Jeśli to prawda, oznacza to, że użytkownik zostanie zmuszony do ponownego uwierzytelnienia, nawet jeśli ma prawidłową sesję z identyfikatorem Entra firmy Microsoft.
IsPassive Fakultatywny Jest to wartość logiczna określająca, czy identyfikator Entra firmy Microsoft powinien uwierzytelniać użytkownika w trybie dyskretnym, bez interakcji użytkownika, używając pliku cookie sesji, jeśli istnieje. Jeśli tak jest, identyfikator Entra firmy Microsoft próbuje uwierzytelnić użytkownika przy użyciu pliku cookie sesji.

Wszystkie inne atrybuty AuthnRequest, takie jak Consent, Destination, AssertionConsumerServiceIndex, AttributeConsumerServiceIndexi ProviderName, są ignorowane .

Identyfikator Entra firmy Microsoft ignoruje również element Conditions w AuthnRequest.

Emitenta

Element Issuer w AuthnRequest musi dokładnie odpowiadać jednemu z ServicePrincipalNames w usłudze w chmurze w identyfikatorze Entra firmy Microsoft. Zazwyczaj jest ona ustawiona na identyfikator URI identyfikatora aplikacji, który jest określony podczas rejestracji aplikacji.

Fragment SAML zawierający element Issuer wygląda podobnie do następującego przykładu:

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

NameIDPolicy

Ten element żąda określonego formatu identyfikatora nazwy w odpowiedzi i jest opcjonalny w elementach AuthnRequest wysyłanych do identyfikatora Entra firmy Microsoft.

Element NameIdPolicy wygląda podobnie do następującego przykładu:

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

Jeśli podano NameIDPolicy, możesz uwzględnić jego opcjonalny atrybut Format. Atrybut Format może mieć tylko jedną z następujących wartości; każda inna wartość powoduje błąd.

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent: Identyfikator Entra firmy Microsoft wystawia oświadczenie NameID jako identyfikator parowania.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: Identyfikator entra firmy Microsoft wystawia oświadczenie NameID w formacie adresu e-mail.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified: ta wartość zezwala identyfikatorowi entra firmy Microsoft na wybranie formatu oświadczenia. Identyfikator entra firmy Microsoft wystawia oświadczenie NameID jako identyfikator parowania.
  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient: Identyfikator entra firmy Microsoft wystawia oświadczenie NameID jako losowo wygenerowaną wartość unikatową dla bieżącej operacji logowania jednokrotnego. Oznacza to, że wartość jest tymczasowa i nie można jej używać do identyfikowania uwierzytelniającego użytkownika.

Jeśli określono SPNameQualifier, identyfikator Entra firmy Microsoft zawiera te same SPNameQualifier w odpowiedzi.

Identyfikator entra firmy Microsoft ignoruje atrybut AllowCreate.

RequestedAuthnContext

Element RequestedAuthnContext określa żądane metody uwierzytelniania. Jest on opcjonalny w elementach AuthnRequest wysyłanych do identyfikatora Entra firmy Microsoft.

Nuta

Jeśli RequestedAuthnContext jest uwzględniona w żądaniu SAML, element Comparison musi być ustawiony na wartość exact.

Identyfikator entra firmy Microsoft obsługuje następujące wartości AuthnContextClassRef.

Metoda uwierzytelniania Identyfikator URI klasy kontekstu uwierzytelniania
Kerberos urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos
Nazwa użytkownika i hasło urn:oasis:names:tc:SAML:2.0:ac:classes:Password
Infrastruktura kluczy publicznych PGP urn:oasis:names:tc:SAML:2.0:ac:classes:PGP
Zabezpieczanie hasła zdalnego urn:oasis:names:tc:SAML:2.0:ac:classes:SecureRemotePassword
Podpis cyfrowy XML urn:oasis:names:tc:SAML:2.0:ac:classes:XMLDSig
Prosta infrastruktura kluczy publicznych urn:oasis:names:tc:SAML:2.0:ac:classes:SPKI
Karta inteligentna urn:oasis:names:tc:SAML:2.0:ac:classes:Smartcard
Karta inteligentna z dołączonym kluczem prywatnym i numerem PIN urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI
Klient protokołu Transport Layer Security (TLS) urn:oasis:names:tc:SAML:2.0:ac:classes:TLSClient
Nieokreślony urn:oasis:names:tc:SAML:2.0:ac:classes:Unspecified
Certyfikat X.509 urn:oasis:names:tc:SAML:2.0:ac:classes:X509
Zintegrowane uwierzytelnianie systemu Windows urn:federation:authentication:windows

Zakresu

Element Scoping, który zawiera listę dostawców tożsamości, jest opcjonalny w AuthnRequest elementów wysyłanych do identyfikatora Entra firmy Microsoft.

Jeśli zostanie podany, nie uwzględnij atrybutu ProxyCount, IDPListOption ani elementu RequesterID, ponieważ nie są one obsługiwane.

Podpis

Element Signature w elementach AuthnRequest jest opcjonalny. Identyfikator Entra firmy Microsoft można skonfigurować w celu wymuszenia wymagania podpisanych żądań uwierzytelniania. Jeśli to ustawienie jest włączone, akceptowane są tylko podpisane żądania uwierzytelniania. W przeciwnym razie weryfikacja osoby żądającej jest zapewniana tylko przez odpowiadanie na zarejestrowane adresy URL usługi Assertion Consumer Service.

Temat

Nie dołączaj elementu Subject. Identyfikator Entra firmy Microsoft nie obsługuje określania tematu w AuthnRequest i zwróci błąd, jeśli został podany.

Zamiast tego można podać temat, dodając parametr login_hint do żądania HTTP do adresu URL logowania jednokrotnego z identyfikatorem NameID podmiotu jako wartością parametru.

Odpowiedź

Po pomyślnym zakończeniu żądanego logowania identyfikator Entra firmy Microsoft publikuje odpowiedź na usługę w chmurze. Odpowiedź na pomyślną próbę logowania wygląda następująco:

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

Odpowiedź

Element Response zawiera wynik żądania autoryzacji. Identyfikator entra firmy Microsoft ustawia wartości ID, Version i IssueInstant w elemecie Response. Ustawia również następujące atrybuty:

  • Destination: po pomyślnym zakończeniu logowania jest on ustawiony na RedirectUri dostawcy usług (usługa w chmurze).
  • InResponseTo: jest on ustawiony na atrybut ID elementu AuthnRequest, który zainicjował odpowiedź.

Emitenta

Identyfikator entra firmy Microsoft ustawia element Issuer na https://sts.windows.net/<TenantIDGUID>/ gdzie <TenantIDGUID> jest identyfikatorem dzierżawy dzierżawy firmy Microsoft Entra.

Na przykład odpowiedź z elementem Wystawca może wyglądać podobnie do następującego przykładu:

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

Stan

Element Status przekazuje powodzenie lub niepowodzenie logowania. Zawiera on element StatusCode, który zawiera kod lub zestaw zagnieżdżonych kodów, który reprezentuje stan żądania. Zawiera również element StatusMessage, który zawiera niestandardowe komunikaty o błędach generowane podczas procesu logowania.

Poniższy przykład to odpowiedź SAML na nieudaną próbę logowania.

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

Twierdzenie

Oprócz ID, IssueInstant i Versionidentyfikator Entra firmy Microsoft ustawia następujące elementy w Assertion elementu odpowiedzi.

Emitenta

Jest ona ustawiona na https://sts.windows.net/<TenantIDGUID>/, w której <TenantIDGUID> jest identyfikatorem dzierżawy firmy Microsoft Entra.

<Issuer>https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>

Podpis

Identyfikator Firmy Microsoft Entra podpisuje asercję w odpowiedzi na pomyślne zalogowanie. Element Signature zawiera podpis cyfrowy, którego usługa w chmurze może użyć do uwierzytelnienia źródła w celu zweryfikowania integralności asercji.

Aby wygenerować ten podpis cyfrowy, identyfikator Entra firmy Microsoft używa klucza podpisywania w elemecie IDPSSODescriptor dokumentu metadanych.

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

Temat

Określa zasadę, która jest przedmiotem stwierdzeń w twierdzeniu. Zawiera on element NameID, który reprezentuje uwierzytelnionego użytkownika. Wartość NameID jest identyfikatorem docelowym kierowanym tylko do dostawcy usług, który jest odbiorcą tokenu. Jest on trwały — można go odwołać, ale nigdy nie jest ponownie przypisywany. Jest on również nieprzezroczystym, ponieważ nie ujawnia żadnych informacji o użytkowniku i nie może być używany jako identyfikator zapytań atrybutów.

Atrybut Method elementu SubjectConfirmation jest zawsze ustawiony na wartość 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>

Warunki

Ten element określa warunki, które definiują akceptowalne użycie asercji 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>

Atrybuty NotBefore i NotOnOrAfter określają interwał, w którym potwierdzenie jest prawidłowe.

  • Wartość atrybutu NotBefore jest równa lub nieco (mniejsza niż sekunda) później niż wartość atrybutu IssueInstant elementu Assertion. Microsoft Entra ID nie uwzględnia żadnej różnicy czasu między samym sobą a usługą w chmurze (dostawcą usług) i nie dodaje żadnego buforu do tej pory.
  • Wartość atrybutu NotOnOrAfter wynosi 70 minut później niż wartość atrybutu NotBefore.

Audiencja

Zawiera on identyfikator URI, który identyfikuje zamierzonych odbiorców. Microsoft Entra ID ustawia wartość tego elementu na wartość Issuer elementu AuthnRequest, który zainicjował logowanie. Aby oszacować wartość Audience, użyj wartości App ID URI określonej podczas rejestracji aplikacji.

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

Podobnie jak wartość Issuer, wartość Audience musi być dokładnie zgodna z jedną z głównych nazw usług reprezentujących usługę w chmurze w identyfikatorze Entra firmy Microsoft. Jeśli jednak wartość elementu Issuer nie jest wartością identyfikatora URI, wartość Audience w odpowiedzi jest wartością Issuer poprzedzoną spn:.

AtrybutStatement

Zawiera on oświadczenia dotyczące tematu lub użytkownika. Poniższy fragment zawiera przykładowy element AttributeStatement. Wielokropek wskazuje, że element może zawierać wiele atrybutów i wartości atrybutów.

<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>
  • Oświadczenia nazwy — wartość atrybutu Name (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name) jest główną nazwą użytkownika uwierzytelnionego, na przykład testuser@managedtenant.com.
  • ObjectIdentifier Claim — wartość atrybutu ObjectIdentifier (http://schemas.microsoft.com/identity/claims/objectidentifier) jest ObjectId obiektu katalogu, który reprezentuje uwierzytelnionego użytkownika w identyfikatorze Entra firmy Microsoft. ObjectId jest niezmiennym, globalnie unikatowym i ponownie używanym bezpiecznym identyfikatorem uwierzytelnionego użytkownika.

AuthnStatement

Ten element potwierdza, że podmiot asercji został uwierzytelniony za pomocą określonych środków w określonym czasie.

  • Atrybut AuthnInstant określa czas, w którym użytkownik uwierzytelniony za pomocą identyfikatora Microsoft Entra.
  • Element AuthnContext określa kontekst uwierzytelniania używany do uwierzytelniania użytkownika.
<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>