Referens för ID-tokenanspråk

ID-token är JSON-webbtoken (JWT). ID-token v1.0 och v2.0 har skillnader i den information som de har. Versionen baseras på slutpunkten där den begärdes. Även om befintliga program troligen använder Azure AD v1.0-slutpunkten bör nya program använda v2.0-slutpunkten.

  • v1.0: https://login.microsoftonline.com/common/oauth2/authorize
  • v2.0: https://login.microsoftonline.com/common/oauth2/v2.0/authorize

Alla JWT-anspråk som anges i följande avsnitt visas i både v1.0- och v2.0-token om inget annat anges. ID-token består av en rubrik, nyttolast och signatur. Rubriken och signaturen används för att verifiera tokens äkthet, medan nyttolasten innehåller den information om användaren som begärs av klienten.

Rubrikanspråk

I följande tabell visas rubrikanspråk som finns i ID-token.

Anspråk Format beskrivning
typ Sträng – alltid "JWT" Anger att token är en JWT-token.
alg String Anger den algoritm som användes för att signera token. Till exempel: "RS256"
kid String Anger tumavtrycket för den offentliga nyckeln som kan användas för att verifiera tokens signatur. Genereras i både v1.0- och v2.0-ID-token.
x5t String Fungerar på samma sätt (används och är värde) som kid. x5t är ett äldre anspråk som endast genereras i v1.0-ID-token i kompatibilitetssyfte.

Nyttolastanspråk

I följande tabell visas de anspråk som finns i de flesta ID-token som standard (förutom där det anges). Din app kan dock använda valfria anspråk för att begära fler anspråk i ID-token. Valfria anspråk kan sträcka sig från anspråket groups till information om användarens namn.

