Konfigurera gruppanspråk och approller i token

När du konfigurerar gruppanspråk och approller i token visas hur du konfigurerar dina appar med approlldefinitioner och tilldelar säkerhetsgrupper till approller så att du kan förbättra flexibiliteten och kontrollen samtidigt som du ökar programsäkerheten med minsta möjliga behörighet.

Microsoft Entra-ID har stöd för att skicka en användares tilldelade säkerhetsgrupper, Microsoft Entra-katalogroller och distributionsgrupper som anspråk i en token. Du kan använda den här metoden för att skapa auktorisering i appar. Microsoft Entra-ID begränsar dock stöd för säkerhetsgrupper i en token efter tokens storlek. Om användaren är medlem i för många grupper finns det inga säkerhetsgrupper i token.

I den här artikeln får du lära dig en alternativ metod för att hämta användarinformation i token med hjälp av Microsoft Entra-säkerhetsgruppsstöd. I stället konfigurerar du dina appar med approlldefinitioner och tilldelar säkerhetsgrupper till approller. Den här Nolltillit bästa praxis för utvecklare förbättrar flexibiliteten och kontrollen samtidigt som programsäkerheten ökar med minsta möjliga behörighet.

Du kan konfigurera gruppanspråk i token som du kan använda i dina program för auktorisering. Kom ihåg att gruppinformationen i token endast är aktuell när du tar emot token. Gruppanspråk stöder två huvudsakliga mönster:

  • Grupper som identifieras av deras Microsoft Entra-objektidentifierare (OID).
  • Grupper som identifieras med sAMAccountName attributet eller GroupSID för Active Directory-synkroniserade grupper och användare.

Gruppmedlemskap kan driva auktoriseringsbeslut. I följande exempel visas till exempel vissa anspråk i en token. Du kan lägga till gruppanspråk och roller i antingen ID eller åtkomsttoken.

"aud": "e18c04b1-4868-4b93-93d1-8d71f17ab99b", 
"iss": "https://login.microsoftonline.com/833ced3d-cb2e-41de-92f1-29e2af035ddc/v2.0", 
"iat": 1669657224, "nbf": 1669657224, "exp": 1669661124, 
"groups": [ 
   "0760b6cf-170e-4a14-91b3-4b78e0739963", 
   "3b2b0c93-acd8-4208-8eba-7a48db1cd4c0" 
 ],
"oid": "cb7eda1b-d09a-40ae-b8bb-37836ebc6abd",
"sub": "3OBtLXUC2ZrN_ADLNjW9X4o0lcd61py7lgHw3Skh77s",
"tid": "833ced3d-cb2e-41ce-92f1-29e2af035ddc", 
"ver": "2.0", 
"wids": [ 
   "cf1c38e5-3621-4004-a7cb-879624dced7c", 
   "b79fbf4d-3ef9-4689-8143-76b194e85509" 
 ]

Anspråksmatrisen groups består av ID:t för de grupper som användaren är medlem i. Matrisen wids består av ID:t för De Microsoft Entra-roller som tilldelats den här användaren. cf1c38e5-3621-4004-a7cb-879624dced7c Här visar att den här användarens tilldelade roller inkluderar Programutvecklare och standardmedlem enligt 3b2b0c93-acd8-4208-8eba-7a48db1cd4c0 indikerar.

Din app kan fatta auktoriseringsbeslut baserat på förekomsten eller frånvaron av dessa anspråk och deras värden. En lista med värden för anspråket wids finns i Inbyggda Roller i Microsoft Entra.

Om du vill lägga till anspråken och till dina token väljer du Alla grupper enligt följande exempel på Appregistreringar | Token-konfiguration | Valfria anspråk | Redigera grupper anspråksskärmen.widsgroups

Skärmbild av skärmen Redigera gruppanspråk som visar valda grupptyper: Grupper som tilldelats till programmet.

Gruppöverförbrukning

När du begär alla grupper i din token enligt ovanstående exempel kan du inte förlita dig på att token har anspråket groups i din token. Det finns storleksbegränsningar för token och groups anspråk så att de inte blir för stora. När användaren är medlem i för många grupper måste appen hämta användarens gruppmedlemskap från Microsoft Graph. Gränserna för grupper i ett groups anspråk är:

  • 200 grupper för JWT-token.
  • 150 grupper för SAML-token.
  • Sex grupper när du använder det implicita flödet (till exempel med ASP.NET kärna som hämtar ID-token via den implicita flödesdelen i ett hybridflöde).
    • Implicit flöde rekommenderas inte längre för ensideswebbappar.
    • Implicit flöde kan endast användas i webbappar för ID-token, aldrig åtkomsttoken, i ett OAuth2-hybridflöde.

Om du använder OpenID Anslut eller OAuth2 kan du ha upp till 200 grupper i din token. Om du använder SAML kan du bara ha 150 grupper eftersom SAML-token är större än OAuth2- och OpenID-Anslut token. Om du använder det implicita flödet är gränsen sex eftersom dessa svar visas i URL:en. I alla dessa fall ser du i stället för att ha ett groups anspråk en indikation (kallas för gruppöverförbrukning) som anger att användaren är medlem i för många grupper för att få plats i din token.

I följande tokenexempel, för en OpenID-anslutning eller OAuth2, JSON-webbtoken (JWT), kommer det inte att finnas något groups anspråk om användaren är medlem i för många grupper. I stället kommer det att finnas ett _claim_names anspråk som innehåller en groups medlem i matrisen.

