Protokol SAML pro jednotné přihlašování

Tento článek se zabývá požadavky na ověřování SAML 2.0 a odpovědi, které Microsoft Entra ID podporuje pro jednotné přihlašování (SSO).

Následující diagram protokolu popisuje sekvenci jednotného přihlašování. Cloudová služba (poskytovatel služeb) používá vazbu HTTP Redirect k předání elementu AuthnRequest (žádost o ověření) do Microsoft Entra ID (zprostředkovatele identity). Microsoft Entra ID pak použije vazbu HTTP post k publikování Response elementu do cloudové služby.

Snímek obrazovky pracovního postupu jednotného přihlašování (SSO)

Poznámka:

Tento článek popisuje použití SAML pro jednotné přihlašování. Další informace o jiných způsobech zpracování jednotného přihlašování (například pomocí OpenID Připojení nebo integrovaného ověřování systému Windows) najdete v tématu Jednotné přihlašování k aplikacím v Microsoft Entra ID.

AuthnRequest

Pokud chcete požádat o ověření uživatele, cloudové služby odesílají AuthnRequest element do ID Microsoft Entra. Ukázka SAML 2.0 AuthnRequest může vypadat jako v následujícím příkladu:

<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>
Parametr Typ Popis
ID Povinní účastníci Microsoft Entra ID používá tento atribut k naplnění InResponseTo atributu vrácené odpovědi. ID nesmí začínat číslem, takže běžnou strategií je předvytvádění řetězce, jako je "ID" na řetězcovou reprezentaci identifikátoru GUID. Jedná se například id6c1c178c166d486687be4aaf5e482730 o platné ID.
Version Požaduje se Tento parametr by měl být nastaven na 2.0hodnotu .
IssueInstant Požaduje se Jedná se o řetězec DateTime s hodnotou UTC a formátem odezvy ("o"). MICROSOFT Entra ID očekává hodnotu DateTime tohoto typu, ale nevyhodnocuje ani nepoužívá hodnotu.
AssertionConsumerServiceURL Volitelné Pokud je zadaný, musí tento parametr odpovídat RedirectUri cloudové službě v MICROSOFT Entra ID.
ForceAuthn Volitelné Toto je logická hodnota. Pokud ano, znamená to, že uživatel bude nucen znovu ověřit, i když má platnou relaci s ID Microsoft Entra.
IsPassive Volitelné Jedná se o logickou hodnotu, která určuje, zda má ID Microsoft Entra ověřit uživatele bez zásahu uživatele pomocí souboru cookie relace, pokud existuje. Pokud je to pravda, Microsoft Entra ID se pokusí ověřit uživatele pomocí souboru cookie relace.

Všechny ostatní AuthnRequest atributy, například Consent, Destination, AssertionConsumerServiceIndexAttributeConsumerServiceIndex, a ProviderName jsou ignorovány.

Microsoft Entra ID také ignoruje Conditions prvek v AuthnRequest.

Issuer

Prvek Issuer v objektu AuthnRequest musí přesně odpovídat jedné z servicePrincipalNames v cloudové službě v Microsoft Entra ID. Obvykle se nastaví na identifikátor URI ID aplikace, který je zadaný během registrace aplikace.

Výňatek SAML obsahující Issuer prvek vypadá jako v následující ukázce:

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

NameIDPolicy

Tento element požaduje v odpovědi určitý formát ID názvu a je volitelný v AuthnRequest prvcích odesílaných do Microsoft Entra ID.

Prvek NameIdPolicy vypadá jako v následující ukázce:

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

Pokud NameIDPolicy je k dispozici, můžete zahrnout jeho volitelný Format atribut. Atribut Format může mít pouze jednu z následujících hodnot; jakákoli jiná hodnota způsobí chybu.

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent: Id Microsoft Entra vydává NameID deklaraci identity jako párový identifikátor.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: Id Microsoft Entra vydává NameID deklaraci identity ve formátu e-mailové adresy.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified: Tato hodnota umožňuje microsoft Entra ID vybrat formát deklarace identity. Id Microsoft Entra vydává NameID deklaraci identity jako identifikátor spárované ručiček.
  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient: Id Microsoft Entra vydává NameID deklaraci identity jako náhodně vygenerovanou hodnotu, která je jedinečná pro aktuální operaci jednotného přihlašování. To znamená, že hodnota je dočasná a nejde ji použít k identifikaci ověřovacího uživatele.

Pokud SPNameQualifier je zadáno, Microsoft Entra ID obsahuje stejné SPNameQualifier v odpovědi.

ID Microsoft Entra ignoruje AllowCreate atribut.

RequestedAuthnContext

Element RequestedAuthnContext určuje požadované metody ověřování. Je nepovinný v AuthnRequest prvech odeslaných do Microsoft Entra ID. Microsoft Entra ID podporuje AuthnContextClassRef hodnoty, jako urn:oasis:names:tc:SAML:2.0:ac:classes:Passwordje .

Vymezení problému

Element Scoping , který obsahuje seznam zprostředkovatelů identity, je volitelný v AuthnRequest prvcích odesílaných do Microsoft Entra ID.

Pokud je k dispozici, nezahrňte ProxyCount atribut IDPListOption ani RequesterID prvek, protože nejsou podporované.

Podpis

Prvek Signature v AuthnRequest prvcích je volitelný. Microsoft Entra ID je možné nakonfigurovat tak, aby vynucovala požadavky na podepsané žádosti o ověření. Pokud je tato možnost povolená, přijímají se jenom podepsané žádosti o ověření, jinak se ověření žadatele poskytuje pouze reagováním na registrované adresy URL služby Assertion Consumer Service.

