Použití řízení přístupu na základě role ve webové aplikaci Node.js
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.
Pokud jste to neudělali, proveďte kroky v části Přihlášení uživatelů ve vlastní Node.js webové aplikaci.
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
- Přečtěte si další informace o konfiguraci deklarací identity skupin a rolí aplikací v tokenech.