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

> Apprenez à modifier les permissions des jetons avec les Actions Post Login et Credentials Exchange tout en respectant les politiques d’autorisation.

# Gestion des permissions dans les Actions

Utilisez les méthodes `api.transaction.*` pour modifier les permissions cibles dans les Actions [Post Login](/docs/fr-ca/customize/actions/explore-triggers/post-login) et [Credentials Exchange](/docs/fr-ca/customize/actions/explore-triggers/credentials-exchange). Avant d’émettre les jetons, Auth0 évalue les permissions obtenues en fonction des politiques d’autorisation applicables.

Post Login permet également de modifier directement le jeton d’accès avec `api.accessToken.addScope()` et `removeScope()`, sans passer par l’évaluation des politiques d’autorisation. Ces méthodes indépendantes ne sont pas offertes dans Credentials Exchange.

<h2 id="how-target-scopes-work">
  Fonctionnement des permissions cibles
</h2>

`event.transaction.target_scopes` contient l’ensemble cible actuel de permissions, qui est filtré par les politiques d’autorisation après l’exécution des Actions afin de déterminer les permissions finales accordées. `event.transaction.target_scopes` contient initialement les permissions demandées dans Post Login ou les permissions autorisées de l’application pour l’API cible dans Credentials Exchange.

**Les modifications s’accumulent d’une Action à l’autre.** Chaque méthode de permissions cibles met immédiatement à jour `event.transaction.target_scopes`, autant dans l’Action en cours que dans les Actions subséquentes de la même transaction. `event.transaction.requested_scopes` demeure inchangé. Lisez l’ensemble cible à partir de l’événement, puis modifiez-le au moyen des méthodes de l’API :

| Méthode | Effet | Référence de l’API |
| - | - | - |
| `addTargetScope(scope)` | Ajoute une permission. | [Post Login](/docs/fr-ca/actions/reference/post-login/post-login-api-object), [Credentials Exchange](/docs/fr-ca/actions/reference/credentials-exchange/credentials-exchange-api-object) |
| `removeTargetScope(scope)` | Retire une permission. | [Post Login](/docs/fr-ca/actions/reference/post-login/post-login-api-object), [Credentials Exchange](/docs/fr-ca/actions/reference/credentials-exchange/credentials-exchange-api-object) |
| `setTargetScopes(scopes)` | Remplace l’ensemble au complet. | [Post Login](/docs/fr-ca/actions/reference/post-login/post-login-api-object), [Credentials Exchange](/docs/fr-ca/actions/reference/credentials-exchange/credentials-exchange-api-object) |
| `clearTargetScopes()` | Vide l’ensemble. | [Post Login](/docs/fr-ca/actions/reference/post-login/post-login-api-object), [Credentials Exchange](/docs/fr-ca/actions/reference/credentials-exchange/credentials-exchange-api-object) |

Auth0 évalue l’ensemble cible final en fonction des politiques d’autorisation une fois toutes les Actions terminées. Les ajouts non autorisés sont ignorés sans avertissement. Les permissions retirées ne sont pas appliquées, à moins qu’une opération ultérieure ne les rétablisse ou ne remplace l’ensemble.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Les quatre méthodes s’appliquent aux permissions de l’API, aux permissions OIDC et aux permissions du jeton d’actualisation, y compris `openid`, `profile` et `offline_access`, selon les capacités du flux. L’ajout ou le retrait de ces permissions peut modifier l’émission des jetons ou les renseignements du profil.

  `setTargetScopes()` et `clearTargetScopes()` remplacent l’ensemble au complet; elles peuvent donc aussi retirer des permissions par inadvertance. Retirer ou omettre `openid` peut empêcher l’émission du jeton d’ID; retirer ou omettre `offline_access` peut empêcher l’émission du jeton d’actualisation. Utilisez `removeTargetScope()` pour retirer une seule permission précise.
</Callout>

<h3 id="authorization-and-consent">
  Autorisation et consentement
</h3>

Les contrôles existants s’appliquent toujours :

