

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Déclencheur Lambda avant génération de jeton
<a name="user-pool-lambda-pre-token-generation"></a>

Comme Amazon Cognito appelle ce déclencheur avant la génération de jeton, vous pouvez personnaliser les revendications dans les jetons du groupe d’utilisateurs. Les **fonctionnalités de base** de la première version ou l’événement déclencheur avant la génération du jeton `V1_0` vous permettent de personnaliser le jeton d’identité (ID). Dans les groupes d'utilisateurs dotés du plan de fonctionnalités Essentials ou Plus, vous pouvez générer la version 2 ou `V2_0` déclencher un événement avec personnalisation des jetons d'accès, et la version 3 ou `V3_0` déclencher un événement avec personnalisation des jetons d'accès pour les autorisations d'identification des clients machine-to-machine (M2M).

Amazon Cognito envoie un événement `V1_0` en tant que demande à votre fonction avec les données qu’il inscrirait dans le jeton d’identification. Un `V3_0` événement `V2_0` or est une demande unique contenant les données qu'Amazon Cognito inscrirait à la fois dans les jetons d'identité et d'accès. Pour personnaliser les deux jetons, vous devez mettre à jour votre fonction pour utiliser la version deux ou trois du déclencheur et envoyer les données des deux jetons dans la même réponse.

Amazon Cognito applique les réponses aux événements de la version 2 aux jetons d'accès issus de l'authentification utilisateur, lorsqu'un utilisateur humain a présenté des informations d'identification à votre groupe d'utilisateurs. Les réponses aux événements de la troisième version s'appliquent aux jetons d'accès issus de l'authentification des utilisateurs et de l'authentification des machines, où les systèmes automatisés autorisent les demandes de jetons d'accès avec les secrets des clients de l'application. Hormis les circonstances des jetons d'accès qui en résultent, les événements des versions 2 et 3 sont identiques.

Ce déclencheur Lambda permet d’ajouter, de supprimer et de modifier certaines demandes relatives aux jetons d’identité et d’accès avant qu’Amazon Cognito ne les envoie à votre application. Pour utiliser cette fonction, associez une fonction Lambda à partir de la console des groupes d’utilisateurs Amazon Cognito ou mettez à jour votre groupe d’utilisateurs `LambdaConfig` via l’ AWS Command Line Interface (AWS CLI).

## Versions de l’événement
<a name="user-pool-lambda-pre-token-generation-event-versions"></a>

Votre groupe d'utilisateurs peut fournir différentes versions d'un événement déclencheur antérieur à la génération du jeton à votre fonction Lambda. Un `V1_0` déclencheur fournit les paramètres de modification des jetons d'identification. Un `V3_0` déclencheur `V2_0` ou fournit les paramètres suivants.

1. Les fonctions d'un `V1_0` déclencheur.

1. Possibilité de personnaliser les jetons d'accès.

1. Possibilité de transmettre des types de données complexes aux valeurs de réclamation des identifiants et des jetons d'accès :
   + String
   + Number
   + Booléen
   + Tableau de chaînes, de nombres, de booléens ou d'une combinaison de ces éléments
   + JSON

**Note**  
Dans le jeton d'identification, vous pouvez renseigner des objets complexes avec les valeurs des revendications, à l'exception de`phone_number_verified`, `email_verified``updated_at`, et`address`.

Les groupes d'utilisateurs fournissent `V1_0` des événements par défaut. Pour configurer votre groupe d'utilisateurs afin d'envoyer un `V2_0` événement, choisissez une **version Trigger Event** des **fonctionnalités de base et personnalisez les jetons d'accès pour les identités des utilisateurs** lorsque vous configurez votre déclencheur dans la console Amazon Cognito. Pour produire des `V3_0` événements, choisissez ****Fonctionnalités de base et personnalisation des jetons d'accès pour les identités des utilisateurs et des machines****. Vous pouvez également définir la valeur de `LambdaVersion` dans les [LambdaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#CognitoUserPools-UpdateUserPool-request-LambdaConfig)paramètres d'une requête [UpdateUserPool ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)ou d'une demande d'[CreateUserPool ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)API. Les versions 1, 2 et 3 de l'événement sont disponibles dans les plans de fonctionnalités **Essentials** et **Plus**. Les opérations M2M pour les événements de la version 3 ont une structure tarifaire distincte de la formule des utilisateurs actifs mensuels (MAU). Pour plus d’informations, consultez [Tarification d’Amazon Cognito](https://aws.amazon.com/cognito/pricing/).

**Note**  
Les groupes d'utilisateurs qui étaient opérationnels avec l'option **Fonctionnalités de sécurité avancées** le 22 novembre 2024 à 18h00 GMT ou avant cette date, et qui restent au niveau des fonctionnalités **Lite** ont accès aux versions 1 et 2 des événements du déclencheur antérieur à la génération du jeton. Les groupes d'utilisateurs de cet ancien niveau *sans* fonctionnalités de sécurité avancées ont accès à la première version de l'événement. La troisième version *n'est disponible que* dans Essentials et Plus.

## Référence aux revendications et aux champs d'application
<a name="user-pool-lambda-pre-token-generation-excluded-claims"></a>

