Sdílet prostřednictvím


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 Sign-On 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 Connect 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í element AuthnRequest do ID Microsoft Entra. Ukázkový AuthnRequest SAML 2.0 může vypadat jako v následujícím příkladu:

<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 Popis
ID Požadovaný 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. Například id6c1c178c166d486687be4aaf5e482730 je platné ID.
Version Požadovaný Tento parametr by měl být nastaven na 2.0.
IssueInstant Požadovaný Jedná se o řetězec DateTime s hodnotou UTC a formátu 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žby v Microsoft Entra ID.
AssertionConsumerServiceIndex Volitelný Pokud je k dispozici, ID Microsoft Entra odešle požadavek na RedirectUri s odpovídajícím indexem nakonfigurovaným v rámci základní konfigurace SAML aplikace. POZNÁMKA: na specifikace SAML se vzájemně vylučují parametry AssertionConsumerServiceURL a AssertionConsumerServiceIndex.
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í atributy AuthnRequest, například Consent, Destinationa ProviderName, jsou ignorovány.

Microsoft Entra ID také ignoruje prvek Conditions v AuthnRequest.

Emitent

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

Výňatek SAML obsahující prvek Issuer 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 prvek požaduje v odpovědi určitý formát ID názvu a je volitelný v AuthnRequest elementy odeslané 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 je k dispozici NameIDPolicy, můžete zahrnout její volitelný atribut Format. 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á deklaraci identity NameID jako párový identifikátor.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: ID Microsoft Entra vydává deklaraci identity NameID 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á deklaraci identity NameID jako identifikátor párového směru.
  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient: Microsoft Entra ID vydává deklaraci identity NameID 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 je zadán SPNameQualifier, obsahuje ID Microsoft Entra stejné SPNameQualifier v odpovědi.

ID Microsoft Entra ignoruje atribut AllowCreate.

RequestedAuthnContext

Element RequestedAuthnContext určuje požadované metody ověřování. V AuthnRequest elementech odesílaných do ID Microsoft Entra je nepovinný.

Poznámka

Pokud je RequestedAuthnContext součástí požadavku SAML, musí být element Comparison nastaven na exact.

Microsoft Entra ID podporuje následující AuthnContextClassRef hodnoty.

Metoda ověřování Identifikátor URI třídy kontextu ověřování
Kerberos urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos
Uživatelské jméno a heslo urn:oasis:names:tc:SAML:2.0:ac:classes:Password
Infrastruktura veřejných klíčů PGP urn:oasis:names:tc:SAML:2.0:ac:classes:PGP
Zabezpečené vzdálené heslo urn:oasis:names:tc:SAML:2.0:ac:classes:SecureRemotePassword
Digitální podpis XML urn:oasis:names:tc:SAML:2.0:ac:classes:XMLDSig
Jednoduchá infrastruktura veřejného klíče urn:oasis:names:tc:SAML:2.0:ac:classes:SPKI
Čipová karta urn:oasis:names:tc:SAML:2.0:ac:classes:Smartcard
Čipová karta s uzavřeným privátním klíčem a PIN kódem urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI
Klient TLS (Transport Layer Security) urn:oasis:names:tc:SAML:2.0:ac:classes:TLSClient
Nespecifikovaný urn:oasis:names:tc:SAML:2.0:ac:classes:Unspecified
Certifikát X.509 urn:oasis:names:tc:SAML:2.0:ac:classes:X509
Integrované ověřování systému Windows urn:federation:authentication:windows

Oboru

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

Pokud je k dispozici, nezahrnujte atribut ProxyCount, IDPListOption ani prvek RequesterID, protože se nepodporují.

Podpis

Prvek Signature v elementech AuthnRequest je volitelný. Id Microsoft Entra je možné nakonfigurovat tak, aby vynucovala požadavek 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 prvek Subject. MICROSOFT Entra ID nepodporuje zadání předmětu v AuthnRequest a vrátí chybu, pokud je zadána.

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

Odpověď

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

Odpověď

Element Response obsahuje výsledek žádosti o autorizaci. Microsoft Entra ID nastaví ID, Version a IssueInstant hodnoty v elementu Response. 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 nastavení je nastaveno na atribut ID elementu AuthnRequest, který inicioval odpověď.

Emitent

Id Microsoft Entra nastaví prvek Issuer na https://sts.windows.net/<TenantIDGUID>/, kde <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í. Obsahuje prvek StatusCode, který obsahuje kód nebo sadu vnořených kódů, které představují stav požadavku. Obsahuje také prvek StatusMessage, 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-dd22-eeeeee333333
    Timestamp: 2013-03-18 08:49:24Z</samlp:StatusMessage>
    </samlp:Status>
</samlp:Response>

Tvrzení

Kromě ID, IssueInstant a Version, Microsoft Entra ID nastaví následující prvky v Assertion prvku odpovědi.

Emitent

Tato možnost je nastavená na https://sts.windows.net/<TenantIDGUID>/, kde <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 prvek NameID, 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 Method elementu SubjectConfirmation 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>

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

  • Hodnota atributu NotBefore se rovná nebo mírně (menší než sekunda) později než hodnota IssueInstant atributu Assertion elementu. 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ější než hodnota atributu NotBefore.

Obecenstvo

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

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

Stejně jako hodnota Issuer musí hodnota Audience 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 prvku Issuer není hodnotou identifikátoru URI, Audience hodnota v odpovědi je hodnota Issuer předponou spn:.

AttributeStatement

Obsahuje deklarace identity týkající se subjektu nebo uživatele. Následující výňatek obsahuje ukázkový prvek AttributeStatement. 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 objektu 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>