Tokeny Microsoft Identity Platform pro ID

Token ID je základní rozšíření, které OpenID Connect provádí pro OAuth 2.0. Tokeny ID jsou vystaveny autorizačním serverem a obsahují deklarace identity, které obsahují informace o uživateli. Je možné je odeslat společně nebo místo přístupového tokenu. Informace v tokenech ID umožňují klientovi ověřit, že uživatel je tím, o koho se jedná. Tokeny ID jsou určeny k pochopení aplikací třetích stran. Tokeny ID by se neměly používat pro účely autorizace. Přístupové tokeny se používají k autorizaci. Deklarace identity poskytované tokeny ID je možné použít pro uživatelské rozhraní uvnitř vaší aplikace, jako klíče v databázi a poskytnutí přístupu k klientské aplikaci.

Požadavky

Před tím, než si projdete tento článek, bude užitečný následující článek:

Deklarace identity v tokenu ID

Tokeny ID jsou webové tokeny JSON (JWT). Tyto tokeny ID se skládají z hlavičky, datové části a podpisu. Hlavička a podpis slouží k ověření pravosti tokenu, zatímco datová část obsahuje informace o uživateli požadovaném vaším klientem. Tokeny ID verze 1.0 a v2.0 mají rozdíly v informacích, které obsahují. Verze je založená na koncovém bodu, ze kterého byla požadována. I když stávající aplikace pravděpodobně používají koncový bod Azure AD (v1.0), nové aplikace by měly používat koncový bod "Microsoft identity platform" (v2.0).

  • v1.0: koncový bod Azure AD:https://login.microsoftonline.com/common/oauth2/authorize
  • v2.0: Koncový bod Microsoft Identity Platform: https://login.microsoftonline.com/common/oauth2/v2.0/authorize

Ukázkový token ID verze 1.0

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IjdfWnVmMXR2a3dMeFlhSFMzcTZsVWpVWUlHdyIsImtpZCI6IjdfWnVmMXR2a3dMeFlhSFMzcTZsVWpVWUlHdyJ9.eyJhdWQiOiJiMTRhNzUwNS05NmU5LTQ5MjctOTFlOC0wNjAxZDBmYzljYWEiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC9mYTE1ZDY5Mi1lOWM3LTQ0NjAtYTc0My0yOWYyOTU2ZmQ0MjkvIiwiaWF0IjoxNTM2Mjc1MTI0LCJuYmYiOjE1MzYyNzUxMjQsImV4cCI6MTUzNjI3OTAyNCwiYWlvIjoiQVhRQWkvOElBQUFBcXhzdUIrUjREMnJGUXFPRVRPNFlkWGJMRDlrWjh4ZlhhZGVBTTBRMk5rTlQ1aXpmZzN1d2JXU1hodVNTajZVVDVoeTJENldxQXBCNWpLQTZaZ1o5ay9TVTI3dVY5Y2V0WGZMT3RwTnR0Z2s1RGNCdGsrTExzdHovSmcrZ1lSbXY5YlVVNFhscGhUYzZDODZKbWoxRkN3PT0iLCJhbXIiOlsicnNhIl0sImVtYWlsIjoiYWJlbGlAbWljcm9zb2Z0LmNvbSIsImZhbWlseV9uYW1lIjoiTGluY29sbiIsImdpdmVuX25hbWUiOiJBYmUiLCJpZHAiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83MmY5ODhiZi04NmYxLTQxYWYtOTFhYi0yZDdjZDAxMWRiNDcvIiwiaXBhZGRyIjoiMTMxLjEwNy4yMjIuMjIiLCJuYW1lIjoiYWJlbGkiLCJub25jZSI6IjEyMzUyMyIsIm9pZCI6IjA1ODMzYjZiLWFhMWQtNDJkNC05ZWMwLTFiMmJiOTE5NDQzOCIsInJoIjoiSSIsInN1YiI6IjVfSjlyU3NzOC1qdnRfSWN1NnVlUk5MOHhYYjhMRjRGc2dfS29vQzJSSlEiLCJ0aWQiOiJmYTE1ZDY5Mi1lOWM3LTQ0NjAtYTc0My0yOWYyOTU2ZmQ0MjkiLCJ1bmlxdWVfbmFtZSI6IkFiZUxpQG1pY3Jvc29mdC5jb20iLCJ1dGkiOiJMeGVfNDZHcVRrT3BHU2ZUbG40RUFBIiwidmVyIjoiMS4wIn0=.UJQrCA6qn2bXq57qzGX_-D3HcPHqBMOKDPx4su1yKRLNErVD8xkxJLNLVRdASHqEcpyDctbdHccu6DPpkq5f0ibcaQFhejQNcABidJCTz0Bb2AbdUCTqAzdt9pdgQvMBnVH1xk3SCM6d4BbT4BkLLj10ZLasX7vRknaSjE_C5DI7Fg4WrZPwOhII1dB0HEZ_qpNaYXEiy-o94UJ94zCr07GgrqMsfYQqFR7kn-mn68AjvLcgwSfZvyR_yIK75S_K37vC3QryQ7cNoafDe9upql_6pB2ybMVlgWPs_DmbJ8g0om-sPlwyn74Cc1tW3ze-Xptw_2uVdPgWyqfuWAfq6Q

