Aracılığıyla paylaş


Node.js web uygulamanızda rol tabanlı erişim denetimini kullanma

Şunlar için geçerlidir: Gri X simgesine sahip beyaz daire. İş gücü kiracılarıBeyaz onay işareti simgesi olan yeşil daire.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

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