Použití řízení přístupu na základě role ve webové aplikaci Node.js
platí pro: nájemníci pracovních sil
externí nájemníci (více informací)
Řízení přístupu na základě role (RBAC) je mechanismus pro vynucení autorizace v aplikacích. Externí ID Microsoft Entra 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.
Jakmile přiřadíte uživatele a skupiny k rolím, položka role se objeví v bezpečnostním tokenu. Pokud ale chcete vydat deklarace identity členství skupiny a v tokenech zabezpečení, potřebujete další konfiguraci ve svém externím tenantovi.
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 Přihlášení uživatelů ve vlastní webové aplikaci Node.js
Příjem nároků na skupiny a role ve vaší webové aplikaci Node.js
Po konfiguraci externího tenanta můžete v klientské aplikaci načíst nároky na role a nároky na skupiny . Role a skupiny deklarace identity existují v tokenu ID i v přístupovém tokenu, ale vaše klientská aplikace musí tyto deklarace identity zkontrolovat pouze v tokenu ID pro implementaci autorizace na straně klienta. Aplikace API může tyto deklarace identity načíst také při přijetí přístupového tokenu.
Zkontrolujete hodnotu deklarace role identity , jak je uvedeno v následujícím příkladu 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, řetězec roles
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:
- absence nároku
roles
v tokenu - uživatel nebyl přiřazen k žádné roli.
- více hodnot v deklaraci
roles
při přiřazení uživatele k více rolím
Můžete také zkontrolovat hodnotu nároku skupin , jak je znázorněno v následující ukázce kódu:
const tokenResponse = await msalInstance.acquireTokenByCode(authCodeRequest, req.body);
let groups = tokenResponse.idTokenClaims.groups;
Hodnota atributu skupiny je objektId skupiny. Pokud je uživatel členem více skupin, řetězec groups
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 předdefinované role Microsoft Entra nebo běžně označované jako role adresáře, zobrazí se tyto role ve skupinách deklarace tokenu zabezpečení.
Řešení překročení limitu skupin
Aby se zajistilo, že velikost bezpečnostního tokenu nepřekračuje limit velikosti hlavičky HTTP, omezuje externí ID počet ID objektů, které zahrnuje v deklaraci 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.
Detekujte překročení limitu skupiny ve zdrojovém kódu
Pokud se nemůžete vyhnout překročení limitu skupin, musíte se s tím vypořádat ve svém kódu. Pokud překročíte limit překročení, token neobsahuje nároku skupiny . Místo toho token obsahuje deklaraci identity _claim_names, která obsahuje skupiny člena pole. Proto je potřeba zkontrolovat existenci _claim_names deklarace, 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 Konfigurace deklarací identit skupin a rolí aplikací v tokenech naleznete pokyny, jak požádat o úplný seznam skupin, když dojde k překročení limitu 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. Provedete to tak, že v tokenu ID zkontrolujete deklaraci identity roles
. 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 odesílaných klientskou aplikací můžete zkontrolovat role nebo skupiny deklarace 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 Zvolit přístup.
Další kroky
- Přečtěte si další informace o Jak konfigurovat nároky skupin a role aplikací v tokenech.