Saltar al contenido principal
Auth0 proporciona dos formas de implementar el control de acceso basado en roles (RBAC), que puede usar en lugar del sistema interno de control de acceso de su propia API o en combinación con él:El conjunto de funcionalidades de Authorization Core ofrece la misma funcionalidad que la Authorization Extension, mejora el rendimiento y la escalabilidad, y proporciona un sistema RBAC más flexible que la Authorization Extension.Actualmente, ambos implementan las funcionalidades clave de RBAC y le permiten restringir los alcances personalizados definidos para una API a los que se hayan asignado al usuario como permisos.
Puede usar Auth0 Rules con la Authorization Extension para hacer, por ejemplo, lo siguiente:
  • Agregar claims personalizados al token emitido.
  • Determinar la pertenencia del usuario a grupos, así como sus roles y permisos.
  • Almacenar la información de grupos, roles y permisos del usuario en app_metadata.
  • Agregar los grupos, roles y permisos del usuario al token de salida (que se puede solicitar mediante el scope openid groups permissions roles).
Como la lógica anterior forma parte de una regla, solo se ejecutará en el contexto de un inicio de sesión. Si se agrega a un usuario a un grupo o se lo elimina de uno, este cambio solo se reflejará en Auth0 después de su siguiente inicio de sesión. Para obtener más información, consulte Auth0 Rules.

Agregue claims personalizados al token emitido

Para agregar claims personalizados a sus tokens, puede hacerlo creando una regla adicional que permita a la Authorization Extension hacerlo. Los claims personalizados pueden tener espacio de nombres o no tenerlo. Para obtener más información, lea Crear claims personalizados. Debe limitar la cantidad de claims que agrega al token.
function (user, context, callback) {
  var namespace = 'http://yourdomain/claims/'; // Puede definir su propio espacio de nombres, pero no use un dominio de Auth0

  // Agregue los tokens con espacio de nombres. Elimine los que no sean necesarios para su escenario
  context.idToken[namespace + "permissions"] = user.permissions;
  context.idToken[namespace + "groups"] = user.groups;
  context.idToken[namespace + "roles"] = user.roles;
  
  callback(null, user, context);
}
Esta regla debe ejecutarse después de la regla de Authorization Extension. Para asegurarse de que esto suceda, colóquela debajo de la regla de Authorization Extension. Al llamar al endpoint /authorize o al configurar Lock, deberá especificar en el scope la información que desea indicar: groups, permissions y/o roles.

Control del acceso a la aplicación

También puede escribir Rules que se ejecuten después de la regla de Authorization Extension para controlar, por ejemplo, el acceso a su aplicación. Una forma de hacerlo es especificar los roles necesarios para cada aplicación mediante los metadatos de la aplicación. Para obtener más información, consulte Administrar metadatos con Rules.

Establezca los roles requeridos en los metadatos de la aplicación

Puede configurar los metadatos de la aplicación para incluir roles, que son grupos de permisos reunidos para crear un conjunto específico de funcionalidades. Puede pensar en este paso como una forma de “etiquetar” la aplicación para que las reglas que configure sepan sobre qué aplicación deben actuar.
  1. ⁠⁠⁠⁠Para establecer el campo context.clientMetadata con required_roles, seleccione la aplicación con la que desea trabajar en Auth0 Dashboard > Applications > Applications. Esto lo llevará a Settings de la aplicación. Desplácese hacia abajo y seleccione Show Advanced Settings al final de la página.
  2. En Application Metadata, agregue un elemento y establezca Key en required_roles; en el campo Value, enumere los roles separados por comas. Seleccione + Add para agregar el campo.
  3. Cuando termine, seleccione Save Changes. Ahora, cuando inicie sesión desde esta aplicación, en context.clientMetadata tendrá required_roles con la cadena de roles que ingresó.

Crear una regla que aplique roles por aplicación

Ahora que cada aplicación tiene un rol asociado, puede crear la regla para que se ejecute con esta información de la aplicación en el contexto.
  1. Antes de crear esta regla, habilite Roles en Token Contents y publique la regla de Authorization Extension.
  2. Agregue esta regla y asegúrese de que figure después de la regla generada “auth0-authorization-extension”.
  3. Después de configurar required_roles, cree una nueva regla con el siguiente cuerpo:
    function (user, context, callback) {
      context.clientMetadata = context.clientMetadata || {};
      if (context.clientMetadata.required_roles && context.clientMetadata.required_roles.length){
        if (user.roles) {
          var _ = require('lodash');
          var roles = context.clientMetadata.required_roles.split(',');
          var matchingRoles =_.filter(user.roles, function(roleName) {
            return _.includes(roles, roleName);
          });
    
          if (matchingRoles && matchingRoles.length) {
            return callback(null, user, context);
          }
        }
    
        return callback(new UnauthorizedError('You do not have the required role to access ' + context.clientName));
      }
    
     callback(null, user, context);
    }
    

Más información