Microsoft identity platform Tokeny ID

Token ID je základní rozšíření, které OpenID Připojení do OAuth 2.0. Tokeny ID jsou vydávány autorizačním serverem a obsahují deklarace identity, které obsahují informace o uživateli. Můžete je odeslat společně nebo místo přístupového tokenu. Informace v tokenech ID umožňují klientovi ověřit, jestli je uživatel tím, za koho se vymyšl. Tokeny ID mají být srozumitelné aplikacím třetích stran. Tokeny ID by se neměly používat pro účely autorizace. K autorizaci se používají přístupové tokeny. Deklarace identity poskytované tokeny ID je možné použít pro uživatelské prostředí v rámci vaší aplikace jako klíče v databázi aposkytující přístup ke klientské aplikaci.

Požadavky

Následující článek bude výhodný, než si projdete tento č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 se používají k ověření pravosti tokenu, zatímco datová část obsahuje informace o uživateli požadovaném vaším klientem. Tokeny ID v1.0 a v2.0 mají v informacích, které mají, rozdíly. Verze je založená na koncovém bodu, ze kterém 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 platformy Microsoft Identity Platform: https://login.microsoftonline.com/common/oauth2/v2.0/authorize

Ukázkový token ID v1.0

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

Podívejte se na tento ukázkový token v1.0 v jwt.ms.

Ukázkový token ID v2.0

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

Podívejte se na tento ukázkový token v2.0 v jwt.ms.

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

Deklarace identity hlaviček

V následující tabulce jsou uvedené deklarace identity hlaviček v tokenech ID.

Deklarovat Formát Description
typ String – always "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. Vysílá se v tokenech ID v1.0 i v2.0.
x5t Řetězec Funguje stejně (v use a value) jako kid . x5t je starší verze deklarace identity vygenerovaná pouze v tokenech ID verze 1.0 pro účely kompatibility.

Deklarace identity datové části

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