Skärmbild av exempeltoken som visar frågan om Azure AD Graph.

I exemplet med ovanstående token ser du att anspråket groups ska mappas till src1. I teorin skulle du leta efter anspråket _claim_sources och sedan hitta src1 medlemmen. Därifrån hittar du den Graph-fråga som du använder för att hämta gruppmedlemskapet. Det finns dock ett problem med det du ser i graph-exempelfrågan. Det går till Azure AD Graph (som Microsoft är inaktuellt), så använd det inte.

Implicit flödesöverförbrukningsindikator görs med ett hasgroups anspråk i stället för anspråket groups .

Om du vill säkerställa korrekt auktorisering med gruppmedlemskap måste du låta din app söka efter anspråket groups . Om det finns använder du det anspråket för att fastställa användarens gruppmedlemskap. Om det inte finns något groups anspråk kontrollerar du om det finns ett hasgroups anspråk eller ett _claim_names anspråk med en groups medlem i matrisen. Om något av dessa anspråk finns är användaren medlem i för många grupper för token. I det här fallet måste din app använda Microsoft Graph för att fastställa gruppmedlemskapet för användaren. Se Lista en användares medlemskap (direkt och transitiv) för att hitta alla grupper, både direkta och transitiva, som användaren är medlem i.

Om ditt program kräver information om gruppmedlemskap i realtid använder du Microsoft Graph för att fastställa gruppmedlemskap. Kom ihåg att informationen i den token som du får endast är uppdaterad när du anropar Microsoft Graph.

Se följande exempel på Appregistreringar | Token-konfigurationEn | Valfria anspråk | Redigera grupper anspråksskärmen. Ett sätt att undvika att träffa ett gruppöverförbrukningsanspråk är att välja Grupper som tilldelats programmetskärmen Redigera grupper i stället för Alla grupper.

Skärmbild av skärmen Redigera gruppanspråk som visar valda grupptyper: Säkerhetsgrupper, Katalogroller och Alla grupper.

När du väljer Grupper som tilldelats programmet inkluderas en grupp i anspråket groups om följande villkor är uppfyllda:

Från och med den här artikelns publikation stöder inte de grupper som tilldelats till programalternativet indirekt medlemskap. Grupptilldelning kräver minst en P1-nivålicens. En kostnadsfri klientorganisation kan inte tilldela grupper till ett program.

Grupper och approller

Ett annat sätt att undvika problemet med gruppöverförbrukning är att appen definierar approller som tillåter användare och grupper som medlemstyper. Som du ser i följande exempel på Appregistreringar | Approller | Skärmen Skapa approll väljer du Användare/grupper för Tillåtna medlemstyper.

Skärmbild av skärmen Skapa approll som visar Tillåtna medlemstyper: Användare/grupper.

Efter att ha skapat approllen i appens registrering kan IT-proffs tilldela användare och grupper till rollen. Din app får ett roles anspråk i din token (ID-token för appen, åtkomsttoken för API:er) med alla inloggade användares tilldelade roller enligt följande tokenexempel.

"aud": "acaf6ce9-81f0-462a-a93d-a314070738d3",
"iss": "https://login.microsoftonline.com/833ced3d-cb2e-41de-92f1-29e2af035ddc/v2.0",
"iat": 1670826509, "nbf": 1670826509, "exp": 1670830409,
"name": "Kyle Marsh",
"oid": "cb7eda1b-d09a-419e-b8bb-37836ebc6abd",
"preferred_username": "kylemar@idfordevs.dev",
"roles": [
 "Approver",
 "Reviewer" 
],
"sub": "dx-4lf-0loB3c3uVrULnZ2VTLuRRWYff0q7-QlIfYU4",
"tid": "833ced3d-cb3e-41de-92f1-29e2af035ddc",

Kom ihåg att låta programmet hantera följande villkor:

  • avsaknad av roles anspråk
  • användaren har inte tilldelats någon roll
  • flera värden i anspråket roles när användaren har flera tilldelade roller

När du skapar approller som tillåter användare och grupper som medlemmar definierar du alltid en baslinjeanvändarroll utan utökade auktoriseringsroller. När en Enterprise App-konfiguration kräver tilldelning kan endast användare med direkt tilldelning till ett program eller medlemskap i en grupp som tilldelats appen använda appen.

Om din app har definierat approller som tillåter användare och grupper som medlemmar måste en av de definierade approllerna vara en del av användarens eller gruppens tilldelning till appen när en användare eller grupp tilldelas till appen. Om din app bara har definierat förhöjda roller (till exempel admin) för appen tilldelas alla användare och grupper administratörsrollen. När du definierar en basroll (till exempel ) kan användare och grupper som usertilldelats till appen tilldelas basanvändarrollen.

Förutom att undvika överförbrukningsanspråk för grupper behöver inte en annan fördel med att använda roller mappa mellan ett grupp-ID eller namn och vad det innebär i ditt program. Din kod kan till exempel söka efter administratörsrollsanspråket i stället för att iterera genom grupper i anspråken groups och bestämma vilka grupp-ID:n som ska tillåtas administratörsfunktionen.

Verifiera och använda roller i koden

När du definierar approller för din app är det ditt ansvar att implementera auktoriseringslogik för dessa roller. Se Implementera rollbaserad åtkomstkontroll i program för att lära dig hur du kan implementera auktoriseringslogik i dina appar.

Nästa steg