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.
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
, AttributeConsumerServiceIndex
i 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świadczenieNameID
jako identyfikator parowania. -
urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
: Identyfikator entra firmy Microsoft wystawia oświadczenieNameID
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świadczenieNameID
jako identyfikator parowania. -
urn:oasis:names:tc:SAML:2.0:nameid-format:transient
: Identyfikator entra firmy Microsoft wystawia oświadczenieNameID
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 naRedirectUri
dostawcy usług (usługa w chmurze). -
InResponseTo
: jest on ustawiony na atrybutID
elementuAuthnRequest
, 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 Version
identyfikator 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ść atrybutuIssueInstant
elementuAssertion
. 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ść atrybutuNotBefore
.
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ładtestuser@managedtenant.com
. -
ObjectIdentifier Claim — wartość atrybutu
ObjectIdentifier
(http://schemas.microsoft.com/identity/claims/objectidentifier
) jestObjectId
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>