* **Accès des applications :** les [politiques d’accès aux API](/docs/fr-ca/get-started/apis/api-access-policies-for-applications) et les [autorisations client](/docs/fr-ca/get-started/applications/application-access-to-apis-client-grants), y compris les autorisations tierces par défaut.
* **Autorisations des utilisateurs :** lorsque le [RBAC](/docs/fr-ca/manage-users/access-control/rbac) est activé, Auth0 vérifie les rôles et les autorisations attribuées directement. Pour les connexions d’Organization, ce sont les rôles de l’utilisateur dans cette Organization qui sont utilisés.
* **Consentement :** lorsque le consentement est requis, toutes les permissions qui restent après le filtrage des autorisations figurent dans l’invite de consentement, y compris celles ajoutées par des Actions. Les permissions retirées de l’ensemble cible final ou rejetées par une politique ne sont pas affichées. Le fait d’effacer les permissions ne permet pas de contourner le consentement.

Credentials Exchange n’implique ni utilisateur ni consentement de l’utilisateur. Son ensemble cible est croisé avec l’autorisation client. **Les méthodes de permissions cibles sont les seules méthodes qui permettent d’y modifier les permissions :** `api.accessToken.addScope()` et `removeScope()` ne sont pas disponibles.

<h2 id="examples">
  Exemples
</h2>

<h3 id="add-a-scope-while-respecting-authorization-policies">
  Ajouter une permission dans le respect des politiques d'autorisation
</h3>

Ajoutez l'accès en lecture aux rapports, sous réserve des politiques applicables et de tout consentement requis :

```javascript lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  api.transaction.addTargetScope('read:reports');
};
```

<h3 id="remove-write-access-for-risky-transactions">
  Retirer l'accès en écriture pour les transactions à risque
</h3>

Retirez l'accès en écriture lorsqu'Auth0 détecte un déplacement impossible entre deux connexions consécutives. Les autres permissions ciblées demeurent inchangées. Pour en apprendre davantage sur les codes d'évaluation, consultez [Personnaliser Adaptive MFA](/docs/fr-ca/secure/multi-factor-authentication/adaptive-mfa/customize-adaptive-mfa).

```javascript lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  const travel = event.authentication?.riskAssessment?.assessments?.ImpossibleTravel;
  if (travel?.code === 'impossible_travel_from_last_login') {
    api.transaction.removeTargetScope('write:reports');
  }
};
```

<h3 id="remove-admin-access-for-delegated-requests">
  Retirer l'accès administrateur pour les requêtes déléguées
</h3>

Utilisez `event.transaction.actor` pour détecter une requête déléguée, quel que soit le flux ayant fourni l'actor. Retirez l'accès administrateur sans modifier les autres permissions, y compris `openid` :

```javascript lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  if (event.transaction?.actor) {
    api.transaction.removeTargetScope('admin:reports');
  }
};
```

<h3 id="apply-changes-across-actions">
  Appliquer des modifications d'une Action à l'autre
</h3>

Pour une requête comportant `write:reports`, l'Action 1 ajoute l'accès en lecture. L'événement affiche aussitôt les deux permissions :

```javascript Action 1 lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  api.transaction.addTargetScope('read:reports');
  console.log(event.transaction.target_scopes);
  // ['write:reports', 'read:reports']
};
```

L'Action 2 reçoit cet ensemble cumulé et retire l'accès en écriture :

```javascript Action 2 lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  api.transaction.removeTargetScope('write:reports');
  console.log(event.transaction.target_scopes);
  // ['read:reports']
};
```

Auth0 évalue ensuite `read:reports`. Sa présence dans l'ensemble cible n'en garantit pas l'émission.

<h3 id="limit-machine-to-machine-access-to-writing-reports">
  Limiter l’accès de communication entre machines à l’écriture de rapports
</h3>

Ne conservez que l’accès en écriture dans Credentials Exchange. La permission doit tout de même être autorisée par l’autorisation client :

```javascript lines theme={null}
exports.onExecuteCredentialsExchange = async (event, api) => {
  api.transaction.setTargetScopes(['write:reports']);
};
```

