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ć AuthnRequest
element (żą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ć Response
element w usłudze w chmurze.
Uwaga
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 interfejsu OpenID Połączenie 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ą AuthnRequest
element do identyfikatora Entra firmy Microsoft. Przykładowy plik SAML 2.0 AuthnRequest
może wyglądać podobnie do następującego przykładu:
<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 | Type | Opis |
---|---|---|
ID |
Wymagania | Identyfikator Entra firmy Microsoft używa tego atrybutu do wypełnienia InResponseTo atrybutu 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 |
Wymagania | Ten parametr powinien być ustawiony na 2.0 wartość . |
IssueInstant |
Wymagania | 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 |
Opcjonalnie | Jeśli zostanie podany, ten parametr musi być zgodny RedirectUri z usługą w chmurze w identyfikatorze Entra firmy Microsoft. |
ForceAuthn |
Opcjonalnie | 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 |
Opcjonalnie | 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 AuthnRequest
atrybuty, takie jak Consent
, Destination
, AssertionConsumerServiceIndex
, AttributeConsumerServiceIndex
i ProviderName
, są ignorowane.
Identyfikator Entra firmy Microsoft ignoruje również element w elemecie Conditions
AuthnRequest
.
Wystawca
Element Issuer
w elemecie AuthnRequest
musi dokładnie odpowiadać jednemu z parametrów ServicePrincipalNames w usłudze w chmurze w identyfikatorze Entra firmy Microsoft. Zazwyczaj jest to ustawienie identyfikatora URI identyfikatora aplikacji określonego podczas rejestracji aplikacji.
Fragment SAML zawierający Issuer
element 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 AuthnRequest
elementach 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 NameIDPolicy
zostanie podany, możesz uwzględnić jego opcjonalny Format
atrybut. Atrybut może mieć tylko jedną z następujących wartości; każda Format
inna wartość powoduje błąd.
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
: Identyfikator Entra firmy Microsoft wystawiaNameID
oświadczenie jako identyfikator parowania.urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
: Identyfikator entra firmy Microsoft wystawiaNameID
oświadczenie w formacie adresu e-mail.urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
: Ta wartość umożliwia firmie Microsoft Entra ID wybranie formatu oświadczenia. Identyfikator Entra firmy Microsoft wystawiaNameID
oświadczenie jako identyfikator parowania.urn:oasis:names:tc:SAML:2.0:nameid-format:transient
: Identyfikator Entra firmy Microsoft wystawiaNameID
oświadczenie jako losowo wygenerowaną wartość, która jest unikatowa 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 SPNameQualifier
zostanie określony, identyfikator Entra firmy Microsoft zawiera tę samą SPNameQualifier
wartość w odpowiedzi.
Identyfikator Entra firmy Microsoft ignoruje AllowCreate
atrybut .
RequestedAuthnContext
Element RequestedAuthnContext
określa żądane metody uwierzytelniania. Jest on opcjonalny w AuthnRequest
elementach wysyłanych do identyfikatora Entra firmy Microsoft. Identyfikator entra firmy Microsoft obsługuje AuthnContextClassRef
wartości, takie jak urn:oasis:names:tc:SAML:2.0:ac:classes:Password
.
Określanie zakresu
Element Scoping
, który zawiera listę dostawców tożsamości, jest opcjonalny w AuthnRequest
elementach wysyłanych do identyfikatora Entra firmy Microsoft.
Jeśli zostanie podany, nie uwzględnij atrybutu ProxyCount
IDPListOption
ani RequesterID
elementu, ponieważ nie są one obsługiwane.
Podpis
Element Signature
w AuthnRequest
elementach jest opcjonalny. Usługę Microsoft Entra ID można skonfigurować w celu wymuszania 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 Subject
elementu. Identyfikator Entra firmy Microsoft nie obsługuje określania tematu w AuthnRequest
pliku i zwróci błąd, jeśli zostanie podany.
Zamiast tego można podać temat, dodając login_hint
parametr do żądania HTTP do adresu URL logowania jednokrotnego z identyfikatorem NameID podmiotu jako wartością parametru.
Response
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>
Response
Element Response
zawiera wynik żądania autoryzacji. Identyfikator Entra firmy Microsoft ustawia ID
Version
wartości i IssueInstant
w elemecie Response
. Ustawia również następujące atrybuty:
Destination
: Po pomyślnym zakończeniu logowania jest on ustawiony naRedirectUri
dostawcę usług (usługę w chmurze).InResponseTo
: Jest on ustawiony naID
atrybutAuthnRequest
elementu, który zainicjował odpowiedź.
Wystawca
Identyfikator entra firmy Microsoft ustawia Issuer
element na https://sts.windows.net/<TenantIDGUID>/
gdzie <TenantIDGUID>
jest identyfikatorem 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 StatusCode
element, który zawiera kod lub zestaw zagnieżdżonych kodów, który reprezentuje stan żądania. Zawiera StatusMessage
również element zawierający 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>
Asercja
Oprócz wartości ID
, IssueInstant
i Version
identyfikator Entra firmy Microsoft ustawia następujące elementy w Assertion
elemecie odpowiedzi.
Wystawca
Jest ona ustawiona na https://sts.windows.net/<TenantIDGUID>/
lokalizację, w której <TenantIDGUID>
jest identyfikator 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 IDPSSODescriptor
elemecie 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 NameID
element reprezentujący uwierzytelnionego użytkownika. Wartość NameID
jest identyfikatorem docelowym, który jest kierowany 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
SubjectConfirmation
elementu jest zawsze ustawiony na urn:oasis:names:tc:SAML:2.0:cm:bearer
wartość .
<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śćIssueInstant
atrybutuAssertion
elementu. 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
.
Odbiorcy
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 ocenić Audience
wartość, użyj wartości App ID URI
określonej podczas rejestracji aplikacji.
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
Issuer
Podobnie jak wartość, Audience
wartość musi być dokładnie zgodna z jedną z głównych nazw usługi, która reprezentuje usługę w chmurze w identyfikatorze Entra firmy Microsoft. Jeśli jednak wartość Issuer
elementu nie jest wartością identyfikatora URI, Audience
wartość w odpowiedzi jest Issuer
wartością poprzedzoną prefiksem spn:
.
AtrybutStatement
Zawiera on oświadczenia dotyczące tematu lub użytkownika. Poniższy fragment zawiera przykładowy AttributeStatement
element. 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>
- Name Claim — 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
obiektem katalogu reprezentującym 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 uwierzytelnił się za pomocą identyfikatora Entra firmy Microsoft. - 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>