Groepsclaims en app-rollen configureren in tokens

Als u groepsclaims en app-rollen in tokens configureert, ziet u hoe u uw apps configureert met app-roldefinities en beveiligingsgroepen toewijst aan app-rollen, zodat u de flexibiliteit en controle kunt verbeteren terwijl de beveiliging van toepassingen met minimale bevoegdheden wordt verhoogd.

Microsoft Entra ID ondersteunt het verzenden van de toegewezen beveiligingsgroepen van een gebruiker, Microsoft Entra-directoryrollen en distributiegroepen als claims in een token. U kunt deze methode gebruiken om autorisatie in apps te stimuleren. Microsoft Entra ID beperkt echter de ondersteuning van beveiligingsgroepen in een token door de grootte van het token. Als de gebruiker lid is van te veel groepen, zijn er geen beveiligingsgroepen in het token.

In dit artikel leert u een alternatieve benadering voor het ophalen van gebruikersgegevens in tokens met behulp van microsoft Entra-beveiligingsgroepondersteuning. In plaats daarvan configureert u uw apps met app-roldefinities en wijst u beveiligingsgroepen toe aan app-rollen. Deze best practice voor Zero Trust-ontwikkelaars verbetert de flexibiliteit en controle en verhoogt de beveiliging van toepassingen met minimale bevoegdheden.

U kunt groepsclaims configureren in tokens die u in uw toepassingen kunt gebruiken voor autorisatie. Houd er rekening mee dat groepsinformatie in het token alleen actueel is wanneer u het token ontvangt. Groepsclaims ondersteunen twee hoofdpatronen:

  • Groepen die worden geïdentificeerd door hun OID-kenmerk (Microsoft Entra Object Identifier).
  • Groepen die worden geïdentificeerd door het sAMAccountName kenmerk of GroupSID het kenmerk voor door Active Directory gesynchroniseerde groepen en gebruikers.

Groepslidmaatschap kan autorisatiebeslissingen stimuleren. In het volgende voorbeeld ziet u bijvoorbeeld enkele claims in een token. U kunt groepsclaims en rollen toevoegen aan id- of toegangstokens.

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

De groups claimmatrix bestaat uit de id's van de groepen waartoe deze gebruiker lid is. De wids matrix bestaat uit de id's van de Microsoft Entra-rollen die aan deze gebruiker zijn toegewezen. cf1c38e5-3621-4004-a7cb-879624dced7c Hier ziet u dat de toegewezen rollen van deze gebruiker toepassingsontwikkelaar en standaardlid bevatten, zoals 3b2b0c93-acd8-4208-8eba-7a48db1cd4c0 wordt aangegeven.

Uw app kan autorisatiebeslissingen nemen op basis van de aanwezigheid of afwezigheid van deze claims en hun waarden. Zie ingebouwde Microsoft Entra-rollen voor een lijst met waarden voor de wids claim.

Als u de groups en wids claims wilt toevoegen aan uw tokens, selecteert u Alle groepen, zoals wordt weergegeven in het volgende voorbeeld van het App-registraties | Tokenconfiguratie | Optionele claims | Claimscherm Groepen bewerken.

Schermopname van het scherm Groepsclaims bewerken met geselecteerde groepstypen: Groepen die zijn toegewezen aan de toepassing.

Groepsoverschrijdingen

Wanneer u alle groepen in uw token aanvraagt, zoals wordt weergegeven in het bovenstaande voorbeeld, kunt u niet vertrouwen op het token met de groups claim in uw token. Er gelden groottelimieten voor tokens en claims groups , zodat ze niet te groot worden. Wanneer de gebruiker lid is van te veel groepen, moet uw app het groepslidmaatschap van de gebruiker ophalen uit Microsoft Graph. De limieten voor groepen in een groups claim zijn:

  • 200 groepen voor JWT-tokens.
  • 150 groepen voor SAML-tokens.
  • Zes groepen bij het gebruik van de impliciete stroom (bijvoorbeeld met behulp van ASP.NET kern waarmee id-tokens worden ontvangen via het impliciete stroomgedeelte van een hybride stroom).
    • Impliciete stroom wordt niet meer aanbevolen voor web-apps met één pagina.
    • Impliciete stroom kan alleen worden gebruikt in web-apps voor het id-token, nooit het toegangstoken, in een hybride OAuth2-stroom.

Als u OpenID Verbinding maken of OAuth2 gebruikt, kunt u maximaal 200 groepen in uw token hebben. Als u SAML gebruikt, kunt u slechts 150 groepen hebben, omdat SAML-tokens groter zijn dan OAuth2 en OpenID Verbinding maken tokens. Als u de impliciete stroom gebruikt, is de limiet zes omdat deze antwoorden worden weergegeven in de URL. In al deze gevallen ziet u in plaats van een groups claim een indicatie (ook wel een groepsoverschrijding genoemd) die aangeeft dat de gebruiker lid is van te veel groepen die in uw token passen.

In het volgende tokenvoorbeeld, voor een OpenID-verbinding of OAuth2, JSON-webtoken (JWT), wordt er geen groups claim weergegeven als de gebruiker lid is van te veel groepen. In plaats daarvan is er een _claim_names claim die een groups lid van de matrix bevat.

Schermopname van een voorbeeldtoken met een query van Azure AD Graph.