Podívejte se na tento ukázkový token verze 1.0 v jwt.ms.

Ukázkový token ID verze 2.0

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjFMVE16YWtpaGlSbGFfOHoyQkVKVlhlV01xbyJ9.eyJ2ZXIiOiIyLjAiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vOTEyMjA0MGQtNmM2Ny00YzViLWIxMTItMzZhMzA0YjY2ZGFkL3YyLjAiLCJzdWIiOiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFJa3pxRlZyU2FTYUZIeTc4MmJidGFRIiwiYXVkIjoiNmNiMDQwMTgtYTNmNS00NmE3LWI5OTUtOTQwYzc4ZjVhZWYzIiwiZXhwIjoxNTM2MzYxNDExLCJpYXQiOjE1MzYyNzQ3MTEsIm5iZiI6MTUzNjI3NDcxMSwibmFtZSI6IkFiZSBMaW5jb2xuIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiQWJlTGlAbWljcm9zb2Z0LmNvbSIsIm9pZCI6IjAwMDAwMDAwLTAwMDAtMDAwMC02NmYzLTMzMzJlY2E3ZWE4MSIsInRpZCI6IjkxMjIwNDBkLTZjNjctNGM1Yi1iMTEyLTM2YTMwNGI2NmRhZCIsIm5vbmNlIjoiMTIzNTIzIiwiYWlvIjoiRGYyVVZYTDFpeCFsTUNXTVNPSkJjRmF0emNHZnZGR2hqS3Y4cTVnMHg3MzJkUjVNQjVCaXN2R1FPN1lXQnlqZDhpUURMcSFlR2JJRGFreXA1bW5PcmNkcUhlWVNubHRlcFFtUnA2QUlaOGpZIn0.1AFWW-Ck5nROwSlltm7GzZvDwUkqvhSQpm55TQsmVo9Y59cLhRXpvB8n-55HCr9Z6G_31_UbeUkoz612I2j_Sm9FFShSDDjoaLQr54CreGIJvjtmS3EkK9a7SJBbcpL1MpUtlfygow39tFjY7EVNW9plWUvRrTgVk7lYLprvfzw-CIqw3gHC-T7IK_m_xkr08INERBtaecwhTeN4chPC4W3jdmw_lIxzC48YoQ0dB1L9-ImX98Egypfrlbm0IBL5spFzL6JDZIRRJOu8vecJvj1mq-IUhGt0MacxX8jdxYLP-KUu2d9MbNKpCKJuZ7p8gwTL5B7NlUdh_dmSviPWrw

