> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Describe cómo usar la información de la Authorization Extension en Rules.

# Usar Rules con la Authorization Extension

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  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:

  * [Authorization Core](/es/docs/manage-users/access-control/rbac)
  * [Authorization Extension](/es/docs/customize/extensions/authorization-extension)

  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.
</Callout>

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](/es/docs/customize/rules).

<div id="add-custom-claims-to-the-issued-token">
  ## Agregue claims personalizados al token emitido
</div>

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.](/es/docs/secure/tokens/json-web-tokens/create-custom-claims)

Debe limitar la cantidad de claims que agrega al token.

```javascript lines theme={null}
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`.

<div id="control-app-access">
  ## Control del acceso a la aplicación
</div>

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](/es/docs/manage-users/user-accounts/metadata/manage-metadata-rules).

<div id="set-app-metadata-required-roles">
  ### Establezca los roles requeridos en los metadatos de la aplicación
</div>

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](https://manage.auth0.com/#/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ó.

<div id="create-rule-enforcing-app-roles">
  ### Crear una regla que aplique roles por aplicación
</div>

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](https://manage.auth0.com/#/rules) con el siguiente cuerpo:

   ```javascript lines theme={null}
   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);
   }
   ```

<div id="learn-more">
  ## Más información
</div>

* [Importar y exportar datos de la Authorization Extension](/es/docs/customize/extensions/authorization-extension/import-and-export-authorization-extension-data)
* [Habilitar el acceso a la API de la Authorization Extension](/es/docs/customize/extensions/authorization-extension/enable-api-access-to-authorization-extension)