In het bovenstaande tokenvoorbeeld ziet u dat de groups claim moet worden toegewezen aan src1. In theorie zou je dan naar de _claim_sources claim zoeken en vervolgens het src1 lid vinden. Hier vindt u de Graph-query die u zou gebruiken om het groepslidmaatschap op te halen. Er is echter een probleem met wat u ziet in de voorbeeldquery van Graph. Het gaat naar Azure AD Graph (wat Microsoft afkeurt), dus gebruik deze niet.

Impliciete stroomoverschrijdingsindicatie wordt uitgevoerd met een hasgroups claim in plaats van de groups claim.

Laat uw app de claim controleren om de groups juiste autorisatie te garanderen met behulp van groepslidmaatschap. Als deze aanwezig is, gebruikt u deze claim om het groepslidmaatschap van de gebruiker te bepalen. Als er geen groups claim is, controleert u op het bestaan van een hasgroups claim of een _claim_names claim met een groups lid van de matrix. Als een van deze claims aanwezig is, is de gebruiker lid van te veel groepen voor het token. In dit geval moet uw app Microsoft Graph gebruiken om het groepslidmaatschap voor de gebruiker te bepalen. Zie Lijst met lidmaatschappen van een gebruiker (direct en transitief) om alle groepen te vinden, zowel direct als transitief, waarvan de gebruiker lid is.

Als uw toepassing realtime informatie over groepslidmaatschap vereist, gebruikt u Microsoft Graph om het groepslidmaatschap te bepalen. Houd er rekening mee dat de informatie in het token dat u ontvangt, alleen up-to-date is op het moment dat u Microsoft Graph aanroept.

Zie het volgende voorbeeld van het App-registraties | Tokenconfiguratie | Optionele claimscherm | Groepen bewerken. Een manier om te voorkomen dat een groepsoverschrijdingsclaim wordt bereikt, is door groepen te selecteren die zijn toegewezen aan de toepassing in het scherm Groepen claim bewerken in plaats van Alle groepen.

Schermopname van het scherm Groepsclaims bewerken met geselecteerde groepstypen: Beveiligingsgroepen, Directory-rollen en Alle groepen.

Wanneer u Groepen selecteert die zijn toegewezen aan de toepassing, wordt een groep opgenomen in de groups claim als aan de volgende voorwaarden wordt voldaan:

Vanaf de publicatie van dit artikel biedt de optie Groepen die zijn toegewezen aan de toepassing geen ondersteuning voor indirect lidmaatschap. Voor groepstoewijzing is minimaal een licentie op P1-niveau vereist. Een gratis tenant kan geen groepen toewijzen aan een toepassing.

Groepen en app-rollen

Een andere manier om het probleem met groepsoverschrijding te voorkomen, is dat de app app-rollen definieert die gebruikers en groepen toestaan als lidtypen. Zoals wordt weergegeven in het volgende voorbeeld van het scherm App-registraties | App-rollen | App-rol maken, selecteert u Gebruikers/groepen voor toegestane ledentypen.

Schermopname van het scherm App-rol maken met toegestane ledentypen: Gebruikers/groepen.

Nadat de app-rol is gemaakt in de registratie van de app, kunnen IT-professionals gebruikers en groepen toewijzen aan de rol. Uw app krijgt een roles claim in uw token (id-token voor app, toegangstoken voor API's) met alle toegewezen rollen van de aangemelde gebruiker, zoals wordt weergegeven in het volgende tokenvoorbeeld.

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

Vergeet niet dat uw toepassing de volgende voorwaarden afhandelt:

  • afwezigheid van roles claim
  • gebruiker is niet toegewezen aan een rol
  • meerdere waarden in de roles claim wanneer de gebruiker meerdere toegewezen rollen heeft

Wanneer u app-rollen maakt waarmee gebruikers en groepen als leden worden toegestaan, definieert u altijd een basislijngebruikersrol zonder verhoogde autorisatierollen. Wanneer een enterprise-app-configuratie toewijzing vereist, kunnen alleen gebruikers met directe toewijzing aan een toepassing of lidmaatschap van een groep die aan de app is toegewezen, de app gebruiken.

Als uw app app-rollen heeft gedefinieerd die gebruikers en groepen als leden toestaan, moet een van de gedefinieerde app-rollen deel uitmaken van de toewijzing van de gebruiker of groep aan de app wanneer een gebruiker of groep aan de app is toegewezen. Als uw app alleen verhoogde rollen (zoals admin) voor de app heeft gedefinieerd, krijgen alle gebruikers en groepen de beheerdersrol toegewezen. Wanneer u een basisrol definieert (zoals user), kunnen gebruikers en groepen die aan de app zijn toegewezen, de basisgebruikersrol toewijzen.

Naast het vermijden van groepsoverschrijdingsclaims, hoeft u geen rollen te gebruiken tussen een groeps-id of -naam en wat dit betekent in uw toepassing. Uw code kan bijvoorbeeld zoeken naar de beheerdersrolclaim in plaats van door groepen in de groups claims te doorlopen en te bepalen welke groeps-id's de beheerdersfunctionaliteit moeten hebben toegestaan.

Rollen in uw code verifiëren en gebruiken

Wanneer u app-rollen voor uw app definieert, is het uw verantwoordelijkheid om autorisatielogica voor deze rollen te implementeren. Zie Op rollen gebaseerd toegangsbeheer implementeren in toepassingen voor meer informatie over het implementeren van autorisatielogica in uw apps.

Volgende stappen