Prohlédněte si tento ukázkový token verze 2.0 v jwt.ms.

Všechny deklarace identity JWT uvedené níže se zobrazí v tokenech v1.0 i v2.0, pokud není uvedeno jinak.

Deklarace identity hlaviček

Následující tabulka ukazuje deklarace identity hlaviček, které jsou přítomné v tokenech ID.

Deklarovat Formát Description
typ Řetězec – vždy "JWT" Označuje, že token je token JWT.
alg Řetězec Označuje algoritmus, který byl použit k podepsání tokenu. Příklad: RS256
kid Řetězec Určuje kryptografický otisk veřejného klíče, který lze použít k ověření podpisu tohoto tokenu. Vygenerované v tokenech ID verze 1.0 a v2.0.
x5t Řetězec Funkce stejné (při použití a hodnotě) jako kid. x5t je starší verze deklarace identity generovaná pouze v tokenech ID verze 1.0 pro účely kompatibility.

Deklarace deklarací datové části

Následující tabulka ukazuje deklarace identity, které jsou ve většině tokenů ID ve výchozím nastavení (s výjimkou těch, které jsou uvedené). Vaše aplikace ale může k vyžádání dalších deklarací identity v tokenu ID použít volitelné deklarace identity. Volitelné deklarace identity můžou být v rozsahu groups od deklarace identity až po informace o jménu uživatele.