<h2 id="modify-access-token-scopes-directly">
  Modifier directement les permissions du jeton d'accès
</h2>

Pour les applications internes, Post Login permet de modifier directement le jeton au moyen de `api.accessToken.addScope()` et de `removeScope()`. Ces deux méthodes s'exécutent après l'autorisation, sans passer par le RBAC, la politique d'accès de l'application ni l'évaluation du consentement. Ni l'une ni l'autre ne modifie `event.transaction.target_scopes`.

`addScope()` ajoute une permission sans effectuer ces vérifications et sans l'afficher sur l'écran de consentement. `removeScope()` ne fait que restreindre le jeton d'accès final; la permission demeure affichée dans l'invite de consentement.

Faites ces modifications directes en connaissance de cause, avec des valeurs de permissions fiables et le public d'API attendu. Les modifications apportées aux permissions cibles ne peuvent pas annuler un ajout forcé :

```javascript lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  if (event.resource_server?.identifier === 'https://example.com/api') {
    api.accessToken.addScope('audit:reports');
    api.transaction.removeTargetScope('audit:reports');
  }
};
```

`audit:reports` se retrouve tout de même dans le jeton d'accès, même s'il ne figure ni dans l'ensemble cible ni sur l'écran de consentement. Ce comportement s'applique à toutes les Actions, peu importe l'ordre des appels.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Les [applications tierces](/docs/fr-ca/get-started/applications/third-party-applications/security-controls) ne prennent pas en charge `api.accessToken.addScope()`; les ajouts ne peuvent donc pas contourner les autorisations de l'application ni le consentement. `removeScope()` demeure disponible, puisqu'elle ne fait que réduire l'accès. Utilisez les méthodes de permissions cibles si vous voulez que les modifications se reflètent à la fois dans l'autorisation et dans le consentement.
</Callout>

<h2 id="supported-flows">
  Flux pris en charge
</h2>

| Flux | Comportement |
| - | - |
| Code d’autorisation, implicite, hybride | Pris en charge. |
| Mot de passe du propriétaire de la ressource, domaine de mot de passe, OTP sans mot de passe | Pris en charge. |
| Échange de jeton d’actualisation hors ligne | Pris en charge. Part des permissions de l’échange ou, si elles sont omises, de l’ensemble accordé précédemment. Les limites d’autorisation du jeton d’actualisation continuent de s’appliquer. |
| Autorisation d’appareil | Pris en charge. |
| MFA (OTP, hors bande, code de récupération), clé d’identification / WebAuthn | Pris en charge. |
| Échange de jetons (Échange personnalisé de jetons, au nom de, connexion sociale native) | Pris en charge. |
| Cross App Access (ID-JAG) | Pris en charge. |
| Canal de lien Web CIBA | Pris en charge. |
| Identifiants du client | Pris en charge au moyen des Actions Credentials Exchange. |
| Canal de notification poussée MFA CIBA | Les modifications sont ignorées. |
| SAML, WS-Fed, anciens points de terminaison, ancien modèle d’autorisation | Les modifications sont ignorées. |
| Échange de jeton d’accès de connexion fédérée Token Vault | Les méthodes de permissions cibles génèrent une erreur. |

Pour les Actions partagées, n’appelez pas les méthodes de permissions cibles lorsque `event.transaction.protocol === 'oauth2-token-exchange-federated-connection'`. Ne vous fiez pas aux modifications des permissions cibles pour restreindre les flux non pris en charge.

<h2 id="learn-more">
  En savoir plus
</h2>

* [Objet API Post Login](/docs/fr-ca/actions/reference/post-login/post-login-api-object)
* [Objet API Credentials Exchange](/docs/fr-ca/actions/reference/credentials-exchange/credentials-exchange-api-object)
* [Métadonnées de transaction des Actions](/docs/fr-ca/customize/actions/transaction-metadata)
* [Redirection avec les Actions](/docs/fr-ca/customize/actions/redirect-with-actions)
