Node.js web uygulamanızda rol tabanlı erişim denetimini kullanma
Şunlar için geçerlidir: İş gücü kiracıları
Dış kiracılar (daha fazla bilgi edinin)
Rol tabanlı erişim denetimi (RBAC), uygulamalarda yetkilendirmeyi zorunlu kılmaya yönelik bir mekanizmadır. Microsoft Entra Dış Kimlik, uygulamanız için uygulama rolleri tanımlamanıza ve bu rolleri kullanıcılara ve gruplara atamanıza olanak tanır. Bir kullanıcıya veya gruba atadığınız roller, uygulamanızdaki kaynaklara ve işlemlere erişim düzeylerini tanımlar. Dış Kimlik kimliği kimliği doğrulanmış bir kullanıcı için bir güvenlik belirteci dağıttığında, güvenlik belirtecinin rol talebine kullanıcıyı veya grubu atadığınız rollerin adlarını içerir.
Dış kiracınızı, kullanıcının grup üyeliklerini döndürecek şekilde de yapılandırabilirsiniz. Geliştiriciler daha sonra, belirli gruplardaki kullanıcının üyeliklerinin rol üyelikleri olarak yorumlandığı uygulamalarında RBAC uygulamak için güvenlik gruplarını kullanabilir.
Kullanıcıları ve grupları rollere atadıktan sonra, rol talebi güvenlik belirtecinizde yayılır. Ancak, grup üyelik talebi güvenlik belirteçlerinde yaymak için müşterinizin kiracısında ek yapılandırmaya ihtiyacınız vardır.
Bu makalede, kullanıcı rollerini veya grup üyeliğini ya da her ikisini de Node.js web uygulamanız için bir güvenlik belirtecinde talep olarak almayı öğreneceksiniz.
Önkoşullar
Bunu yapmadıysanız, Uygulamalar için rol tabanlı erişim denetimini kullanma makalesindeki adımları tamamlayın. Bu makalede, uygulamanız için rol oluşturma, bu rollere kullanıcı ve grup atama, gruba üye ekleme ve güvenlik belirtecine grup talebi ekleme hakkında bilgi verilmektedir. Kimlik belirteçleri ve erişim belirteçleri hakkında daha fazla bilgi edinin.
Bunu yapmadıysanız, Kendi Node.js web uygulamanızda kullanıcıları oturum açma bölümünde yer alan adımları tamamlayın
Node.js web uygulamanızda grup ve rol taleplerini alma
Müşterinizin kiracısını yapılandırdıktan sonra, istemci uygulamanızda rollerinizi ve grup taleplerinizi alabilirsiniz. Roller ve grup talepleri hem kimlik belirtecinde hem de erişim belirtecinde bulunur, ancak istemci tarafında yetkilendirmeyi uygulamak için istemci uygulamanızın yalnızca kimlik belirtecinde bu talepleri denetlemesi gerekir. API uygulaması, erişim belirtecini aldığında da bu talepleri alabilir.
Rol talep değerinizi aşağıdaki kod parçacığı örneğinde gösterildiği gibi denetlersiniz:
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);
}
}
...
}
Bir kullanıcıyı birden çok rollere atarsanız, roles
dize virgülle ayrılmış tüm rolleri içerir, örneğin Orders.Manager,Store.Manager,...
. Aşağıdaki koşulları işlemek için uygulamanızı derlediğinizden emin olun:
- belirteçte
roles
talep olmaması - kullanıcı herhangi bir role atanmadı
- bir kullanıcıyı birden çok rollere
roles
atadığınızda talepteki birden çok değer
Aşağıdaki kod parçacığı örneğinde gösterildiği gibi grup talep değerinizi de de de kontrol edebilirsiniz:
const tokenResponse = await msalInstance.acquireTokenByCode(authCodeRequest, req.body);
let groups = tokenResponse.idTokenClaims.groups;
Gruplar talep değeri, grubun objectId değeridir. Bir kullanıcı birden çok grubun üyesiyse, groups
dize gibi 7f0621bc-b758-44fa-a2c6-...,6b35e65d-f3c8-4c6e-9538-...
virgülle ayrılmış tüm grupları içerir.
Not
Bir kullanıcıya Microsoft Entra yerleşik rolleri atarsanız veya genellikle dizin rolleri olarak bilinirseniz, bu roller güvenlik belirtecinin grup taleplerinde görünür.
Grupların fazla kullanımlarını işleme
Güvenlik belirtecinin boyutunun HTTP üst bilgi boyutu sınırını aşmadığından emin olmak için Dış Kimlik, grup talebine dahil olduğu nesne kimliklerinin sayısını sınırlar. Fazla kullanım sınırı SAML belirteçleri için 150 ve JWT belirteçleri için 200'dür. Bir kullanıcı birçok gruba aitse ve tüm gruplar için istekte bulunursanız bu sınırı aşmanız mümkündür.
Kaynak kodunuzda grup fazla kullanımlarını algılama
Fazla kullanım gruplarından kaçınamıyorsanız, bunu kodunuzda işlemeniz gerekir. Fazla kullanım sınırını aştığınızda, belirteç grup talebi içermez. Bunun yerine belirteç, dizinin bir grup üyesini içeren bir _claim_names talebi içerir. Bu nedenle, fazla kullanım gerçekleştiğini söylemek için _claim_names talebin varlığını denetlemeniz gerekir. Aşağıdaki kod parçacığı, grupların fazla kullanımlarını nasıl algılayabileceğinizi gösterir:
const tokenResponse = await msalInstance.acquireTokenByCode(authCodeRequest, req.body);
if(tokenResponse.idTokenClaims.hasOwnProperty('_claim_names') && tokenResponse.idTokenClaims['_claim_names'].hasOwnProperty('groups')) {
//overage has occurred
}
Gruplar fazla kullanım gerçekleştiğinde tam gruplar listesi isteğinin nasıl yapıldığını öğrenmek için Belirteçlerde grup taleplerini ve uygulama rollerini yapılandırma makalesindeki yönergeleri kullanın.
Node.js web uygulamanızda grupları ve rol değerlerini kullanma
İstemci uygulamasında, oturum açmış bir kullanıcının korumalı bir yola erişmek veya BIR API uç noktasını çağırmak için gerekli role sahip olup olmadığını doğrulayabilirsiniz. Bu, kimlik belirtecindeki roles
talep denetlenerek yapılabilir. Uygulamanızda bu korumayı uygulamak için özel bir ara yazılım kullanarak korumalar oluşturabilirsiniz.
Hizmet uygulamanızda (API uygulaması), API uç noktalarını da koruyabilirsiniz. İstemci uygulaması tarafından gönderilen erişim belirtecini doğruladıktan sonra, erişim belirtecinin yük taleplerindeki rolleri veya grup taleplerini de kontrol edebilirsiniz.
Uygulama Rollerini veya Grupları kullanabilir miyim?
Bu makalede uygulamanızda RBAC uygulamak için Uygulama Rollerini veya Grupları kullanabileceğinizi öğrendiniz. Tercih edilen yaklaşım, uygulama düzeyinde erişim/izinleri yönetirken daha ayrıntılı denetim sağladığından uygulama rollerini kullanmaktır. Bir yaklaşımı seçme hakkında daha fazla bilgi için bkz . Yaklaşım seçme.
Sonraki adımlar
- Belirteçlerde grup taleplerini ve uygulama rollerini yapılandırma hakkında daha fazla bilgi edinin.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin