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

# Règles d’utilisation avec Authorization Extension

> Décrit comment utiliser les informations de Authorization Extension dans les règles.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Auth0 propose deux façons de mettre en œuvre le contrôle d'accès basé sur les rôles (RBAC), que vous pouvez utiliser à la place du système de contrôle d’accès interne de votre API ou en combinaison avec lui :

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

  L’ensemble des fonctionnalités Authorization Core correspond aux fonctionnalités d’Authorization Extension, améliore les performances et l’évolutivité, et fournit un système RBAC plus souple qu’Authorization Extension.

  À ce stade, les deux mettent en œuvre les fonctionnalités clés de RBAC et vous permettent de restreindre les permissions personnalisées définies pour une API à celles qui ont été attribuées à l’utilisateur en tant qu’autorisations.
</Callout>

Vous pouvez utiliser les règles d'Auth0 avec Authorization Extension pour faire des choses comme :

* Ajouter des demandes personnalisées au jeton émis.
* Déterminer l’appartenance de l’utilisateur à un groupe, ses rôles et ses autorisations.
* Stocker les informations sur les groupes, les rôles et les autorisations de l’utilisateur dans `app_metadata`.
* Ajouter les groupes, rôles et permissions de l’utilisateur au jeton sortant (qui peut être demandé via la permission `openid groups permissions roles`).

Comme la logique ci-dessus fait partie d’une règle, elle ne sera exécutée que dans le contexte d’une connexion. Si des utilisateurs sont ajoutés à un groupe ou en sont retirés, ce changement ne sera reflété dans Auth0 qu’après la prochaine connexion de l’utilisateur.

Pour en savoir plus, veuillez consulter [Règles d'Auth0](/docs/fr-ca/customize/rules).

## Ajouter des demandes personnalisées au jeton émis

Vous pouvez ajouter des demandes personnalisées à vos jetons en créant une règle supplémentaire qui autorise Authorization Extension à le faire. Les demandes personnalisées peuvent être à espacement de noms ou non.

Pour en savoir plus, lisez [Créer des demandes personnalisées](/docs/fr-ca/secure/tokens/json-web-tokens/create-custom-claims)

Vous devez limiter le nombre de demandes que vous ajoutez au jeton.

```javascript lines theme={null}
function (user, context, callback) {
  var namespace = 'http://yourdomain/claims/'; // You can set your own namespace, but do not use an Auth0 domain

  // Add the namespaced tokens. Remove any which is not necessary for your scenario
  context.idToken[namespace + "permissions"] = user.permissions;
  context.idToken[namespace + "groups"] = user.groups;
  context.idToken[namespace + "roles"] = user.roles;
  
  callback(null, user, context);
}
```

Cette règle doit être exécutée **après** la règle d’Authorization Extension. Pour vous en assurer, veillez à la placer en dessous de la règle d’Authorization Extension.

Lorsque vous appelez le point de terminaison `/authorize` ou que vous configurez Lock, vous devez préciser les informations que vous souhaitez dans `scope` en indiquant `groups`, `permissions` et/ou `roles`.

## Contrôler l’accès aux applications

Vous pouvez également écrire des règles qui sont exécutées après la règle d’Authorization Extension pour faire des choses comme contrôler l’accès à votre application. L’une des méthodes consiste à indiquer les rôles requis pour chaque application à l’aide des métadonnées de l’application.

Pour plus de détails, consultez [Gérer les métadonnées avec des règles](/docs/fr-ca/manage-users/user-accounts/metadata/manage-metadata-rules).

### Définir les rôles requis pour les métadonnées de l’application

Vous pouvez définir les métadonnées de l’application avec des rôles, qui sont des groupes d’autorisations que vous regroupez pour créer un ensemble particulier de fonctionnalités. Vous pouvez considérer cette étape comme un « étiquetage » de l’application, de sorte que les règles que vous définissez sachent sur quelle application agir.

1. Pour définir le champ `context.clientMetadata` avec `required_roles`, sélectionnez l’application sur laquelle vous souhaitez travailler à partir d’[Auth0 Dashboard > Applications > Applications](https://manage.auth0.com/#/applications).
   Vous accédez ainsi aux **Paramètres** de l’application. Faites défiler vers le bas et sélectionnez **Afficher les paramètres avancés** au bas de la page.
2. Sous **Métadonnées de l’application**, ajoutez un élément en définissant **Key** sur `required_roles` et, dans le champ **Value**, énumérez vos rôles en les séparant par des virgules. Sélectionnez **+ Ajouter** pour ajouter le champ.
3. Une fois terminé, sélectionnez **Enregistrer les modifications**. Désormais, lorsque vous vous connecterez à partir de cette application, dans `context.clientMetadata`, vous aurez le champ `required_roles` avec la chaîne de valeur des rôles que vous avez saisie.

### Créer une règle appliquant les rôles des applications

Maintenant que chaque application a un rôle qui lui est associé, vous pouvez créer la règle qui s’exécute avec cet élément d’information sur l’application dans le contexte.

1. Avant de créer cette règle, activez **Roles (Rôles)** sous **Token Contents (Contenus du jeton)** et publiez la règle d’Authorization Extension.
2. Ajoutez cette règle et assurez-vous qu’elle figure après la règle « auth0-authorization-extension » générée.
3. Après avoir défini `required_roles`, créez une nouvelle [règle](https://manage.auth0.com/#/rules) avec le corps suivant :

   ```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);
   }
   ```

## En savoir plus

* [Import and Export Authorization Extension Data (Données d’extension des autorisations d’importation et d’exportation)](/docs/fr-ca/customize/extensions/authorization-extension/import-and-export-authorization-extension-data)
* [Activer l’accès API à Authorization Extension](/docs/fr-ca/customize/extensions/authorization-extension/enable-api-access-to-authorization-extension)
* [Dépannage Authorization Extension](/docs/fr-ca/troubleshoot/authentication-issues/troubleshoot-authorization-extension)
