Použití řízení přístupu na základě role ve webové aplikaci Node.js
Článek
Platí pro: Tenanti pracovních sil – externí tenanti (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
Pokud jste to neudělali, proveďte kroky v článku Použití řízení přístupu na základě role pro aplikace . V tomto článku se dozvíte, jak vytvořit role pro vaši aplikaci, jak přiřadit uživatele a skupiny k těmto rolím, jak přidat členy do skupiny a jak přidat deklaraci identity skupiny do tokenu zabezpečení. Přečtěte si další informace o tokenech ID a přístupových tokenech.
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:
JavaScript
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 rolesif (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:
JavaScript
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:
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.
Prozkoumejte, jak pomocí předdefinovaných rolí Azure, spravovaných identit a zásad RBAC řídit přístup k prostředkům Azure. Identita je klíčem k zabezpečení řešení.