Amazon Cognito limite les demandes et les portées que vous pouvez ajouter, modifier ou supprimer dans les jetons d’accès et d’identité. Le tableau suivant décrit les affirmations que votre fonction Lambda peut ou ne peut pas modifier, ainsi que les paramètres des événements déclencheurs qui affectent la présence ou la valeur de la réclamation.


| Demander | Type de jeton par défaut | Tu peux en ajouter ? | Est-ce que je peux modifier ? | Peut supprimer ? | Paramètre d'événement - ajouter ou modifier | Paramètre d'événement - supprimer | Type d'identité | Version de l'événement | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| Toute réclamation ne figurant pas dans le schéma de jeton du pool d'utilisateurs | Aucune | Oui | Oui | N/A | claimsToAddOrOverride | claimsToSuppress | Utilisateur, machine [1](#cognito-pretoken-machine-ids-tier-note) | Tout [2](#cognito-pretoken-id-access-versions-note) | 
| scope | Accès | Oui | Oui | Oui | scopesToAdd | scopesToSuppress | Utilisateur, machine [1](#cognito-pretoken-machine-ids-tier-note) | v2\$10, v3\$10 | 
| cognito:groups | ID, accès | Oui | Oui | Oui | groupsToOverride | claimsToSuppress | Utilisateur | Tout [2](#cognito-pretoken-id-access-versions-note) | 
| cognito:preferred\$1role | ID | Oui | Oui | Oui | preferredRole | claimsToSuppress[3](#cognito-pretoken-suppress-groups-note) | Utilisateur | Tous | 
| cognito:roles | ID | Oui | Oui | Oui | iamRolesToOverride | claimsToSuppress[3](#cognito-pretoken-suppress-groups-note) | Utilisateur | Tous | 
| cognito:username | ID | Non | Non | Non | N/A | N/A | Utilisateur | N/A | 
| Toute autre réclamation avec un cognito: préfixe | Aucune | Non | Non | Non | N/A | N/A | N/A | N/A | 
| username | Accès | Non | Non | Non | N/A | N/A | Utilisateur | v2\$10, v3\$10 | 
| sub | ID, accès | Non | Non | Non | N/A | N/A | Utilisateur | N/A | 
| attribut OIDC standard | ID | Oui | Oui | Oui | claimsToAddOrOverride | claimsToSuppress | Utilisateur | Tous | 
| Attribut custom: | ID | Oui | Oui | Oui | claimsToAddOrOverride | claimsToSuppress | Utilisateur | Tous | 
| Attribut dev: | ID | Non | Non | Oui | N/A | claimsToSuppress | Utilisateur | Tous | 
| identities | ID | Non | Non | Non | N/A | N/A | Utilisateur | N/A | 
| aud[4](#cognito-pretoken-aud-note) | ID | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| client\$1id | Accès | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| event\$1id | Accès | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| device\$1key | Accès | Non | Non | Non | N/A | N/A | Utilisateur | N/A | 
| version | Accès | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| acr | ID, accès | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| amr | ID, accès | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| at\$1hash | ID | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| auth\$1time | ID, accès | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| azp | ID, accès | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| exp | ID, accès | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| iat | ID, accès | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| iss | ID, accès | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| jti | ID, accès | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| nbf | ID, accès | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| nonce | ID, accès | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| origin\$1jti | ID, accès | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 
| token\$1use | ID, accès | Non | Non | Non | N/A | N/A | Utilisateur, machine | N/A | 

1 Les jetons d'accès pour les identités des machines ne sont disponibles qu'avec `v3_0` l'événement d'entrée déclencheur. La troisième version de l'événement n'est disponible que dans les niveaux de fonctionnalités **Essentials** et **Plus**. Les groupes d'utilisateurs du niveau **Lite** peuvent recevoir des `v1_0` événements. Les groupes d'utilisateurs du niveau **Lite** dotés de fonctionnalités de sécurité avancées peuvent recevoir `v1_0` des `v2_0` événements.

2 Configurez votre déclencheur avant la génération du jeton sur la version de l'événement `v1_0` pour le jeton d'identification uniquement, `v2_0` pour l'identifiant et le jeton d'accès, `v3_0` pour l'identifiant et le jeton d'accès avec des fonctionnalités pour les identités des machines.

3 Pour supprimer les `cognito:roles` revendications `cognito:preferred_role` et, ajoutez `cognito:groups` à`claimsToSuppress`.

4 Vous pouvez ajouter une `aud` demande d'accès aux jetons, mais sa valeur doit correspondre à l'ID client de l'application de la session en cours. Vous pouvez obtenir l’ID du client dans l’événement de demande à partir de`event.callerContext.clientId`.

## Personnalisation du jeton d’identité
<a name="user-pool-lambda-pre-token-generation-idtoken"></a>

Avec toutes les versions événementielles du déclencheur Lambda antérieur à la génération des jetons, vous pouvez personnaliser le contenu d'un jeton d'identité (ID) à partir de votre groupe d'utilisateurs. Le jeton d’identification fournit des attributs utilisateur provenant d’une source d’identité fiable pour la connexion à une application Web ou mobile. Pour plus d’informations sur les jetons d’identification, consultez [Comprendre le jeton d'identité (ID)](amazon-cognito-user-pools-using-the-id-token.md).

Les utilisations du déclencheur Lambda de prégénération du jeton avec un jeton d’identification sont les suivantes.
+ Lors de l’exécution, modifiez le rôle IAM que votre utilisateur demande à partir d’une réserve d’identités.
+ Ajoutez des attributs utilisateur provenant d’une source externe.
+ Ajoutez ou remplacez les valeurs d’attributs utilisateur existantes.
+ Supprimez la divulgation des attributs utilisateur qui, en raison des portées autorisées de votre utilisateur et de l’accès en lecture aux attributs que vous avez accordé à votre client d’application, seraient autrement transmis à votre application.

## Personnalisation du jeton d’accès
<a name="user-pool-lambda-pre-token-generation-accesstoken"></a>

Avec les versions 2 et 3 des événements du déclencheur Lambda antérieur à la génération des jetons, vous pouvez personnaliser le contenu d'un jeton d'accès à partir de votre groupe d'utilisateurs. Le jeton d'accès autorise les utilisateurs à récupérer des informations à partir de ressources dont l'accès est protégé, telles que les opérations d'API autorisées par le jeton Amazon Cognito et celles de tiers. APIs Pour une autorisation machine-to-machine (M2M) avec attribution d'informations d'identification client, Amazon Cognito n'invoque le déclencheur préalable à la génération du jeton que lorsque votre groupe d'utilisateurs est configuré pour un événement de version 3 `V3_0` (). Pour plus d’informations sur les jetons d’accès, consultez [Comprendre le jeton d'accès](amazon-cognito-user-pools-using-the-access-token.md).

Les utilisations du déclencheur Lambda de prégénération du jeton avec un jeton d’accès sont les suivantes.
+ Ajoutez ou supprimez des champs d'application dans la `scope` réclamation. Par exemple, vous pouvez ajouter des portées à un jeton d’accès issu de l’authentification de l’API des groupes d’utilisateurs Amazon Cognito, qui attribue uniquement la portée `aws.cognito.signin.user.admin`.
+ Modifiez l’appartenance d’un utilisateur à des groupes de groupes d’utilisateurs.
+ Ajoutez des demandes qui ne figurent pas déjà dans un jeton d’accès Amazon Cognito.
+ Supprimez la divulgation de demandes qui seraient autrement transmises à votre application.

Pour prendre en charge la personnalisation de l’accès dans votre groupe d’utilisateurs, vous devez configurer le groupe d’utilisateurs pour générer une version mise à jour de la demande de déclenchement. Mettez à jour votre groupe d’utilisateurs comme indiqué dans la procédure suivante.

------
#### [ AWS Management Console ]

**Pour prendre en charge la personnalisation du jeton d’accès dans un déclencheur Lambda de prégénération du jeton**

1. Accédez à la [console Amazon Cognito](https://console.aws.amazon.com/cognito/home), puis choisissez **User Pools** (Groupes d’utilisateurs).

1. Choisissez un groupe d’utilisateurs existant dans la liste ou [créez-en un](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Choisissez le menu **Extensions** et localisez les déclencheurs **Lambda**.

1. Ajoutez ou modifiez un **déclencheur de prégénération de jetons**.

1. Choisissez une fonction Lambda sous **Attribuer une fonction Lambda**. 

1. Choisissez une **version Trigger Event** des **fonctionnalités de base \$1 personnalisation des jetons d'accès pour les identités des utilisateurs ou des** **fonctionnalités de base \$1 personnalisation des jetons d'accès pour les identités des utilisateurs et des machines**. Ce paramètre met à jour les paramètres de demande qu’Amazon Cognito envoie à votre fonction afin d’inclure des champs pour la personnalisation des jetons d’accès.

------
#### [ User pools API ]

**Pour prendre en charge la personnalisation du jeton d’accès dans un déclencheur Lambda de prégénération du jeton**

Générez une requête [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)ou une demande d'[UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API. Vous devez spécifier une valeur pour tous les paramètres auxquels vous ne voulez pas attribuer une valeur par défaut. Pour de plus amples informations, veuillez consulter [Mise à jour de la configuration du pool d'utilisateurs et du client d'applications](cognito-user-pool-updating.md).

Incluez le contenu suivant dans le paramètre `LambdaVersion` de votre demande. `LambdaVersion`La valeur de `V2_0` oblige votre groupe d'utilisateurs à ajouter des paramètres et à apporter des modifications aux jetons d'accès. Une `LambdaVersion` valeur de `V3_0` produit le même événement que`V2_0`, mais amène votre groupe d'utilisateurs à appliquer *également* les modifications aux jetons d'accès M2M. Pour appeler une version de fonction spécifique, utilisez un ARN de fonction Lambda avec une version de fonction comme valeur de `LambdaArn`.

```
"PreTokenGenerationConfig": { 
   "LambdaArn": "arn:aws:lambda:us-west-2:123456789012:function:MyFunction",
   "LambdaVersion": "V3_0"
},
```

------

**Métadonnées client pour les informations d' machine-to-machineidentification des clients (M2M)**  
Vous pouvez transmettre les [métadonnées du client dans les](cognito-user-pools-working-with-lambda-triggers.md#working-with-lambda-trigger-client-metadata) demandes M2M. Les métadonnées du client sont des informations supplémentaires provenant d'un utilisateur ou d'un environnement d'application qui peuvent contribuer aux résultats d'un[Déclencheur Lambda avant génération de jeton](#user-pool-lambda-pre-token-generation). Lors des opérations d'authentification avec un utilisateur principal, vous pouvez transmettre les métadonnées du client au déclencheur de pré-génération du jeton dans le corps des demandes d'[RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)et d'API. Dans la mesure où les applications gèrent le flux de génération de jetons d'accès pour le M2M avec des demandes directes adressées au[Point de terminaison de jeton](token-endpoint.md), elles ont un modèle différent. Dans le corps POST des demandes de jetons pour les informations d'identification du client, transmettez un `aws_client_metadata` paramètre avec l'objet de métadonnées client encodé en URL (`x-www-form-urlencoded`) à une chaîne. Pour obtenir un exemple de demande, consultez [Informations d'identification du client avec autorisation de baseInformations d'identification du client avec autorisation POST](token-endpoint.md#exchanging-client-credentials-for-an-access-token-in-request-body). Voici un exemple de paramètre qui transmet les paires clé-valeur. `{"environment": "dev", "language": "en-US"}`

```
aws_client_metadata=%7B%22environment%22%3A%20%22dev%22,%20%22language%22%3A%20%22en-US%22%7D
```

**Ressources supplémentaires**
+ [Comment personnaliser les jetons d'accès dans les groupes d'utilisateurs Amazon Cognito](https://aws.amazon.com/blogs/security/how-to-customize-access-tokens-in-amazon-cognito-user-pools/)

**Topics**
+ [Versions de l’événement](#user-pool-lambda-pre-token-generation-event-versions)
+ [Référence aux revendications et aux champs d'application](#user-pool-lambda-pre-token-generation-excluded-claims)
+ [Personnalisation du jeton d’identité](#user-pool-lambda-pre-token-generation-idtoken)
+ [Personnalisation du jeton d’accès](#user-pool-lambda-pre-token-generation-accesstoken)
+ [Sources du déclencheur Lambda avant la génération de jeton](#user-pool-lambda-pre-token-generation-trigger-source)
+ [Paramètres du déclencheur Lambda avant la génération de jeton](#cognito-user-pools-lambda-trigger-syntax-pre-token-generation)
+ [Exemple de version 2 d’un événement déclencheur avant le jeton : ajout et suppression de demandes, de champs d’application et de groupes](#aws-lambda-triggers-pre-token-generation-example-version-2-overview)
+ [Exemple de version 2 d'un événement antérieur à la génération de jetons : ajout de revendications contenant des objets complexes](#aws-lambda-triggers-pre-token-generation-example-version-2-complex-objects)
+ [Exemple de version 1 d’un événement avant la génération du jeton : ajout d’une nouvelle demande et suppression d’une demande existante](#aws-lambda-triggers-pre-token-generation-version-1-add-claim)
+ [Exemple de version 1 d’un événement avant la génération du jeton : modification de l’appartenance de l’utilisateur au groupe](#aws-lambda-triggers-pre-token-generation-version-1-change-group)

## Sources du déclencheur Lambda avant la génération de jeton
<a name="user-pool-lambda-pre-token-generation-trigger-source"></a>


| Valeur triggerSource | Événement | 
| --- | --- | 
| TokenGeneration\$1HostedAuth | Appelé lors de l'authentification depuis la page de connexion gérée par Amazon Cognito. | 
| TokenGeneration\$1Authentication | Appelé lorsque les flux d’authentification d’utilisateur sont terminés. | 
| TokenGeneration\$1NewPasswordChallenge | Appelé après la création de l’utilisateur par un administrateur. Ce flux est appelé lorsque l’utilisateur doit changer un mot de passe temporaire. | 
| TokenGeneration\$1ClientCredentials | Appelé après l'octroi des informations d'identification d'un client M2M. Votre groupe d'utilisateurs n'envoie cet événement que lorsque la version de votre événement l'estV3\$10. | 
| TokenGeneration\$1AuthenticateDevice | Appelé à la fin de l’authentification d’un dispositif d’utilisateur. | 
| TokenGeneration\$1RefreshTokens | Appelé lorsqu’un utilisateur tente d’actualiser les jetons d’identité et d’accès. | 

## Paramètres du déclencheur Lambda avant la génération de jeton
<a name="cognito-user-pools-lambda-trigger-syntax-pre-token-generation"></a>

La demande qu’Amazon Cognito transmet à cette fonction Lambda est une combinaison des paramètres ci-dessous et des [paramètres courants](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) qu’Amazon Cognito ajoute à toutes les demandes. Lorsque vous ajoutez un déclencheur Lambda de prégénération de jetons à votre groupe d’utilisateurs, vous pouvez choisir la version du déclencheur. Cette version détermine si Amazon Cognito transmet une demande à votre fonction Lambda avec des paramètres supplémentaires pour la personnalisation des jetons d’accès.

------
#### [ Version one ]

Le jeton version 1 peut définir l'appartenance à un groupe, les rôles IAM et les nouvelles réclamations sous forme de jetons d'identification. Les dérogations relatives à l'adhésion à un groupe s'appliquent également à la `cognito:groups` réclamation de jetons d'accès.

```
{
    "request": {
        "userAttributes": {"string": "string"},
        "groupConfiguration": {
                "groupsToOverride": [
                    "string",
                    "string"
                ],
                "iamRolesToOverride": [
                    "string",
                    "string"
                ],
                "preferredRole": "string"
        },
        "clientMetadata": {"string": "string"}
    },
    "response": {
        "claimsOverrideDetails": {
            "claimsToAddOrOverride": {"string": "string"},
            "claimsToSuppress": [
                "string",
                "string"
            ],
            "groupOverrideDetails": {
                "groupsToOverride": [
                    "string",
                    "string"
                ],
                "iamRolesToOverride": [
                    "string",
                    "string"
                ],
                "preferredRole": "string"
            }
        }
    }
}
```

------
#### [ Versions two and three ]

Les événements de demande des versions deux et trois ajoutent des champs qui personnalisent le jeton d'accès. Les groupes d'utilisateurs appliquent les modifications apportées par rapport aux événements de la version 3 aux jetons d'accès pour les identités des machines. Ces versions ajoutent également la prise en charge des types de `claimsToOverride` données complexes dans l'objet de réponse. Votre fonction Lambda peut renvoyer les types de données suivants sous la valeur de : `claimsToOverride`
+ String
+ Number
+ Booléen
+ Tableau de chaînes, de nombres, de booléens ou d'une combinaison de ces éléments
+ JSON

```
{
    "request": {
        "userAttributes": {
            "string": "string"
        },
        "scopes": ["string", "string"],
        "groupConfiguration": {
            "groupsToOverride": ["string", "string"],
            "iamRolesToOverride": ["string", "string"],
            "preferredRole": "string"
        },
        "clientMetadata": {
            "string": "string"
        }
    },
    "response": {
        "claimsAndScopeOverrideDetails": {
            "idTokenGeneration": {
                "claimsToAddOrOverride": {
                    "string": [accepted datatype]
                },
                "claimsToSuppress": ["string", "string"]
            },
            "accessTokenGeneration": {
                "claimsToAddOrOverride": {
                    "string": [accepted datatype]
                },
                "claimsToSuppress": ["string", "string"],
                "scopesToAdd": ["string", "string"],
                "scopesToSuppress": ["string", "string"]
            },
            "groupOverrideDetails": {
                "groupsToOverride": ["string", "string"],
                "iamRolesToOverride": ["string", "string"],
                "preferredRole": "string"
            }
        }
    }
}
```

------

### Paramètres de demande avant la génération de jeton
<a name="cognito-user-pools-lambda-trigger-syntax-pre-token-generation-request"></a>


| Nom | Description | Version minimale de l’événement déclencheur | 
| --- |--- |--- |
| userAttributes |  Attributs du profil de votre utilisateur dans votre groupe d’utilisateurs.  | 1 | 
| groupConfiguration |  Objet en entrée qui contient la configuration de groupe actuelle. L'objet inclut `groupsToOverride`, `iamRolesToOverride` et `preferredRole`.  | 1 | 
| groupsToOverride |  [Groupes du groupe d’utilisateurs](cognito-user-pools-user-groups.md#cognito-user-pools-user-groups.title) dont votre utilisateur est membre.  | 1 | 
| iamRolesToRemplacer |  Vous pouvez associer un groupe d'utilisateurs à un rôle Gestion des identités et des accès AWS (IAM). Cet élément est une liste de tous les rôles IAM des groupes dont votre utilisateur est membre.  | 1 | 
| preferredRole |  Vous pouvez définir une [priorité](cognito-user-pools-user-groups.md#assigning-precedence-values-to-groups.title) pour les groupes de groupes d’utilisateurs. Cet élément contient le nom du rôle IAM du groupe ayant la priorité la plus élevée dans l’élément `groupsToOverride`.  | 1 | 
| clientMetadata |  Une ou plusieurs paires clé-valeur que vous pouvez spécifier et fournir en tant qu'entrée personnalisée à la fonction Lambda pour le déclencheur avant la génération de jeton. Pour transmettre ces données à votre fonction Lambda, utilisez le ClientMetadata paramètre dans les opérations [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)et [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. Amazon Cognito n'inclut pas les données issues du `ClientMetadata` paramètre [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)et des opérations d'[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API dans la demande transmise à la fonction de pré-génération du jeton.  | 1 | 
| portées |  Portée des jetons d'accès. Les portées présentes dans un jeton d’accès sont les portées standard et personnalisées du groupe d’utilisateurs demandées par votre utilisateur et que vous avez autorisé votre client d’application à émettre.  | 2 | 

### Paramètres de réponse avant la génération de jeton
<a name="cognito-user-pools-lambda-trigger-syntax-pre-token-generation-response"></a>


| Nom | Description | Version minimale de l’événement déclencheur | 
| --- |--- |--- |
| claimsOverrideDetails | Un conteneur pour tous les éléments d’un événement déclencheur V1\$10. | 1 | 
| claimsAndScopeOverrideDetails |  Un conteneur pour tous les éléments d'un événement `V2_0` ou d'un événement `V3_0` déclencheur.  | 2 | 
| idTokenGeneration |  Les demandes que vous souhaitez remplacer, ajouter ou supprimer dans le jeton d’identification de votre utilisateur. Les valeurs de personnalisation de ce parent par rapport au jeton d'identification apparaissent uniquement dans les événements de version 2 et supérieures, mais les éléments enfants apparaissent dans les événements de version 1.  | 2 | 
| accessTokenGeneration |  Les demandes que vous souhaitez remplacer, ajouter ou supprimer dans le jeton d’accès de votre utilisateur. Ce parent permettant d'accéder aux valeurs de personnalisation des jetons n'apparaît que dans les versions 2 et supérieures de l'événement.  | 2 | 
| claimsToAddOrOverride |  Carte d’une ou de plusieurs demandes et de leurs valeurs que vous souhaitez ajouter ou modifier. Pour les demandes associées au groupe, utilisez plutôt `groupOverrideDetails`. Dans les versions 2 et supérieures de l'événement, cet élément apparaît à la fois sous `accessTokenGeneration` et`idTokenGeneration`.  | 1 [*](#cognito-pretoken-complex-objects-note) | 
| claimsToSuppress |  Liste des demandes que vous voulez qu’Amazon Cognito supprime. Si votre fonction supprime et remplace une valeur de revendication, Amazon Cognito supprime la revendication. Dans les versions 2 et supérieures de l'événement, cet élément apparaît à la fois sous `accessTokenGeneration` et`idTokenGeneration`.  | 1 | 
| groupOverrideDetails |  Objet en sortie qui contient la configuration de groupe actuelle. L’objet inclut `groupsToOverride`, `iamRolesToOverride` et `preferredRole`. Votre fonction remplace l’objet `groupOverrideDetails` par l’objet que vous fournissez. Si vous fournissez un objet vide ou null dans la réponse, Amazon Cognito supprime les groupes. Pour laisser la configuration de groupe existante telle quelle, copiez la valeur de l’objet `groupConfiguration` de la demande dans l’objet `groupOverrideDetails` de la réponse. Ensuite, retransmettez-la au service. Les jetons d’identification et d’accès Amazon Cognito contiennent tous les deux les demandes `cognito:groups`. Votre objet `groupOverrideDetails` remplace la demande `cognito:groups` dans les jetons d’accès et les jetons d’identification. Les dérogations de groupe sont les seules modifications que les événements de version 1 peuvent apporter au jeton d'accès.  | 1 | 
| scopesToAdd |  Liste des champs d'application que vous souhaitez ajouter à la `scope` réclamation dans le jeton d'accès de votre utilisateur. Vous ne pouvez pas ajouter de valeurs de portée contenant un ou plusieurs espaces vides.  | 2 | 
| scopesToSuppress |  Liste des champs d'application que vous souhaitez supprimer de la `scope` réclamation dans le jeton d'accès de votre utilisateur.  | 2 | 

\$1 Les objets de réponse aux événements de la première version peuvent renvoyer des chaînes. Les objets de réponse aux événements des versions 2 et 3 peuvent renvoyer [des objets complexes](#user-pool-lambda-pre-token-generation-event-versions).

## Exemple de version 2 d’un événement déclencheur avant le jeton : ajout et suppression de demandes, de champs d’application et de groupes
<a name="aws-lambda-triggers-pre-token-generation-example-version-2-overview"></a>

Cet exemple apporte les modifications suivantes aux jetons d’un utilisateur.

1. Définit leur valeur `family_name` comme `Doe` dans le jeton d’identification.

1. Évite que les demandes `email` et `phone_number` n’apparaissent dans le jeton d’identification.

1. Définit leur demande de jeton d’identification `cognito:roles` sur `"arn:aws:iam::123456789012:role\/sns_callerA","arn:aws:iam::123456789012:role\/sns_callerC","arn:aws:iam::123456789012:role\/sns_callerB"`.

1. Définit leur demande de jeton d’identification `cognito:preferred_role` sur `arn:aws:iam::123456789012:role/sns_caller`.

1. Ajoute les portées `openid`, `email` et `solar-system-data/asteroids.add` au jeton d’accès.

1. Supprime les portées `phone_number` et `aws.cognito.signin.user.admin` du jeton d’accès. La suppression de `phone_number` empêche la récupération du numéro de téléphone de l’utilisateur à partir de `userInfo`. La suppression de `aws.cognito.signin.user.admin` empêche les demandes d’API de l’utilisateur de lire et de modifier son propre profil avec l’API des groupes d’utilisateurs Amazon Cognito.
**Note**  
La suppression de `phone_number` des portées empêche uniquement la récupération du numéro de téléphone d’un utilisateur si les portées restantes du jeton d’accès incluent `openid` et au moins une autre portée standard. Pour de plus amples informations, veuillez consulter [À propos des portées](cognito-user-pools-define-resource-servers.md#cognito-user-pools-define-resource-servers-about-scopes).

1. Définit leur demande de jeton d’identification et d’accès `cognito:groups` sur `"new-group-A","new-group-B","new-group-C"`.

------
#### [ JavaScript ]

```
export const handler = function(event, context) {
  event.response = {
    "claimsAndScopeOverrideDetails": {
      "idTokenGeneration": {
        "claimsToAddOrOverride": {
          "family_name": "Doe"
        },
        "claimsToSuppress": [
          "email",
          "phone_number"
        ]
      },
      "accessTokenGeneration": {
        "scopesToAdd": [
          "openid",
          "email",
          "solar-system-data/asteroids.add"
        ],
        "scopesToSuppress": [
          "phone_number",
          "aws.cognito.signin.user.admin"
        ]
      },
      "groupOverrideDetails": {
        "groupsToOverride": [
          "new-group-A",
          "new-group-B",
          "new-group-C"
        ],
        "iamRolesToOverride": [
          "arn:aws:iam::123456789012:role/new_roleA",
          "arn:aws:iam::123456789012:role/new_roleB",
          "arn:aws:iam::123456789012:role/new_roleC"
        ],
        "preferredRole": "arn:aws:iam::123456789012:role/new_role",
      }
    }
  };
  // Return to Amazon Cognito
  context.done(null, event);
};
```

------

Amazon Cognito transmet les informations d’événement à votre fonction Lambda. Cette fonction renvoie alors le même objet d’événement à Amazon Cognito, avec d’éventuelles modifications dans la réponse. Dans la console Lambda, vous pouvez configurer un événement de test avec des données pertinentes pour votre déclencheur Lambda. Voici un événement de test pour cet exemple de code :

------
#### [ JSON ]

```
{
    "version": "2",
    "triggerSource": "TokenGeneration_Authentication",
    "region": "us-east-1",
    "userPoolId": "us-east-1_EXAMPLE",
    "userName": "JaneDoe",
    "callerContext": {
        "awsSdkVersion": "aws-sdk-unknown-unknown",
        "clientId": "1example23456789"
    },
    "request": {
        "userAttributes": {
            "sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
            "cognito:user_status": "CONFIRMED",
            "email_verified": "true",
            "phone_number_verified": "true",
            "phone_number": "+12065551212",
            "family_name": "Zoe",
            "email": "Jane.Doe@example.com"
        },
        "groupConfiguration": {
            "groupsToOverride": ["group-1", "group-2", "group-3"],
            "iamRolesToOverride": ["arn:aws:iam::123456789012:role/sns_caller1", "arn:aws:iam::123456789012:role/sns_caller2", "arn:aws:iam::123456789012:role/sns_caller3"],
            "preferredRole": ["arn:aws:iam::123456789012:role/sns_caller"]
        },
        "scopes": [
            "aws.cognito.signin.user.admin", "openid", "email", "phone"
        ]
    },
    "response": {
        "claimsAndScopeOverrideDetails": []
    }
}
```

------

## Exemple de version 2 d'un événement antérieur à la génération de jetons : ajout de revendications contenant des objets complexes
<a name="aws-lambda-triggers-pre-token-generation-example-version-2-complex-objects"></a>

Cet exemple apporte les modifications suivantes aux jetons d’un utilisateur.

1. Ajoute des revendications de types numérique, chaîne, booléen et JSON au jeton d'identification. Il s'agit de la seule modification que les événements déclencheurs de la version 2 mettent à la disposition du jeton d'identification.

1. Ajoute des revendications de types numérique, chaîne, booléen et JSON au jeton d'accès.

1. Ajoute trois étendues au jeton d'accès.

1. Supprime la `email` réclamation dans l'identifiant et les jetons d'accès.

1. Supprime l'`aws.cognito.signin.user.admin`étendue du jeton d'accès.

------
#### [ JavaScript ]

```
export const handler = function(event, context) {

    var scopes = ["MyAPI.read", "MyAPI.write", "MyAPI.admin"]
    var claims = {}
    claims["aud"]= event.callerContext.clientId;
    claims["booleanTest"] = false;
    claims["longTest"] = 9223372036854775807;
    claims["exponentTest"] = 1.7976931348623157E308;
    claims["ArrayTest"] = ["test", 9223372036854775807, 1.7976931348623157E308, true];
    claims["longStringTest"] = "\{\
        \"first_json_block\": \{\
            \"key_A\": \"value_A\",\
            \"key_B\": \"value_B\"\
        \},\
        \"second_json_block\": \{\
            \"key_C\": \{\
                \"subkey_D\": [\
                    \"value_D\",\
                    \"value_E\"\
                ],\
                \"subkey_F\": \"value_F\"\
            \},\
            \"key_G\": \"value_G\"\
        \}\
    \}";
    claims["jsonTest"] = {
    	"first_json_block": {
    		"key_A": "value_A",
    		"key_B": "value_B"
    	},
    	"second_json_block": {
    		"key_C": {
    			"subkey_D": [
    				"value_D",
    				"value_E"
    			],
    			"subkey_F": "value_F"
    		},
    		"key_G": "value_G"
    	}
    };
    event.response = {
        "claimsAndScopeOverrideDetails": {
            "idTokenGeneration": {
                "claimsToAddOrOverride": claims,
                "claimsToSuppress": ["email"]
            },
            "accessTokenGeneration": {
                "claimsToAddOrOverride": claims,
                "claimsToSuppress": ["email"],
                "scopesToAdd": scopes,
                "scopesToSuppress": ["aws.cognito.signin.user.admin"]
            }
        }
    };
    console.info("EVENT response\n" + JSON.stringify(event, (_, v) => typeof v === 'bigint' ? v.toString() : v, 2))
    console.info("EVENT response size\n" + JSON.stringify(event, (_, v) => typeof v === 'bigint' ? v.toString() : v).length)
    // Return to Amazon Cognito
    context.done(null, event);
};
```

------

Amazon Cognito transmet les informations d’événement à votre fonction Lambda. Cette fonction renvoie alors le même objet d’événement à Amazon Cognito, avec d’éventuelles modifications dans la réponse. Dans la console Lambda, vous pouvez configurer un événement de test avec des données pertinentes pour votre déclencheur Lambda. Voici un événement de test pour cet exemple de code :

------
#### [ JSON ]

```
{
    "version": "2",
    "triggerSource": "TokenGeneration_HostedAuth",
    "region": "us-west-2",
    "userPoolId": "us-west-2_EXAMPLE",
    "userName": "JaneDoe",
    "callerContext": {
        "awsSdkVersion": "aws-sdk-unknown-unknown",
        "clientId": "1example23456789"
    },
    "request": {
        "userAttributes": {
            "sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
            "cognito:user_status": "CONFIRMED"
            "email_verified": "true",
            "phone_number_verified": "true",
            "phone_number": "+12065551212",
            "email": "Jane.Doe@example.com"
        },
        "groupConfiguration": {
            "groupsToOverride": ["group-1", "group-2", "group-3"],
            "iamRolesToOverride": ["arn:aws:iam::123456789012:role/sns_caller1"],
            "preferredRole": ["arn:aws:iam::123456789012:role/sns_caller1"]
        },
        "scopes": [
            "aws.cognito.signin.user.admin",
            "phone",
            "openid",
            "profile",
            "email"
        ]
    },
    "response": {
        "claimsAndScopeOverrideDetails": []
    }
}
```

------

## Exemple de version 1 d’un événement avant la génération du jeton : ajout d’une nouvelle demande et suppression d’une demande existante
<a name="aws-lambda-triggers-pre-token-generation-version-1-add-claim"></a>

Cet exemple utilise l’événement déclencheur version 1 avec une fonction Lambda de prégénération du jeton pour ajouter une nouvelle demande et en supprimer une existante.

------
#### [ Node.js ]

```
const handler = async (event) => {
  event.response = {
    claimsOverrideDetails: {
      claimsToAddOrOverride: {
        my_first_attribute: "first_value",
        my_second_attribute: "second_value",
      },
      claimsToSuppress: ["email"],
    },
  };

  return event;
};

export { handler };
```

------

Amazon Cognito transmet les informations d’événement à votre fonction Lambda. Cette fonction renvoie alors le même objet d’événement à Amazon Cognito, avec d’éventuelles modifications dans la réponse. Dans la console Lambda, vous pouvez configurer un événement de test avec des données pertinentes pour votre déclencheur Lambda. Un événement de test pour cet exemple de code est fourni ci-dessous. Comme l’exemple de code ne traite pas de paramètres de demande, vous pouvez utiliser un événement de test avec une demande vide. Pour plus d’informations sur les paramètres de demande communs, consultez [Événement déclencheur Lambda d'un groupe d'utilisateurs](cognito-user-pools-working-with-lambda-triggers.md#cognito-user-pools-lambda-trigger-event-parameter-shared).

------
#### [ JSON ]

```
{
  "request": {},
  "response": {}
}
```

------

## Exemple de version 1 d’un événement avant la génération du jeton : modification de l’appartenance de l’utilisateur au groupe
<a name="aws-lambda-triggers-pre-token-generation-version-1-change-group"></a>

Cet exemple utilise l’événement déclencheur version 1 avec une fonction Lambda avant la génération du jeton pour modifier l’appartenance au groupe de l’utilisateur.

------
#### [ Node.js ]

```
const handler = async (event) => {
  event.response = {
    claimsOverrideDetails: {
      groupOverrideDetails: {
        groupsToOverride: ["group-A", "group-B", "group-C"],
        iamRolesToOverride: [
          "arn:aws:iam::XXXXXXXXXXXX:role/sns_callerA",
          "arn:aws:iam::XXXXXXXXX:role/sns_callerB",
          "arn:aws:iam::XXXXXXXXXX:role/sns_callerC",
        ],
        preferredRole: "arn:aws:iam::XXXXXXXXXXX:role/sns_caller",
      },
    },
  };

  return event;
};

export { handler };
```

------

Amazon Cognito transmet les informations d’événement à votre fonction Lambda. Cette fonction renvoie alors le même objet d’événement à Amazon Cognito, avec d’éventuelles modifications dans la réponse. Dans la console Lambda, vous pouvez configurer un événement de test avec des données pertinentes pour votre déclencheur Lambda. Voici un événement de test pour cet exemple de code :

------
#### [ JSON ]

```
{
  "request": {},
  "response": {}
}
```

------