Deklarovat Formát Description
aud Řetězec, identifikátor GUID ID aplikace Identifikuje zamýšleného příjemce tokenu. Cílovou skupinou je v aplikaci ID aplikace id_tokens přiřazené vaší aplikaci v Azure Portal. Tato hodnota by se měla ověřit. Token by se měl odmítnout, pokud neodpovídá ID aplikace.
iss Řetězec, identifikátor URI vystavitele Identifikuje vystavitele nebo "autorizační server", který vytvoří a vrátí token. Identifikuje také tenanta Azure AD, pro kterého byl uživatel ověřen. Pokud byl token vydán koncovým bodem v2.0, identifikátor URI skončí na /v2.0 . Identifikátor GUID, který označuje, že uživatel je uživatelským uživatelem z účet Microsoft je 9188040d-6c67-4c5b-b112-36a304b66dad . Vaše aplikace by měla pomocí části identifikátoru GUID deklarace identity omezit sadu tenantů, které se mohou přihlásit k aplikaci, pokud je to možné.
iat int, časové systém UNIX razítko Vystavený v označuje, kdy došlo k ověření tohoto tokenu.
idp Řetězec, obvykle identifikátor URI služby STS Zaznamenává zprostředkovatele identity, který ověřil subjekt tokenu. Tato hodnota je stejná jako hodnota deklarace identity Vystavitel, pokud například uživatelský účet není ve stejném tenantovi jako vystavitel – hosté. Pokud deklarace identity není k dispozici, znamená to, že je iss možné místo toho použít hodnotu . U osobních účtů používaných v kontextu organizace (například osobní účet pozvaný do tenanta Azure AD) může být deklarace identity "live.com" nebo identifikátor URI služby STS obsahující účet Microsoft idp tenanta 9188040d-6c67-4c5b-b112-36a304b66dad služby .
nbf int, časové systém UNIX razítko Deklarace "nbf" (nikoli dříve) určuje čas, před kterým NESMÍ být JWT přijat ke zpracování.
exp int, časové systém UNIX razítko Deklarace "exp" (čas vypršení platnosti) určuje čas vypršení platnosti, ke kterému nesmí být jwt 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 touto časem odmítnout. Příklad: Pokud je vyžadována změna ověřování nebo bylo zjištěno odvolání tokenu.
c_hash Řetězec Hodnota hash kódu se do tokenů ID zahrne jenom v případě, že je token ID vystavený autorizačním kódem OAuth 2.0. Lze ji použít k ověření pravosti autorizačního kódu. Pokud chcete porozumět tomu, jak toto ověření provést, podívejte se na Připojení OpenID.
at_hash Řetězec Hodnota hash přístupového tokenu se do tokenů ID zahrne jenom v případě, že je token ID vystavený z koncového bodu pomocí přístupového tokenu /authorize OAuth 2.0. Lze ji použít k ověření pravosti přístupového tokenu. Pokud chcete porozumět tomu, jak toto ověření provést, podívejte se na Připojení OpenID. U tokenů ID z koncového bodu se tato /token hodnota nevrátila.
aio Neprůhledný řetězec Interní deklarace identity používaná službou Azure AD k zaznamenání dat pro opakované použití tokenů. Mělo by se 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 měnitelná a může se v průběhu času měnit. Vzhledem k tomu, že tuto hodnotu je možné změnit, nesmí se používat k rozhodování o autorizaci. K profile přijetí této deklarace identity se vyžaduje obor.
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 deklaraci identity e-mailu pro spravované uživatele (uživatele ze stejného tenanta jako email prostředek)pomocí volitelné deklarace identity . V koncovém bodu v2.0 může vaše aplikace také požádat o obor OpenID Připojení – k získání deklarace identity nemusíte žádat o volitelnou deklaraci identity email ani obor. Deklarace identity e-mailu podporuje jenom adresovatelné e-maily z profilových informací uživatele.
name Řetězec Deklarace name identity poskytuje lidsky čitelná hodnota, která identifikuje předmět tokenu. Hodnota není zaručena jako jedinečná, může být změněna a je navržena tak, aby se používala pouze pro účely zobrazení. profilePro příjem této deklarace je vyžadován rozsah.
nonce Řetězec Hodnota nonce odpovídá parametru zahrnutému v původní žádosti/Authorize do IDP. Pokud se neshodují, vaše aplikace by měla token odmítnout.
oid Řetězec, identifikátor GUID Neproměnlivý identifikátor pro objekt v systému Microsoft identity, v tomto případě uživatelský účet. Toto ID jednoznačně identifikuje uživatele napříč aplikacemi – dvě různé aplikace přihlášené ke stejnému uživateli získají stejnou hodnotu v oid deklaraci identity. Microsoft Graph bude toto ID vracet jako id vlastnost pro daný uživatelský účet. Vzhledem k tomu, že oid umožňuje více aplikacím korelovat uživatele, profile je pro příjem této deklarace vyžadován rozsah. Všimněte si, že pokud jeden uživatel existuje ve více klientech, bude uživatel v každém tenantovi obsahovat jiné ID objektu – považují se za jiné účty, i když se uživatel do každého účtu přihlašuje pomocí stejných přihlašovacích údajů. oidDeklarace identity je GUID a nedá se znovu použít.
roles Pole řetězců Sada rolí, které byly přiřazeny uživateli, který se přihlašuje.
rh Neprůhledný řetězec Interní deklarace identity, kterou Azure používá k opětovnému ověření tokenů. By měla být ignorována.
sub Řetězec Objekt zabezpečení, o kterém token vyhodnotí informace, jako je například uživatel aplikace Tato hodnota je neměnná a nelze ji znovu přiřadit ani použít znovu. Subjekt je párový identifikátor, který 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 klientů, budou tyto aplikace pro deklaraci deklarace subjektu dostávat dvě odlišné hodnoty. To může nebo nemusí být žádoucí v závislosti na vaší architektuře a požadavcích na ochranu osobních údajů.
tid Řetězec, identifikátor GUID Představuje tenanta, ke kterému se uživatel přihlašuje. V případě pracovních a školních účtů je identifikátor GUID neměnné ID klienta organizace, ke které se uživatel přihlašuje. pro přihlášení do tenanta osobního účet Microsoft (služby, jako je Xbox, Teams pro život nebo Outlook), je hodnota 9188040d-6c67-4c5b-b112-36a304b66dad . Pro příjem této deklarace musí vaše aplikace požádat o profile obor.
unique_name Řetězec Poskytuje lidsky čitelnou hodnotu, která identifikuje subjekt tokenu. Tato hodnota je v jakémkoli daném časovém okamžiku jedinečná, ale když je možné znovu použít e-maily a jiné identifikátory, tato hodnota se může znovu zobrazit na jiných účtech. V takovém případě by tato hodnota měla být použita pouze pro účely zobrazení. Vydány jenom v 1.0 id_tokens .
uti Neprůhledný řetězec Interní deklarace identity, kterou Azure používá k opětovnému ověření tokenů. By měla být ignorována.
ver Řetězec, buď 1,0 nebo 2,0 Určuje verzi id_token.
hasgroups Logická hodnota Pokud je přítomen, vždy true, označuje uživatele alespoň v jedné skupině. Používá se místo deklarace identity skupin pro JWTs v implicitních tocích toků, pokud by deklarace identity celé skupiny rozšířila fragment identifikátoru URI za omezení délky adresy URL (aktuálně 6 nebo více skupin). určuje, že klient musí použít rozhraní Microsoft Graph API k určení skupin uživatelů ( 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 jsou pro něj ještě moc velké, budou zahrnuty odkazy na seznam úplných skupin pro uživatele. Pro JWTs jako distribuovanou deklaraci protokolu SAML jako nové deklarace místo groups deklarace identity.

Ukázková hodnota JWT:
"groups":"src1"
"_claim_sources: "src1" : { "endpoint" : "https://graph.microsoft.com/v1.0/users/{userID}/getMemberObjects" }

Další informace najdete v tématu neoprávněná deklarace skupin.

Spolehlivá identifikace uživatele (subjektu a ID objektu) pomocí deklarací identity

Když identifikujete uživatele (řekněme, že je vyhledáte v databázi nebo rozhodujete, jaká oprávnění mají), je důležité používat informace, které zůstanou v čase konstantní a jedinečné. Starší verze aplikací 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 mohou v průběhu času měnit a lze je také znovu použít v čase. Například když zaměstnanec změní jméno nebo zaměstnanec má přiřazenou e-mailovou adresu, která odpovídá předchozímu zaměstnanci, už nepředstavuje zaměstnance. Proto je důležité , aby vaše aplikace nepoužívala uživatelsky čitelné údaje k identifikaci uživatelsky čitelného čtení, obecně znamená, že ho někdo přečte a chcete ho změnit. Místo toho použijte deklarace identity poskytované standardem OIDC nebo rozšíření deklarací identity poskytovaných Microsoftem sub a oid deklaracemi identity.

Aby bylo možné správně ukládat informace pro jednotlivé uživatele, použití sub nebo oid samostatné (což jsou jedinečné identifikátory GUID), které se tid používají pro směrování nebo horizontálního dělení v případě potřeby. Pokud potřebujete sdílet data napříč službami, oid + tid je nejlepší, protože všechny aplikace získají stejné oid a tid deklarace identity pro daného uživatele v daném tenantovi. subdeklarace v Microsoft identity platform je "párové" – je jedinečné na základě kombinace příjemce, tenanta a uživatele tokenu. Proto dvě aplikace, které vyžadují tokeny ID pro daného uživatele, obdrží různé sub deklarace identity, ale stejné oid deklarace identity pro tohoto 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říč klienty. Nebude fungovat, protože oid sub deklarace identity pro uživatele a změny v klientech navrhují, aby aplikace nemohly sledovat uživatele napříč klienty.

Hostované scénáře, kdy je uživatel doma v jednom tenantovi a ověřuje se v jiné, by měl uživatele zacházet, jako by se mu úplně zavedli. Vaše dokumenty a oprávnění v tenantovi contoso by se neměly uplatňovat v tenantovi Fabrikam. To je důležité, aby se zabránilo náhodnému úniku dat napříč klienty a vynucování životního cyklu dat. Vyřazení hostů z klienta by mělo také odebrat jejich přístup k datům, která v tomto tenantovi vytvořili.

Nadlimitní deklarace skupin

Aby se zajistilo, že velikost tokenu nepřekračuje limity velikosti hlavičky HTTP, Azure AD omezí počet ID objektů, které v groups deklaraci identity zahrnuje. Pokud je uživatel členem více skupin, než je limit překročení (150 pro tokeny SAML, 200 pro tokeny JWT), služba Azure AD negeneruje v tokenu deklaraci identity skupin. místo toho zahrnuje nadlimitní deklaraci identity v tokenu, která označuje aplikaci pro dotazování rozhraní Microsoft Graph API k načtení členství uživatele ve skupině.

{
  ...
  "_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 jednu hodinu – po jedné hodině musí klient získat nový token ID.

Můžete upravit životnost tokenu ID, abyste mohli řídit, jak často aplikace vyprší aplikační relaci, a jak často vyžaduje, aby uživatel znovu provedl ověření v tichém nebo interaktivním prostředí. Další informace najdete v tématu konfigurovatelné životnosti tokenů.

Ověřování tokenu ID

Ověřování tokenu ID se podobá prvnímu kroku ověřování přístupového tokenu. Klient může ověřit, zda byl token zfalšován. Může taky ověřit vystavitele, aby se zajistilo, že se token znovu odeslal na správný Vystavitel. Vzhledem k tomu, že tokeny ID jsou vždycky token JWT, existuje mnoho knihoven, aby bylo možné tyto tokeny ověřit – doporučujeme místo toho použít jeden z nich. Všimněte si, že tokeny ID by měly ověřovat jenom důvěrné klienty (s tajným klíčem). Veřejné aplikace (kód spuštěný zcela na zařízení nebo v síti, které neovládáte jako uživatel nebo domácí síť), nepřinese ověření tokenu ID. Je to proto, že uživatel se zlými úmysly může zachytit a upravit klíče používané k ověření tokenu.

Postup ručního ověření tokenu najdete v podrobnostech v tématu ověřování přístupového tokenu. Po ověření podpisu tokenu by měly být v tokenu ID ověřeny následující deklarace JWT. Tyto deklarace můžou být taky ověřené vaší knihovnou ověření tokenu:

  • Časová razítka iat : nbf exp Časová razítka, a musí všechny přecházet před aktuálním časem nebo po něm.
  • Cílová skupina: aud deklarace identity by měla odpovídat ID aplikace pro vaši aplikaci.
  • Hodnota nonce: nonce deklarace v datové části se musí shodovat s parametrem nonce předaným do koncového bodu/Authorize během počátečního požadavku.

Další kroky