Anspråk Format beskrivning
aud Sträng, ett app-ID-GUID Identifierar den avsedda mottagaren av token. I id_tokensär målgruppen appens program-ID som tilldelats din app i Azure-portalen. Det här värdet ska verifieras. Token bör avvisas om den inte matchar appens program-ID.
iss String, en utfärdar-URI Identifierar utfärdaren eller "auktoriseringsservern" som konstruerar och returnerar token. Den identifierar också klientorganisationen som användaren autentiserades för. Om token har utfärdats av v2.0-slutpunkten slutar URI:n i /v2.0. DET GUID som anger att användaren är en konsumentanvändare från ett Microsoft-konto är 9188040d-6c67-4c5b-b112-36a304b66dad. Din app bör använda GUID-delen av anspråket för att begränsa den uppsättning klienter som kan logga in på appen, om tillämpligt.
iat int, en Unix-tidsstämpel Anger när autentiseringen för token inträffade.
idp Sträng, vanligtvis en STS-URI Registrerar den identitetsprovider som har autentiserat subjektet för token. Det här värdet är identiskt med värdet för utfärdaranspråket om inte användarkontot inte finns i samma klientorganisation som utfärdaren – gäster, till exempel. Om anspråket inte finns innebär det att värdet iss för kan användas i stället. För personliga konton som används i en organisationskontext (till exempel ett personligt konto som bjuds in till en klientorganisation) kan anspråket idp vara "live.com" eller en STS-URI som innehåller Microsoft-kontoklientorganisationen 9188040d-6c67-4c5b-b112-36a304b66dad.
nbf int, en Unix-tidsstämpel Identifierar den tid innan JWT inte kan accepteras för bearbetning.
exp int, en Unix-tidsstämpel Identifierar förfallotiden på eller efter vilken JWT inte kan accepteras för bearbetning. Under vissa omständigheter kan en resurs avvisa token före den här tiden. Om till exempel en ändring i autentisering krävs eller om ett tokenåterkallning har identifierats.
c_hash String Kodhash ingår endast i ID-token när ID-token utfärdas med en OAuth 2.0-auktoriseringskod. Den kan användas för att verifiera autenticiteten för en auktoriseringskod. Information om hur du gör den här valideringen finns i OpenID Anslut-specifikationen. Det här anspråket returneras inte på ID-token från slutpunkten /token.
at_hash String Hashen för åtkomsttoken ingår endast i ID-token när ID-token utfärdas från /authorize slutpunkten med en OAuth 2.0-åtkomsttoken. Den kan användas för att verifiera autenticiteten för en åtkomsttoken. Information om hur du gör den här valideringen finns i OpenID Anslut-specifikationen. Det här anspråket returneras inte på ID-token från /token slutpunkten.
aio Ogenomskinlig sträng Ett internt anspråk som används för att registrera data för återanvändning av token. Bör ignoreras.
preferred_username String Det primära användarnamnet som representerar användaren. Det kan vara en e-postadress, ett telefonnummer eller ett allmänt användarnamn utan ett angivet format. Dess värde kan ändras med tiden. Eftersom det är föränderligt kan det här värdet inte användas för att fatta auktoriseringsbeslut. Den kan användas för användarnamnstips och i användargränssnittet som ett användarnamn. Omfånget profile krävs för att ta emot det här anspråket. Finns endast i v2.0-token.
email String Finns som standard för gästkonton som har en e-postadress. Din app kan begära e-postanspråket för hanterade användare (från samma klientorganisation som resursen) med hjälp av det valfria anspråketemail. Det här värdet är inte garanterat korrekt och kan ändras med tiden. Använd den aldrig för auktorisering eller för att spara data för en användare. Om du behöver en adresserbar e-postadress i din app kan du begära dessa data direkt från användaren genom att använda det här anspråket som ett förslag eller i förväg i ditt användargränssnitt. På v2.0-slutpunkten kan din app också begära email OpenID-Anslut omfång – du behöver inte begära både det valfria anspråket och omfånget för att hämta anspråket.
name String Anspråket name ger ett läsbart värde som identifierar tokens ämne. Värdet är inte garanterat unikt, det kan ändras och bör endast användas i visningssyfte. Omfånget profile krävs för att ta emot det här anspråket.
nonce String Nonce matchar parametern som ingår i den ursprungliga auktoriseringsbegäran till IDP:n. Om den inte matchar bör ditt program avvisa token.
oid Sträng, ett GUID Den oföränderliga identifieraren för ett objekt, i det här fallet ett användarkonto. Det här ID:t identifierar användaren unikt mellan program – två olika program som loggar in samma användare får samma värde i anspråket oid . Microsoft Graph returnerar detta ID som id egenskap för ett användarkonto. oid Eftersom tillåter flera appar att korrelera användare krävs omfånget för att ta emot det här anspråketprofile. Om det finns en enskild användare i flera klientorganisationer innehåller användaren ett annat objekt-ID i varje klientorganisation – de betraktas som olika konton, även om användaren loggar in på varje konto med samma autentiseringsuppgifter. Anspråket oid är ett GUID och kan inte återanvändas.
roles Matris med strängar Den uppsättning roller som har tilldelats till den användare som loggar in.
rh Ogenomskinlig sträng Ett internt anspråk som används för att återanvända token. Bör ignoreras.
sub String Ämnet för informationen i token. Till exempel användaren av en app. Det här värdet är oföränderligt och kan inte omtilldelas eller återanvändas. Ämnet är en parvis identifierare och är unik för ett program-ID. Om en enskild användare loggar in i två olika appar med två olika klient-ID:t får dessa appar två olika värden för ämnesanspråket. Du kanske eller kanske inte vill ha två värden beroende på din arkitektur och sekretesskrav.
tid Sträng, ett GUID Representerar den klientorganisation som användaren loggar in på. För arbets- och skolkonton är GUID det oföränderliga klientorganisations-ID för organisationen som användaren loggar in på. För inloggningar till den personliga Microsoft-kontoklientorganisationen (tjänster som Xbox, Teams for Life eller Outlook) är 9188040d-6c67-4c5b-b112-36a304b66dadvärdet .
unique_name String Finns endast i v1.0-token. Innehåller ett läsbart värde som identifierar subjektet för token. Det här värdet är inte garanterat unikt i en klientorganisation och bör endast användas i visningssyfte.
uti String Tokenidentifieraranspråk, motsvarande jti I JWT-specifikationen. Unik identifierare per token som är skiftlägeskänslig.
ver Sträng, antingen 1.0 eller 2.0 Anger versionen av ID-token.
hasgroups Booleskt Om det finns, alltid sant, anges användaren i minst en grupp. Används i stället för gruppanspråket för JWT:er i implicita beviljandeflöden när det fullständiga gruppanspråket utökar URI-fragmentet utöver URL-längdgränserna (för närvarande sex eller fler grupper). Anger att klienten ska använda Microsoft Graph API för att fastställa användarens grupper (https://graph.microsoft.com/v1.0/users/{userID}/getMemberObjects).
groups:src1 JSON-objekt För tokenbegäranden som inte är begränsade i längd (se hasgroups) men fortfarande för stora för token inkluderas en länk till listan med fullständiga grupper för användaren. För JWTs som ett distribuerat anspråk för SAML som ett nytt anspråk i stället för anspråket groups .

Exempel på JWT-värde:
"groups":"src1"
"_claim_sources: "src1" : { "endpoint" : "https://graph.microsoft.com/v1.0/users/{userID}/getMemberObjects" }

Mer information finns i Överförbrukningsanspråk för grupper.

Använda anspråk för att på ett tillförlitligt sätt identifiera en användare

När du identifierar en användare är det viktigt att använda information som förblir konstant och unik över tid. Äldre program använder ibland fält som e-postadress, telefonnummer eller UPN. Alla dessa fält kan ändras över tid och kan också återanvändas över tid. Till exempel när en anställd ändrar sitt namn, eller om en anställd får en e-postadress som matchar en tidigare, inte längre presentera medarbetare. Ditt program får inte använda läsbara data för att identifiera en användare – mänsklig läsbar innebär i allmänhet att någon kan läsa den och vill ändra den. Använd i stället anspråken som tillhandahålls av OIDC-standarden eller tilläggsanspråken som tillhandahålls av Microsoft – anspråken sub och oid .

Om du vill lagra information per användare korrekt använder sub du eller oid ensam (som GUID:er är unika) med tid som används för routning eller horisontell partitionering om det behövs. Om du behöver dela data mellan tjänster oid och tid är bäst eftersom alla appar får samma oidtid och anspråk för en användare som agerar i en klientorganisation. Anspråket sub är ett parvis värde som är unikt. Värdet baseras på en kombination av tokenmottagaren, klientorganisationen och användaren. Två appar som begär ID-token för en användare får olika sub anspråk, men samma oid anspråk för den användaren.

Kommentar

Använd inte anspråket idp för att lagra information om en användare i ett försök att korrelera användare mellan klienter. Det fungerar inte, eftersom anspråken oidsub och för en användare ändras mellan klienter, avsiktligt, för att säkerställa att program inte kan spåra användare mellan klienter.

Gästscenarier, där en användare finns i en klientorganisation och autentiseras i en annan, bör behandla användaren som om användaren är en helt ny användare i tjänsten. Dina dokument och behörigheter i en klientorganisation bör inte gälla i en annan klientorganisation. Den här begränsningen är viktig för att förhindra oavsiktligt dataläckage mellan klienter och tillämpning av datalivscykler. Att ta bort en gäst från en klientorganisation bör också ta bort deras åtkomst till de data som de skapade i klientorganisationen.

Överförbrukningsanspråk för grupper

För att säkerställa att tokenstorleken inte överskrider storleksgränserna för HTTP-huvuden är antalet objekt-ID:t som ingår i anspråket groups begränsat. Om en användare är medlem i fler grupper än överförbrukningsgränsen (150 för SAML-token, 200 för JWT-token) ingår inte gruppanspråket i token. I stället innehåller den ett överförbrukningsanspråk i token som anger för programmet att fråga Microsoft Graph-API:et för att hämta användarens gruppmedlemskap.

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

Nästa steg