Share via


Op rollen gebaseerd toegangsbeheer gebruiken in uw Node.js-webtoepassing

Van toepassing op:Witte cirkel met een grijs X-symbool.Externe tenantsGroene cirkel met een wit vinkje.van werknemers (meer informatie)

Op rollen gebaseerd toegangsbeheer (RBAC) is een mechanisme voor het afdwingen van autorisatie in toepassingen. Microsoft Entra Externe ID kunt u toepassingsrollen voor uw toepassing definiëren en deze rollen toewijzen aan gebruikers en groepen. De rollen die u aan een gebruiker of groep toewijst, definiëren hun toegangsniveau tot de resources en bewerkingen in uw toepassing. Wanneer een externe id een beveiligingstoken voor een geverifieerde gebruiker uitgeeft, bevat deze de namen van de rollen die u aan de gebruiker of groep hebt toegewezen in de rolclaim van het beveiligingstoken.

U kunt uw externe tenant ook configureren om de groepslidmaatschappen van de gebruiker te retourneren. Ontwikkelaars kunnen vervolgens beveiligingsgroepen gebruiken om RBAC in hun toepassingen te implementeren, waarbij de lidmaatschappen van de gebruiker in specifieke groepen worden geïnterpreteerd als hun rollidmaatschappen.

Zodra u gebruikers en groepen aan rollen toewijst, wordt de rolclaim verzonden in uw beveiligingstoken. Als u de groepslidmaatschapsclaim echter wilt verzenden in beveiligingstokens, hebt u extra configuratie nodig in de tenant van uw klant.

In dit artikel leert u hoe u gebruikersrollen of groepslidmaatschap of beide als claims in een beveiligingstoken voor uw Node.js-web-app kunt ontvangen.

Vereisten

Groepen en rollenclaims ontvangen in uw Node.js-web-app

Zodra u de tenant van uw klant hebt geconfigureerd, kunt u uw rollen en groepenclaims ophalen in uw client-app. De claims voor rollen en groepen zijn beide aanwezig in het id-token en het toegangstoken, maar uw client-app hoeft alleen te controleren op deze claims in het id-token om autorisatie aan de clientzijde te implementeren. De API-app kan deze claims ook ophalen wanneer het toegangstoken wordt ontvangen.

U controleert de claimwaarde van uw rollen , zoals wordt weergegeven in het volgende codefragmentvoorbeeld:

const msal = require('@azure/msal-node');
const { msalConfig, TENANT_SUBDOMAIN, REDIRECT_URI, POST_LOGOUT_REDIRECT_URI } = require('../authConfig');

...
class AuthProvider {
...
    async handleRedirect(req, res, next) {
        const authCodeRequest = {
            ...req.session.authCodeRequest,
            code: req.body.code, // authZ code
            codeVerifier: req.session.pkceCodes.verifier, // PKCE Code Verifier
        };
    
        try {
            const msalInstance = this.getMsalInstance(this.config.msalConfig);
            const tokenResponse = await msalInstance.acquireTokenByCode(authCodeRequest, req.body);
            let roles = tokenResponse.idTokenClaims.roles;
        
            //Check roles
            if (roles && roles.includes("Orders.Manager")) {
                //This user can view the ID token claims page.
                res.redirect('/id');
            }
            
            //User can only view the index page.
            res.redirect('/');
        } catch (error) {
            next(error);
        }
    }
...
}

Als u een gebruiker aan meerdere rollen toewijst, bevat de roles tekenreeks alle rollen, gescheiden door een komma, zoals Orders.Manager,Store.Manager,.... Zorg ervoor dat u uw toepassing bouwt om de volgende voorwaarden te verwerken:

  • afwezigheid van roles claim in het token
  • gebruiker is niet toegewezen aan een rol
  • meerdere waarden in de roles claim wanneer u een gebruiker toewijst aan meerdere rollen

U kunt ook de claimwaarde van uw groepen controleren, zoals wordt weergegeven in het volgende codefragmentvoorbeeld:

const tokenResponse = await msalInstance.acquireTokenByCode(authCodeRequest, req.body);
let groups = tokenResponse.idTokenClaims.groups;

De waarde van de groepsclaim is de object-id van de groep. Als een gebruiker lid is van meerdere groepen, bevat de groups tekenreeks alle groepen gescheiden door een komma, zoals 7f0621bc-b758-44fa-a2c6-...,6b35e65d-f3c8-4c6e-9538-....

Notitie

Als u een door Microsoft Entra ingebouwde gebruikersrollen of ook wel directoryrollen genoemd, toewijst, worden deze rollen weergegeven in de groepsclaim van het beveiligingstoken.

Overschrijding van groepen afhandelen

Om ervoor te zorgen dat de grootte van het beveiligingstoken de limiet voor de HTTP-headergrootte niet overschrijdt, beperkt externe id het aantal object-id's dat het in de groepsclaim bevat. De overschrijdingslimiet is 150 voor SAML-tokens en 200 voor JWT-tokens. Het is mogelijk om deze limiet te overschrijden als een gebruiker deel uitmaakt van veel groepen en u aanvraagt voor alle groepen.

Groepsoverschrijding in uw broncode detecteren

Als u geen groepsoverschrijdingen kunt voorkomen, moet u deze afhandelen in uw code. Wanneer u de overschrijdingslimiet overschrijdt, bevat het token niet de groepsclaim . In plaats daarvan bevat het token een _claim_names claim die een groepslid van de matrix bevat. U moet dus het bestaan van _claim_names claim controleren om te vertellen dat er een overschrijding is opgetreden. In het volgende codefragment ziet u hoe u een groepsoverschrijding kunt detecteren:

const tokenResponse = await msalInstance.acquireTokenByCode(authCodeRequest, req.body);

if(tokenResponse.idTokenClaims.hasOwnProperty('_claim_names') && tokenResponse.idTokenClaims['_claim_names'].hasOwnProperty('groups')) {
    //overage has occurred
}

Gebruik de instructies in het artikel Groepsclaims en app-rollen configureren in tokens voor informatie over hoe aanvragen voor de volledige lijst met groepen worden aangevraagd wanneer er sprake is van overschrijding van groepen.

Groepen en rollen gebruiken in uw Node.js-web-app

In de client-app kunt u controleren of een aangemelde gebruiker de benodigde rol(en) heeft voor toegang tot een beveiligde route of het aanroepen van een API-eindpunt. U kunt dit doen door de roles claim in het id-token te controleren. Als u deze beveiliging in uw app wilt implementeren, kunt u beveiligingen bouwen met behulp van een aangepaste middleware.

In uw service-app (API-app) kunt u ook de API-eindpunten beveiligen. Nadat u het toegangstoken hebt gevalideerd dat door de client-app is verzonden, kunt u controleren op de rollen of groepenclaims in de nettoladingclaims van het toegangstoken.

Gebruik ik app-rollen of -groepen?

In dit artikel hebt u geleerd dat u app-rollen of -groepen kunt gebruiken om RBAC in uw toepassing te implementeren. De voorkeursbenadering is het gebruik van app-rollen, omdat het meer gedetailleerd beheer biedt bij het beheren van toegang/machtigingen op toepassingsniveau. Zie Een benadering kiezen voor meer informatie over het kiezen van een benadering.

Volgende stappen