Sdílet prostřednictvím


Použití řízení přístupu na základě role ve webové aplikaci Node.js

Platí pro: Bílý kruh se šedým symbolem X. Tenanti pracovních sil – externí tenanti Zelený kruh s bílým symbolem zaškrtnutí (další informace)

Řízení přístupu na základě role (RBAC) je mechanismus pro vynucení autorizace v aplikacích. Microsoft Entra Externí ID umožňuje definovat aplikační role pro vaši aplikaci a přiřadit tyto role uživatelům a skupinám. Role, které přiřadíte uživateli nebo skupině, definují jejich úroveň přístupu k prostředkům a operacím ve vaší aplikaci. Když externí ID vydá token zabezpečení pro ověřeného uživatele, bude obsahovat názvy rolí, které jste přiřadili uživateli nebo skupině v deklaraci identity tokenu zabezpečení.

Můžete také nakonfigurovat externího tenanta tak, aby vrátil členství ve skupinách uživatele. Vývojáři pak můžou pomocí skupin zabezpečení implementovat RBAC ve svých aplikacích, kde se členství uživatele v konkrétních skupinách interpretuje jako jejich členství v rolích.

Po přiřazení uživatelů a skupin k rolím se deklarace identity rolí v tokenu zabezpečení vygeneruje. K vygenerování deklarace členství ve skupinách v tokenech zabezpečení ale potřebujete další konfiguraci v tenantovi zákazníka.

V tomto článku se dozvíte, jak přijímat role uživatelů nebo členství ve skupině nebo obojí jako deklarace identity v tokenu zabezpečení pro vaši webovou aplikaci Node.js.

Požadavky

Příjem deklarací identit skupin a rolí ve webové aplikaci Node.js

Jakmile nakonfigurujete tenanta zákazníka, můžete v klientské aplikaci načíst své role a deklarace identity skupin . Role a deklarace identity skupin se nacházejí v tokenu ID i v přístupovém tokenu, ale vaše klientská aplikace musí tyto deklarace identity v tokenu ID vyhledat, aby implementovaly autorizaci na straně klienta. Aplikace API může tyto deklarace identity načíst také při přijetí přístupového tokenu.

Zkontrolujete hodnotu deklarace identity rolí, jak je znázorněno v následujícím příkladu fragmentu kódu:

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);
        }
    }
...
}

Pokud přiřadíte uživatele k více rolím, roles řetězec obsahuje všechny role oddělené čárkou, například Orders.Manager,Store.Manager,.... Ujistěte se, že sestavíte aplikaci, která bude zpracovávat následující podmínky:

  • roles absence deklarace identity v tokenu
  • uživatel nebyl přiřazen k žádné roli.
  • více hodnot v roles deklaraci identity při přiřazení uživatele k více rolím

Můžete také zkontrolovat hodnotu deklarace identity skupin , jak je znázorněno v následujícím příkladu fragmentu kódu:

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

Hodnota deklarace identity skupiny je ID objektu skupiny. Pokud je uživatel členem více skupin, groups řetězec obsahuje všechny skupiny oddělené čárkou, například 7f0621bc-b758-44fa-a2c6-...,6b35e65d-f3c8-4c6e-9538-....

Poznámka:

Pokud přiřadíte uživatele Microsoft Entra předdefinované role nebo běžně označované jako role adresáře, tyto role se zobrazí v deklaraci skupiny tokenu zabezpečení.

Zpracování nadlimitního využití skupin

Aby se zajistilo, že velikost tokenu zabezpečení nepřekročí limit velikosti hlavičky HTTP, externí ID omezuje počet ID objektů, které zahrnuje do deklarace identity skupin . Limit nadlimitního využití je 150 pro tokeny SAML a 200 pro tokeny JWT. Tento limit je možné překročit, pokud uživatel patří do mnoha skupin a požádáte o všechny skupiny.

Detekce nadlimitního využití skupiny ve zdrojovém kódu

Pokud se nemůžete vyhnout nadlimitním skupinám, musíte ho zpracovat ve svém kódu. Když překročíte limit nadlimitního využití, token neobsahuje deklaraci identity skupin . Místo toho token obsahuje deklaraci identity _claim_names , která obsahuje člena skupiny pole. Proto je potřeba zkontrolovat existenci _claim_names deklarace identity, abyste řekli, že došlo k nadlimitnímu využití. Následující fragment kódu ukazuje, jak zjistit nadlimitní využití skupin:

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

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

V článku o konfiguraci deklarací identit skupin a rolí aplikací v článku o tokenech se dozvíte, jak požádat o úplný seznam skupin, když dojde k nadlimitnímu využití skupin.

Používání hodnot skupin a rolí ve webové aplikaci Node.js

V klientské aplikaci můžete ověřit, jestli má přihlášený uživatel potřebné role pro přístup k chráněné trase nebo volání koncového bodu rozhraní API. To lze provést kontrolou roles deklarace identity v tokenu ID. K implementaci této ochrany ve vaší aplikaci můžete vytvářet stráže pomocí vlastního middlewaru.

V aplikaci služby (aplikace API) můžete také chránit koncové body rozhraní API. Po ověření přístupového tokenu odeslaného klientskou aplikací můžete zkontrolovat role nebo skupiny deklarací identity v deklarací datové části přístupového tokenu.

Používám role nebo skupiny aplikací?

V tomto článku jste se dozvěděli, že k implementaci RBAC ve vaší aplikaci můžete použít role aplikací nebo skupiny . Upřednostňovaným přístupem je použití rolí aplikací, protože poskytuje podrobnější řízení při správě přístupu nebo oprávnění na úrovni aplikace. Další informace o tom, jak zvolit přístup, najdete v tématu Volba přístupu.

Další kroky