Předmět

Nezahrnujte Subject prvek. Microsoft Entra ID nepodporuje zadání předmětu AuthnRequest a vrátí chybu, pokud je zadána.

Předmět lze místo toho poskytnout přidáním login_hint parametru do požadavku HTTP na adresu URL jednotného přihlašování s ID názvu subjektu jako hodnotou parametru.

Response

Po úspěšném dokončení požadovaného přihlášení odešle ID Microsoft Entra odpověď do cloudové služby. Odpověď na úspěšný pokus o přihlášení vypadá jako v následující ukázce:

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

Response

Tento Response prvek obsahuje výsledek žádosti o autorizaci. Microsoft Entra ID nastaví IDVersion a IssueInstant hodnoty v elementuResponse. Nastaví také následující atributy:

  • Destination: Po úspěšném přihlášení se nastaví na RedirectUri poskytovatele služeb (cloudová služba).
  • InResponseTo: Toto je nastaveno na ID atribut AuthnRequest prvku, který inicioval odpověď.

Issuer

Id Microsoft Entra nastaví Issuer element na místo, kde https://sts.windows.net/<TenantIDGUID>/<TenantIDGUID> je ID tenanta Microsoft Entra.

Například odpověď s elementem Issuer by mohla vypadat jako v následující ukázce:

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

Stav

Prvek Status vyjadřuje úspěch nebo selhání přihlášení. StatusCode Obsahuje prvek, který obsahuje kód nebo sadu vnořených kódů, které představují stav požadavku. Obsahuje také StatusMessage prvek, který obsahuje vlastní chybové zprávy, které se generují během procesu přihlašování.

Následující ukázka je odpověď SAML na neúspěšný pokus o přihlášení.

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

Kontrolní výraz

Kromě IDa IssueInstantVersion, Microsoft Entra ID nastaví následující prvky v Assertion elementu odpovědi.

Issuer

Toto je nastaveno na místo, kde https://sts.windows.net/<TenantIDGUID>/<TenantIDGUID> je ID tenanta Microsoft Entra.

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

Podpis

Microsoft Entra ID podepíše kontrolní výraz v reakci na úspěšné přihlášení. Prvek Signature obsahuje digitální podpis, který může cloudová služba použít k ověření zdroje k ověření integrity kontrolního výrazu.

K vygenerování tohoto digitálního podpisu používá Microsoft Entra ID podpisový klíč v IDPSSODescriptor prvku dokumentu metadat.

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

Předmět

Určuje princip, který je předmětem prohlášení v kontrolním výrazu. Obsahuje NameID prvek, který představuje ověřeného uživatele. Hodnota NameID je cílový identifikátor, který je směrován pouze na poskytovatele služeb, který je cílovou skupinou tokenu. Je trvalý – může být odvolán, ale nikdy se znovu nepřiřazuje. Je také neprůhlásná, v tom, že nezojevuje nic o uživateli a nelze jej použít jako identifikátor pro dotazy atributů.

Atribut MethodSubjectConfirmation prvku je vždy nastaven na 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>

Podmínky

Tento prvek určuje podmínky, které definují přijatelné použití kontrolních výrazů 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>

NotOnOrAfter Atributy NotBefore určují interval, během kterého je kontrolní výraz platný.

  • Hodnota atributu NotBefore je rovna nebo mírně (menší než sekunda) později než hodnota IssueInstant atributu Assertion prvku. Microsoft Entra ID nezohlední žádný časový rozdíl mezi sebou a cloudovou službou (poskytovatel služeb) a nepřidá do této doby žádnou vyrovnávací paměť.
  • Hodnota atributu NotOnOrAfter je o 70 minut později než hodnota atributu NotBefore .

Cílová skupina

Obsahuje identifikátor URI, který identifikuje zamýšlenou cílovou skupinu. Microsoft Entra ID nastaví hodnotu tohoto prvku na hodnotu Issuer prvku AuthnRequest , který inicioval přihlášení. K vyhodnocení Audience hodnoty použijte hodnotu App ID URI , která byla zadána během registrace aplikace.

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

Issuer Stejně jako hodnota Audience musí hodnota přesně odpovídat jednomu z hlavních názvů služby, které představují cloudovou službu v MICROSOFT Entra ID. Pokud však hodnota Issuer prvku není hodnotou identifikátoru URI, Audience hodnota v odpovědi je Issuer hodnota s předponou spn:.

AttributeStatement

Obsahuje deklarace identity týkající se subjektu nebo uživatele. Následující výňatek obsahuje ukázkový AttributeStatement prvek. Tři tečky označují, že prvek může obsahovat více atributů a hodnot atributů.

<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>
  • Deklarace identity názvu – hodnota atributu Name (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name) je hlavní název uživatele ověřeného uživatele, například testuser@managedtenant.com.
  • ObjectIdentifier Claim - Hodnota atributu ObjectIdentifier (http://schemas.microsoft.com/identity/claims/objectidentifier) je ObjectId objekt adresáře, který představuje ověřeného uživatele v Microsoft Entra ID. ObjectId je neměnný, globálně jedinečný a opakovaně používat bezpečný identifikátor ověřeného uživatele.

AuthnStatement

Tento prvek tvrdí, že subjekt kontrolního výrazu byl ověřen určitým způsobem v určitém čase.

  • Atribut AuthnInstant určuje čas, kdy se uživatel ověřil pomocí ID Microsoft Entra.
  • Element AuthnContext určuje kontext ověřování použitý k ověření uživatele.
<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>