Deklarovat Formát Description
aud Řetězec, identifikátor GUID ID aplikace Identifikuje zamýšleného příjemce tokenu. Cílová id_tokensskupina je ID aplikace přiřazené vaší aplikaci v Azure Portal. Tato hodnota by měla být ověřena. Token by měl být odmítnut, pokud neodpovídá ID aplikace vaší aplikace.
iss Řetězec, identifikátor URI vystavitele Identifikuje vystavitele nebo autorizační server, který vytváří a vrací token. Identifikuje také Azure AD tenanta, pro kterého byl uživatel ověřen. Pokud byl token vydán koncovým bodem v2.0, identifikátor URI skončí /v2.0. Identifikátor GUID, který označuje, že uživatel je uživatel uživatelem z účtu Microsoft, je 9188040d-6c67-4c5b-b112-36a304b66dad. Vaše aplikace by měla použít část deklarace identity GUID k omezení sady tenantů, kteří se můžou k aplikaci přihlásit, pokud je to možné.
iat int, unix timestamp "Vystaveno od" označuje, kdy došlo k ověření tohoto tokenu.
idp Řetězec, obvykle identifikátor URI stS Zaznamenává zprostředkovatele identity, který ověřil subjekt tokenu. Tato hodnota je stejná jako hodnota deklarace vystavitele, pokud například uživatelský účet není ve stejném tenantovi jako vystavitel – hosté. Pokud deklarace identity není k dispozici, znamená to, že místo toho lze použít hodnotu iss . Pro osobní účty používané v kontextu organizace (například osobní účet pozvaný do Azure AD tenanta) idp může být deklarace identity "live.com" nebo identifikátor STS obsahující tenanta 9188040d-6c67-4c5b-b112-36a304b66dadúčtu Microsoft .
nbf int, unix timestamp Nárok "nbf" (ne před) určuje dobu, před kterou JWT nesmí být přijat ke zpracování.
exp int, unix timestamp Deklarace "exp" (čas vypršení platnosti) identifikuje čas vypršení platnosti nebo po kterém JWT nesmí být přijat ke zpracování. Je důležité si uvědomit, že za určitých okolností může prostředek token před tímto časem odmítnout. Pokud se například vyžaduje změna ověřování nebo bylo zjištěno odvolání tokenu.
c_hash Řetězec Hodnota hash kódu je součástí tokenů ID pouze v případech, kdy je token ID vystaven s autorizačním kódem OAuth 2.0. Dá se použít k ověření pravosti autorizačního kódu. Informace o tom, jak toto ověření provést, najdete ve specifikaci OpenID Connect.
at_hash Řetězec Hodnota hash přístupového tokenu je součástí tokenů ID pouze v případech, kdy se token ID vydá z koncového /authorize bodu s přístupovým tokenem OAuth 2.0. Dá se použít k ověření pravosti přístupového tokenu. Informace o tom, jak toto ověření provést, najdete ve specifikaci OpenID Connect. To se nevrátí u tokenů ID z koncového /token bodu.
aio Neprůhlé řetězce Interní deklarace identity používaná Azure AD k zaznamenání dat pro opakované použití tokenu. Měli byste ho ignorovat.
preferred_username Řetězec Primární uživatelské jméno, které představuje uživatele. Může to být e-mailová adresa, telefonní číslo nebo obecné uživatelské jméno bez zadaného formátu. Jeho hodnota je proměnlivá a může se v průběhu času měnit. Vzhledem k tomu, že je proměnlivá, nesmí být tato hodnota použita k rozhodování o autorizaci. Dá se ale použít pro nápovědu uživatelského jména a v uživatelském rozhraní čitelném pro člověka jako uživatelské jméno. K profile získání této deklarace identity se vyžaduje obor. K dispozici pouze v tokenech verze 2.0.
email Řetězec Deklarace email identity je ve výchozím nastavení k dispozici pro účty hostů, které mají e-mailovou adresu. Vaše aplikace může požádat o e-mailovou deklaraci identity pro spravované uživatele (uživatele ze stejného tenanta jako prostředek) pomocí emailvolitelné deklarace identity. V koncovém bodu v2.0 může vaše aplikace také požádat o email obor OpenID Connect – k získání deklarace identity nemusíte požadovat jak volitelnou deklaraci identity, tak obor.
name Řetězec Deklarace name identity poskytuje čitelnost člověka, která identifikuje předmět tokenu. Hodnota není zaručená, že je jedinečná, dá se změnit a je navržená tak, aby se používala jenom pro účely zobrazení. Obor profile je nutný k přijetí této deklarace identity.
nonce Řetězec Hodnota nonce odpovídá parametru zahrnutého v původním požadavku /authorize na IDP. Pokud se neshoduje, měla by vaše aplikace token odmítnout.
oid Řetězec, identifikátor GUID Neměnný identifikátor objektu v systému identit Microsoftu v tomto případě uživatelský účet. Toto ID jednoznačně identifikuje uživatele napříč aplikacemi – dva různé aplikace, které se přihlásí ke stejnému uživateli, obdrží stejnou hodnotu v oid deklaraci identity. Microsoft Graph vrátí toto ID jako id vlastnost daného uživatelského účtu. Vzhledem k tomu, že oid umožňuje více aplikacím korelovat uživatele, profile je rozsah nutný k přijetí této deklarace identity. Všimněte si, že pokud jeden uživatel existuje ve více tenantech, bude uživatel obsahovat v každém tenantovi jiné ID objektu – považuje se za jiné účty, i když se uživatel přihlásí ke každému účtu se stejnými přihlašovacími údaji. Deklarace oid identity je identifikátor GUID a nelze ji znovu použít.
roles Pole řetězců Sada rolí přiřazených uživateli, který se přihlašuje.
rh Neprůhlásný řetězec Interní deklarace identity, kterou Azure používá k opětovnému obnovení tokenů. Měla by být ignorována.
sub Řetězec Objekt zabezpečení, o kterém token určuje informace, jako je uživatel aplikace. Tato hodnota je neměnná a nelze ji znovu přiřadit nebo znovu použít. Předmět je párový identifikátor – je jedinečný pro konkrétní ID aplikace. Pokud se jeden uživatel přihlásí ke dvěma různým aplikacím pomocí dvou různých ID klienta, tyto aplikace obdrží dvě různé hodnoty pro deklaraci identity subjektu. To může nebo nemusí být žádoucí v závislosti na požadavcích na vaši architekturu a ochranu osobních údajů.
tid Řetězec, identifikátor GUID Představuje tenanta, ke kterému se uživatel přihlašuje. U pracovních a školních účtů je identifikátor GUID neměnným ID tenanta organizace, ke které se uživatel přihlašuje. Pro přihlášení k osobnímu tenantovi účtu Microsoft (služby, jako jsou Xbox, Teams for Life nebo Outlook), je 9188040d-6c67-4c5b-b112-36a304b66dadhodnota .
unique_name Řetězec Pouze v tokenech verze 1.0. Poskytuje lidsky čitelnou hodnotu, která identifikuje subjekt tokenu. Tato hodnota není zaručená, že je jedinečná v rámci tenanta a měla by se používat jenom pro účely zobrazení.
uti Řetězec Deklarace identity identifikátoru tokenu, která odpovídá jti specifikaci JWT. Jedinečný identifikátor jednotlivých tokenů, který se rozlišují malá a velká písmena.
ver Řetězec, buď 1.0, nebo 2.0 Označuje verzi id_token.
hasgroups Logická hodnota Pokud je k dispozici, vždy true, označuje uživatele alespoň v jedné skupině. Používá se místo deklarace identity skupin pro JWT v implicitních tocích udělení, pokud úplná deklarace identity skupin rozšíří fragment identifikátoru URI nad limity délky adresy URL (aktuálně 6 nebo více skupin). Označuje, že klient by měl používat Microsoft Graph API k určení skupin uživatele (https://graph.microsoft.com/v1.0/users/{userID}/getMemberObjects).
groups:src1 Objekt JSON Pro žádosti o tokeny, které nejsou omezené na délku (viz hasgroups výše), ale stále příliš velké pro token, bude zahrnut odkaz na úplný seznam skupin uživatele. Pro JWT jako distribuovanou deklaraci identity pro SAML jako novou deklaraci identity groups .

Příklad hodnoty JWT:
"groups":"src1"
"_claim_sources: "src1" : { "endpoint" : "https://graph.microsoft.com/v1.0/users/{userID}/getMemberObjects" }

Další informace najdete v tématu Deklarace nadlimitního využití skupin.

Použití deklarací identity k spolehlivé identifikaci uživatele (předmětu a ID objektu)

Při identifikaci uživatele (řekněme, vyhledání v databázi nebo rozhodování o oprávněních, která mají), je důležité používat informace, které zůstanou konstantní a jedinečné v čase. Starší aplikace někdy používají pole, jako je e-mailová adresa, telefonní číslo nebo hlavní název uživatele (UPN). Všechny tyto změny se můžou v průběhu času měnit a můžou se také opakovaně používat v průběhu času. Když například zaměstnanec změní jméno nebo zaměstnanec dostane e-mailovou adresu, která odpovídá předchozímu, už nebude prezentovat zaměstnance. Proto je důležité , aby vaše aplikace nepoužíla data čitelná pro člověka k identifikaci uživatele – člověk čitelný obecně znamená, že ho někdo přečte a chce ho změnit. Místo toho použijte deklarace identity poskytované standardem OIDC nebo deklaracemi rozšíření poskytované Microsoftem – sub a oid deklarace identity.

Chcete-li správně ukládat informace pro jednotlivé uživatele, použijte sub nebo oid sami (které jsou jedinečné jako identifikátory GUID), které tid se v případě potřeby používají ke směrování nebo horizontálnímu dělení. Pokud potřebujete sdílet data napříč službami, je nejlepší, oid+tid protože všechny aplikace získávají stejné oid deklarace identity tid pro daného uživatele, který funguje v daném tenantovi. Deklarace sub identity v Microsoft identity platform je "párově moudrá" – je jedinečná na základě kombinace příjemce tokenu, tenanta a uživatele. Proto dvě aplikace, které požadují tokeny ID daného uživatele, obdrží různé sub deklarace identity, ale stejné oid deklarace identity pro daného uživatele.

Poznámka

Nepoužívejte idp deklaraci identity k ukládání informací o uživateli při pokusu o korelaci uživatelů napříč tenanty. Nebude fungovat jako oid deklarace identity sub uživatele napříč tenanty, aby se zajistilo, že aplikace nemůžou sledovat uživatele napříč tenanty.

Scénáře hosta, kdy se uživatel nachází v jednom tenantovi a ověřuje se v jiném, by měl s uživatelem zacházet, jako by byl zcela novým uživatelem služby. Vaše dokumenty a oprávnění v tenantovi Contoso by se neměly v tenantovi Fabrikam použít. To je důležité, abyste zabránili náhodnému úniku dat napříč tenanty a vynucování životního cyklu dat. Vyřazení hosta z tenanta by také mělo odebrat přístup k datům, která vytvořili v daném tenantovi.

Deklarace nadlimitního využití skupin

Pokud chcete zajistit, aby velikost tokenu nepřekročila limity velikosti hlavičky HTTP, Azure AD omezuje počet ID objektů, které zahrnuje do groups deklarace identity. Pokud je uživatel členem více skupin než limit nadlimitní využití (150 pro tokeny SAML, 200 pro tokeny JWT), pak Azure AD nevygeneruje deklarace identity skupin v tokenu. Místo toho obsahuje deklaraci nadlimitní hodnoty v tokenu, která značí aplikaci, aby se dotaz na microsoft Graph API načetla členství ve skupině uživatele.

{
  ...
  "_claim_names": {
   "groups": "src1"
    },
    {
  "_claim_sources": {
    "src1": {
        "endpoint":"[Url to get this user's group membership from]"
        }
       }
     }
  ...
}

Životnost tokenu ID

Ve výchozím nastavení je token ID platný po dobu jedné hodiny – po jedné hodině musí klient získat nový token ID.

Můžete upravit dobu životnosti tokenu ID, abyste mohli řídit, jak často klientská aplikace vyprší relaci aplikace a jak často vyžaduje, aby se uživatel znovu ověřil bezobslužně nebo interaktivně. Další informace najdete v tématu Konfigurovatelné životnosti tokenů.

Ověření tokenu ID

Ověřování tokenu ID je podobné prvnímu kroku ověření přístupového tokenu. Váš klient může zkontrolovat, jestli byl token manipulován. Může také ověřit vystavitele, aby se zajistilo, že správný vystavitel token odeslal zpět. Vzhledem k tomu, že tokeny ID jsou vždy tokenem JWT, existuje mnoho knihoven k ověření těchto tokenů – doporučujeme místo toho, abyste ho sami použili. Všimněte si, že ID tokeny smí ověřovat jen důvěryhodní klienti (mají tajný kód). Veřejné aplikace (kód spuštěný zcela v zařízení nebo síti, kterou neřídíte, jako je prohlížeč uživatele nebo jeho domácí síť), nemají výhodu při ověřování tokenu ID. Důvodem je to, že uživatel se zlými úmysly může zachycovat a upravovat klíče používané k ověření tokenu.

Pokud chcete token ověřit ručně, přečtěte si podrobnosti postupu při ověřování přístupového tokenu. Následující deklarace identity JWT by se měly ověřit v tokenu ID po ověření podpisu tokenu. Tyto deklarace identity se můžou ověřit také v knihovně ověření tokenů:

  • Časové razítka: časové iatrazítko , nbfa exp časové razítko by měly podle potřeby spadat před nebo za aktuálním časem.
  • Cílová skupina: aud Deklarace identity by měla odpovídat ID aplikace pro vaši aplikaci.
  • Nonce: nonce Deklarace identity v datové části musí odpovídat parametru nonce předané do koncového bodu /authorize během počátečního požadavku.

Další kroky