Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: inquilinos de personal
inquilinos externos (más información)
El control de acceso basado en roles (RBAC) es un mecanismo para exigir la autorización en las aplicaciones. El identificador externo de Microsoft Entra permite definir roles de aplicación para la aplicación y asignar esos roles a usuarios y grupos. Los roles que asigna a un usuario o grupo definen su nivel de acceso a los recursos y operaciones de la aplicación. Cuando el identificador externo emite un token de seguridad para un usuario autenticado, incluye los nombres de los roles que has asignado al usuario o grupo en la declaración de roles del token de seguridad.
También puede configurar el inquilino externo para que devuelva las membresías de grupos del usuario. Los desarrolladores pueden entonces usar grupos de seguridad para implementar el control de acceso basado en roles en sus aplicaciones, donde las pertenencias de los usuarios en grupos específicos se interpretan como pertenencias a roles.
Una vez que asigne usuarios y grupos a roles, la notificación de roles se emite en el token de seguridad. Sin embargo, para emitir la notificación de pertenencia a grupos en tokens de seguridad, necesita una configuración adicional en el inquilino externo.
En este artículo, aprenderá a recibir roles de usuario, pertenencia a grupos o ambos como reivindicaciones en un token de seguridad para su aplicación web Node.js.
Prerrequisitos
Si no lo ha hecho, complete los pasos descritos en el artículo Uso del control de acceso basado en rol para aplicaciones. En este artículo se muestra cómo crear roles para la aplicación, cómo asignar usuarios y grupos a esos roles, cómo agregar miembros a un grupo y cómo agregar una notificación de grupo a un token de seguridad. Obtenga más información sobre los tokens de identificador y los tokens de acceso.
Si no lo ha hecho, complete los pasos descritos en Iniciar sesión de usuarios en su propia aplicación web Node.js
Recepción de notificaciones de grupos y roles en la aplicación web de Node.js
Una vez configurado el inquilino externo, puede recuperar las notificaciones de roles y grupos en la aplicación cliente. Las notificaciones de roles y grupos están presentes tanto en el token de identificación como en el token de acceso, pero la aplicación cliente solo necesita comprobar estas notificaciones en el token de identificación para implementar la autorización en el lado cliente. La aplicación de API también puede recuperar estas notificaciones cuando recibe el token de acceso.
Compruebe el valor de notificación de roles tal como se muestra en el ejemplo de fragmento de código siguiente:
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);
}
}
...
}
Si asigna un usuario a varios roles, la cadena roles
contiene todos los roles separados por una coma, como Orders.Manager,Store.Manager,...
. Asegúrese de desarrollar su aplicación para manejar las siguientes condiciones:
- ausencia de notificación de
roles
en el token - el usuario no se ha asignado a ningún rol
- varios valores de la notificación de
roles
al asignar un usuario a varios roles
También puede comprobar el valor de notificación de los grupos tal como se muestra en el ejemplo de fragmento de código siguiente:
const tokenResponse = await msalInstance.acquireTokenByCode(authCodeRequest, req.body);
let groups = tokenResponse.idTokenClaims.groups;
El valor declarado por los grupos es el objectId del grupo. Si un usuario es miembro de varios grupos, la cadena groups
contiene todos los grupos separados por una coma, como 7f0621bc-b758-44fa-a2c6-...,6b35e65d-f3c8-4c6e-9538-...
.
Nota:
Si usted asigna a un usuario roles incorporados de Microsoft Entra o comúnmente conocidos como roles de directorio, esos roles aparecen en el reclamo de grupos del token de seguridad.
Control del uso por encima del límite de grupos
Para asegurarse de que el tamaño del token de seguridad no supera el límite de tamaño del encabezado HTTP, la Identificación Externa limita el número de identificadores de objeto que incluye en la reclamación groups. El límite de sobreuso es 150 para tokens SAML y 200 para tokens JWT. Es posible superar este límite si un usuario pertenece a muchos grupos y solicita todos los grupos.
Detección del uso por encima del límite de grupos en el código fuente
Si no puede evitar el uso por encima del límite de grupos, debe controlarlo en el código. Cuando se supera el uso por encima del límite, el token no contiene la notificación de grupos. En su lugar, el token contiene una declaración _claim_names que incluye un miembro grupos del array. Por lo tanto, debe comprobar la existencia de la notificación _claim_names para indicar que se ha producido un uso por encima del límite. El siguiente fragmento de código muestra cómo detectar un uso por encima del límite de grupos:
const tokenResponse = await msalInstance.acquireTokenByCode(authCodeRequest, req.body);
if(tokenResponse.idTokenClaims.hasOwnProperty('_claim_names') && tokenResponse.idTokenClaims['_claim_names'].hasOwnProperty('groups')) {
//overage has occurred
}
Siga las instrucciones del artículo Configuración de notificaciones de grupo y roles de aplicación en tokens para obtener información sobre cómo solicitar la lista completa de grupos cuando se produce el uso por encima del límite de grupos.
Uso de los valores de grupos y roles en la aplicación web de Node.js
En la aplicación cliente, puede comprobar si un usuario que ha iniciado sesión tiene los roles necesarios para acceder a una ruta protegida o llamar a un punto de conexión de API. Para ello, compruebe la notificación roles
en el token de identificador. Para implementar esta protección en la aplicación, puede crear restricciones mediante un middleware personalizado.
En la aplicación de servicio (aplicación de API), también puede proteger los puntos de conexión de API. Después de validar el token de acceso enviado por la aplicación cliente, puede comprobar si hay notificaciones de roles o grupos en las notificaciones de carga del token de acceso.
¿Uso roles de aplicación o grupos?
En este artículo, ha aprendido que puede usar roles de aplicación o grupos para implementar RBAC en la aplicación. El enfoque preferido es usar roles de aplicación, ya que proporciona un control más granular al administrar el acceso o los permisos en el nivel de aplicación. Para obtener más información sobre cómo elegir un enfoque, consulte Elección de un enfoque.
Pasos siguientes
- Obtenga más información sobre la Configuración de notificaciones de grupo y roles de aplicación en tokens.