

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Desencadenador de Lambda anterior a la generación del token
<a name="user-pool-lambda-pre-token-generation"></a>

Dado que Amazon Cognito invoca este desencadenador antes de que se genere el token, puede personalizar las notificaciones de los tokens del grupo de usuarios. Con las **Características básicas** de la versión dos o del evento desencadenante previo a la generación del token `V1_0`, puede personalizar el token de identidad (ID). En los grupos de usuarios con el plan de funciones Essentials o Plus, puede generar la versión dos o el evento `V2_0` desencadenante con la personalización del token de acceso, y la versión tres o el evento `V3_0` desencadenante con la personalización del token de acceso para la concesión de credenciales de cliente machine-to-machine (M2M).

Amazon Cognito envía un evento `V1_0` como una solicitud a la función con datos que escribiría en el token de ID. Un evento `V2_0` o `V3_0` es una solicitud única con los datos que Amazon Cognito escribiría en los tokens tanto de identidad y de acceso. Para personalizar ambos tokens, debe actualizar la función para usar la versión dos o tres del desencadenador y enviar los datos de ambos tokens en la misma respuesta.

Amazon Cognito aplica las respuestas a eventos de la versión dos a los tokens de acceso de la autenticación de usuario, en la que un usuario humano ha presentado las credenciales a su grupo de usuarios. Las respuestas a los eventos de la versión tres se aplican a los tokens de acceso procedentes de la autenticación de usuario y de la autenticación automática, en la que los sistemas automatizados autorizan las solicitudes de token de acceso con los secretos del cliente de la aplicación. Aparte de las circunstancias de los tokens de acceso resultantes, los eventos de las versiones dos y tres son idénticos.

Este desencadenador Lambda puede añadir, eliminar y modificar algunas notificaciones en los tokens de identidad y acceso antes de que Amazon Cognito las envíe a su aplicación. Para utilizar esta característica, asocie una función de Lambda desde la consola del grupos de usuarios de Amazon Cognito o actualice su grupo de usuarios `LambdaConfig` a través de la ( AWS Command Line Interface )AWS CLI.

## Versiones de eventos
<a name="user-pool-lambda-pre-token-generation-event-versions"></a>

Su grupo de usuarios puede entregar a su función de Lambda diferentes versiones de un evento desencadenante anterior a la generación del token. Un desencadenador `V1_0` proporciona los parámetros de modificación de los tokens de ID. Un desencadenador `V2_0` o `V3_0` proporciona parámetros para lo siguiente.

1. Las funciones de un desencadenador `V1_0`.

1. La posibilidad de personalizar los tokens de acceso.

1. La capacidad de transferir tipos de datos complejos y los valores de notificación de los tokens de ID y de acceso:
   + Cadena
   + Número
   + Booleano
   + Matriz de cadenas, números, valores booleanos o una combinación de cualquiera de ellos
   + JSON

**nota**  
En el token de ID, puede rellenar con objetos complejos los valores de las notificaciones excepto `phone_number_verified`, `email_verified`, `updated_at` y `address`.

Los grupos de usuarios proporcionan de forma predeterminada eventos para `V1_0`. A fin de configurar el grupo de usuarios para enviar un evento de `V2_0`, elija la opción **Versión del evento desencadenador** en **Características básicas \$1 personalización del token de acceso para identidades de usuario** al configurar el desencadenador en la consola de Amazon Cognito. Para producir eventos `V3_0`, elija ****Características básicas \$1 personalización del token de acceso para las identidades de usuario y máquina****. También puede establecer el valor de `LambdaVersion` en los [LambdaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#CognitoUserPools-UpdateUserPool-request-LambdaConfig)parámetros de una solicitud [UpdateUserPool ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)o [CreateUserPool ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)de API. Las versiones uno, dos y tres de los eventos están disponibles en los planes de características **Essentials** y **Plus**. Las operaciones M2M para los eventos de la tercera versión tienen una estructura de precios independiente de la fórmula de usuarios activos mensuales (MAU). Para obtener más información, consulte [Precios de Amazon Cognito](https://aws.amazon.com/cognito/pricing/).

**nota**  
Los grupos de usuarios que estaban operativos con la opción **Características avanzadas de seguridad** antes del 22 de noviembre de 2024 a las 18:00 GMT y que permanecen en el nivel de características **Lite** tienen acceso a las versiones uno y dos de los eventos del desencadenador Antes de la generación del token. Los grupos de usuarios de este nivel antiguo *sin* características de seguridad avanzadas tienen acceso a la primera versión del evento. La versión tres *solo* está disponible en Essentials y Plus.

## Referencia sobre reclamaciones y ámbitos
<a name="user-pool-lambda-pre-token-generation-excluded-claims"></a>

Amazon Cognito limita las reclamaciones y los ámbitos que puede agregar, modificar o suprimir en los tokens de acceso e identidad. En la siguiente tabla, se describen las notificaciones que la función de Lambda puede y no puede modificar, así como los parámetros del evento desencadenador que afectan a la presencia o al valor de la notificación.


| Reclamación | Tipo de token predeterminado | ¿Puede añadir? | ¿Puede modificar? | ¿Puede suprimir? | Parámetro de evento: añadir o modificar | Parámetro de evento: suprimir | Tipo de identidad | Versión del evento | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| Cualquier reclamación que no esté incluida en el esquema de token del grupo de usuarios | Ninguno | Sí | Sí | N/A | claimsToAddOrOverride | claimsToSuppress | Usuario, máquina [1](#cognito-pretoken-machine-ids-tier-note) | Todos [2](#cognito-pretoken-id-access-versions-note) | 
| scope | Acceso | Sí | Sí | Sí | scopesToAdd | scopesToSuppress | Usuario, máquina [1](#cognito-pretoken-machine-ids-tier-note) | v2\$10, v3\$10 | 
| cognito:groups | ID, acceso | Sí | Sí | Sí | groupsToOverride | claimsToSuppress | Usuario | Todos [2](#cognito-pretoken-id-access-versions-note) | 
| cognito:preferred\$1role | ID | Sí | Sí | Sí | preferredRole | claimsToSuppress[3](#cognito-pretoken-suppress-groups-note) | Usuario | Todos | 
| cognito:roles | ID | Sí | Sí | Sí | iamRolesToOverride | claimsToSuppress[3](#cognito-pretoken-suppress-groups-note) | Usuario | Todos | 
| cognito:username | ID | No | No | No | N/A | N/A | Usuario | N/A | 
| Cualquier otra reclamación con prefijo cognito: | Ninguno | No | No | No | N/A | N/A | N/A | N/A | 
| username | Acceso | No | No | No | N/A | N/A | Usuario | v2\$10, v3\$10 | 
| sub | ID, acceso | No | No | No | N/A | N/A | Usuario | N/A | 
| atributo OIDC estándar | ID | Sí | Sí | Sí | claimsToAddOrOverride | claimsToSuppress | Usuario | Todos | 
| Atributo custom: | ID | Sí | Sí | Sí | claimsToAddOrOverride | claimsToSuppress | Usuario | Todos | 
| Atributo dev: | ID | No | No | Sí | N/A | claimsToSuppress | Usuario | Todos | 
| identities | ID | No | No | No | N/A | N/A | Usuario | N/A | 
| aud[4](#cognito-pretoken-aud-note) | ID | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| client\$1id | Acceso | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| event\$1id | Acceso | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| device\$1key | Acceso | No | No | No | N/A | N/A | Usuario | N/A | 
| version | Acceso | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| acr | ID, acceso | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| amr | ID, acceso | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| at\$1hash | ID | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| auth\$1time | ID, acceso | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| azp | ID, acceso | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| exp | ID, acceso | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| iat | ID, acceso | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| iss | ID, acceso | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| jti | ID, acceso | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| nbf | ID, acceso | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| nonce | ID, acceso | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| origin\$1jti | ID, acceso | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 
| token\$1use | ID, acceso | No | No | No | N/A | N/A | Usuario, máquina  | N/A | 

1 Los tokens de acceso para las identidades de las máquinas solo están disponibles con la versión `v3_0` del evento de entrada del desencadenador. La versión tres solo está disponible en los niveles de características **Essentials** y **Plus**. Los grupos de usuarios del nivel **Lite** pueden recibir eventos `v1_0`. Los grupos de usuarios del nivel **Lite** con características de seguridad avanzadas pueden recibir eventos `v1_0` y `v2_0`.

2 Configure su desencadenador Antes de la generación del token en la versión de eventos `v1_0` solo para el token de ID, en la versión `v2_0` para el token de acceso e ID y en la versión `v3_0` para el token de acceso e ID con capacidades para las identidades de máquinas.

3 Para suprimir las reclamaciones `cognito:preferred_role` y `cognito:roles`, añada `cognito:groups` a `claimsToSuppress`.

 4 Puede agregar una reclamación de `aud` para acceder a los tokens, pero el valor debe coincidir con el ID de cliente de aplicación de la sesión actual. Puede derivar el ID de cliente en el evento de solicitud de `event.callerContext.clientId`.

## Personalización del token de identidad
<a name="user-pool-lambda-pre-token-generation-idtoken"></a>

En todas las versiones de eventos del desencadenador de Lambda Antes de la generación del token, puede personalizar el contenido de un token de identidad (ID) desde su grupo de usuarios. El token de ID proporciona los atributos de usuario de un origen de identidades fiable para iniciar sesión en una aplicación web o móvil. Para obtener más información acerca de los tokens de ID, consulte [Descripción del token de identidad (ID)](amazon-cognito-user-pools-using-the-id-token.md).

Los usos del desencadenador de Lambda previo a la generación de tokens con un token de ID incluyen los siguientes.
+ Realice un cambio en el tiempo de ejecución en el rol de IAM que el usuario solicita de un grupo de identidades.
+ Agregue atributos de usuario desde un origen externo.
+ Agregue o sustituya los valores de los atributos de usuario existentes.
+ Suprima la divulgación de los atributos de usuario que, debido a los ámbitos autorizados del usuario y al acceso de lectura a los atributos que ha concedido al cliente de la aplicación, se transferirían a la aplicación.

## Personalización del token de acceso
<a name="user-pool-lambda-pre-token-generation-accesstoken"></a>

En las versiones de eventos dos y tres del desencadenador de Lambda Antes de la generación del token, puede personalizar el contenido de un token de acceso desde su grupo de usuarios. El token de acceso autoriza a los usuarios a recuperar información de recursos protegidos por el acceso, como las operaciones de API autorizadas por el token de Amazon Cognito y de terceros. APIs En el caso de la autorización machine-to-machine (M2M) con una concesión de credenciales de cliente, Amazon Cognito solo invoca el activador previo a la generación del token cuando el grupo de usuarios está configurado para un evento de la versión tres `V3_0` (). Para obtener más información acerca de los tokens de acceso, consulte [Descripción del token de acceso](amazon-cognito-user-pools-using-the-access-token.md).

Los usos del desencadenador de Lambda previo a la generación de tokens con un token de acceso incluyen los siguientes.
+ Añada o suprima los ámbitos en la reclamación de `scope`. Por ejemplo, puede agregar ámbitos a un token de acceso resultante de la autenticación de la API de grupos de usuarios de Amazon Cognito, que solo asigna el ámbito `aws.cognito.signin.user.admin`.
+ Cambie la suscripción de un usuario en los grupos de usuarios.
+ Agregue notificaciones que aún no estén presentes en un token de acceso de Amazon Cognito.
+ Suprima la divulgación de las reclamaciones que, de otro modo, se transferirían a la aplicación.

Para poder personalizar el acceso al grupo de usuarios, debe configurar el grupo de usuarios para que genere una versión actualizada de la solicitud de desencadenador. Actualice el grupo de usuarios como se muestra en el siguiente procedimiento.

------
#### [ Consola de administración de AWS ]

**Para admitir la personalización del token de acceso en un desencadenador de Lambda previo a la generación de tokens**

1. Diríjase a la [consola de Amazon Cognito](https://console.aws.amazon.com/cognito/home) y luego elija **User Pools (Grupos de usuarios)**.

1. Elija un grupo de usuarios existente en la lista o [cree un grupo de usuarios](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Seleccione el menú **Extensiones** y localice los **desencadenadores de Lambda**.

1. Agregue o edite un **desencadenador previo a la generación de tokens**.

1. Elija una función de Lambda en **Asignar función de Lambda**. 

1. Elija una **versión de evento desencadenador** **Características básicas \$1 personalización de token de acceso para identidades de usuario** o **Características básicas \$1 personalización de token de acceso para identidades de usuario y máquina**. Esta configuración actualiza los parámetros de solicitud que Amazon Cognito envía a la función para incluir campos para la personalización del token de acceso.

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

**Para admitir la personalización del token de acceso en un desencadenador de Lambda previo a la generación de tokens**

Genere una solicitud de API [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)o API. [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) Debe especificar un valor para todos los parámetros que no desee establecer en un valor predeterminado. Para obtener más información, consulte [Actualización de la configuración del grupo de usuarios y del cliente de aplicación](cognito-user-pool-updating.md).

Incluya el siguiente contenido en el parámetro `LambdaVersion` de la solicitud. El valor `V2_0` en `LambdaVersion` hace que el grupo de usuarios agregue parámetros para los tokens de acceso y que aplique los cambios en estos. El valor `V3_0` en `LambdaVersion` produce el mismo evento que `V2_0`, pero hace que su grupo de usuarios *también* aplique cambios a los tokens de acceso M2M. Para invocar una versión de función específica, utilice el ARN de una función de Lambda con una versión de función como el valor de `LambdaArn`.

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

------

**Metadatos de cliente para las credenciales de cliente machine-to-machine (M2M)**  
Puede pasar los [metadatos del cliente](cognito-user-pools-working-with-lambda-triggers.md#working-with-lambda-trigger-client-metadata) en las solicitudes M2M. Los metadatos del cliente son información adicional de un entorno de usuario o aplicación que puede contribuir a los resultados de una [Desencadenador de Lambda anterior a la generación del token](#user-pool-lambda-pre-token-generation). En las operaciones de autenticación con un usuario principal, puede pasar los metadatos del cliente al activador previo a la generación del token en el cuerpo de [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)las solicitudes a la [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. Dado que las aplicaciones dirigen el flujo de generación de tokens de acceso para M2M con solicitudes directas al [Punto de conexión de token](token-endpoint.md), tienen un modelo diferente. En el cuerpo POST de las solicitudes de token para las credenciales de los clientes, pase un parámetro `aws_client_metadata` con el objeto de metadatos del cliente codificado en la URL (`x-www-form-urlencoded`) a cadena. Para obtener una solicitud de ejemplo, consulte [Credenciales de cliente con autorización básicaCredenciales de cliente con autorización en el cuerpo POST](token-endpoint.md#exchanging-client-credentials-for-an-access-token-in-request-body). A continuación, puede ver un ejemplo de parámetro que transfiere los pares clave-valor `{"environment": "dev", "language": "en-US"}`.

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

**Más recursos**
+ [How to customize access tokens in Amazon Cognito user pools](https://aws.amazon.com/blogs/security/how-to-customize-access-tokens-in-amazon-cognito-user-pools/)

**Topics**
+ [Versiones de eventos](#user-pool-lambda-pre-token-generation-event-versions)
+ [Referencia sobre reclamaciones y ámbitos](#user-pool-lambda-pre-token-generation-excluded-claims)
+ [Personalización del token de identidad](#user-pool-lambda-pre-token-generation-idtoken)
+ [Personalización del token de acceso](#user-pool-lambda-pre-token-generation-accesstoken)
+ [Fuentes del desencadenador de Lambda de pregeneración de tokens](#user-pool-lambda-pre-token-generation-trigger-source)
+ [Parámetros del desencadenador de Lambda de pregeneración de tokens](#cognito-user-pools-lambda-trigger-syntax-pre-token-generation)
+ [Ejemplo de la segunda versión de un evento desencadenante previo al token: añadir y suprimir notificaciones, ámbitos y grupos](#aws-lambda-triggers-pre-token-generation-example-version-2-overview)
+ [Ejemplo de la versión dos de evento de generación anterior al token: añadir notificaciones con objetos complejos](#aws-lambda-triggers-pre-token-generation-example-version-2-complex-objects)
+ [Ejemplo uno de versión de evento de generación anterior al token: Agregar una notificación nueva y suprimir otra existente](#aws-lambda-triggers-pre-token-generation-version-1-add-claim)
+ [Ejemplo uno de versión de evento de generación anterior al token: Modificar la pertenencia de un usuario a un grupo](#aws-lambda-triggers-pre-token-generation-version-1-change-group)

## Fuentes del desencadenador de Lambda de pregeneración de tokens
<a name="user-pool-lambda-pre-token-generation-trigger-source"></a>


| Valor de triggerSource | Event | 
| --- | --- | 
| TokenGeneration\$1HostedAuth | Se llama durante la autenticación desde la página de inicio de sesión con el inicio de sesión administrado de Amazon Cognito. | 
| TokenGeneration\$1Authentication | Se llama después de que se hayan completado los flujos de autenticación. | 
| TokenGeneration\$1NewPasswordChallenge | Se llama después de que un administrador cree al usuario. Este flujo se invoca cuando el usuario tiene que cambiar una contraseña temporal. | 
| TokenGeneration\$1ClientCredentials | Se llama después de la concesión de credenciales de un cliente M2M. Su grupo de usuarios solo envía este evento cuando su versión de evento es V3\$10. | 
| TokenGeneration\$1AuthenticateDevice | Se llama al final de la autenticación de un dispositivo de usuario. | 
| TokenGeneration\$1RefreshTokens | Se llama cuando un usuario intenta actualizar los tokens de identidad y acceso. | 

## Parámetros del desencadenador de Lambda de pregeneración de tokens
<a name="cognito-user-pools-lambda-trigger-syntax-pre-token-generation"></a>

La solicitud que Amazon Cognito envía a esta función de Lambda es una combinación de los parámetros que se indican a continuación y los [parámetros comunes](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que Amazon Cognito agrega a todas las solicitudes. Al agregar un desencadenador de Lambda previo a la generación de tokens al grupo de usuarios, puede elegir una versión de desencadenador. Esta versión determina si Amazon Cognito transfiere una solicitud a la función de Lambda con parámetros adicionales para la personalización del token de acceso.

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

El token de la versión uno puede establecer la pertenencia a grupos, los roles de IAM y las nuevas notificaciones en los tokens de ID. La anulación de la pertenencia a un grupo también se aplica a la reclamación `cognito:groups` de los tokens de acceso.

```
{
    "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 ]

Las versiones dos y tres solicitan eventos que añaden campos que personalizan el token de acceso. Los grupos de usuarios aplican los cambios de los eventos de la tercera versión a los tokens de acceso para las identidades de las máquinas. Estas versiones también añaden compatibilidad con tipos de datos `claimsToOverride` complejos en el objeto de respuesta. La función de Lambda puede devolver los siguientes tipos de datos con el valor de `claimsToOverride`:
+ Cadena
+ Número
+ Booleano
+ Matriz de cadenas, números, valores booleanos o una combinación de cualquiera de ellos
+ 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"
            }
        }
    }
}
```

------

### Parámetros de la solicitud anterior a la generación del token
<a name="cognito-user-pools-lambda-trigger-syntax-pre-token-generation-request"></a>


| Name | Description (Descripción) | Versión mínima del evento del desencadenador | 
| --- |--- |--- |
| userAttributes |  Los atributos del perfil de usuario en el grupo de usuarios.  | 1 | 
| groupConfiguration |  Objeto de entrada que contiene la configuración de grupo actual. El objeto incluye `groupsToOverride`, `iamRolesToOverride` y `preferredRole`.  | 1 | 
| groupsToOverride |  Los [grupos del grupo de usuarios](cognito-user-pools-user-groups.md#cognito-user-pools-user-groups.title) de los que es miembro su usuario.  | 1 | 
| iamRolesToAnular |  Puede asociar un grupo de grupos de usuarios a un rol AWS Identity and Access Management (IAM). Este elemento es una lista de todos los roles de IAM de los grupos a los que pertenece su usuario.  | 1 | 
| preferredRole |  Puede establecer una [prioridad](cognito-user-pools-user-groups.md#assigning-precedence-values-to-groups.title) para los grupos del grupo de usuarios. Este elemento contiene el nombre del rol de IAM del grupo con la mayor prioridad en el elemento `groupsToOverride`.  | 1 | 
| clientMetadata |  Uno o varios pares clave-valor que puede especificar y proporcionar como datos de entrada personalizados a la función de Lambda para el desencadenador anterior a la generación del token. Para pasar estos datos a la función Lambda, utilice el ClientMetadata parámetro en las operaciones [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)y [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. Amazon Cognito no incluye datos del `ClientMetadata` parámetro ni de las operaciones de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API en [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)la solicitud que transfiere a la función de generación previa del token.  | 1 | 
| alcances |  Acceda a ámbitos de tokens. Los ámbitos que están presentes en un token de acceso son los ámbitos estándar y personalizados del grupo de usuarios que el usuario ha solicitado y que usted ha autorizado emitir al cliente de la aplicación.  | 2 | 

### Parámetros de la respuesta anterior a la generación del token
<a name="cognito-user-pools-lambda-trigger-syntax-pre-token-generation-response"></a>


| Name | Description (Descripción) | Versión mínima del evento del desencadenador | 
| --- |--- |--- |
| claimsOverrideDetails | Un contenedor para todos los elementos de un evento desencadenante V1\$10. | 1 | 
| claimsAndScopeOverrideDetails |  Un contenedor para todos los elementos de un evento desencadenador `V2_0` o `V3_0`.  | 2 | 
| idTokenGeneration |  Las reclamaciones que desea invalidar, agregar o suprimir en el token del ID de usuario. Estos valores de personalización del token principal al ID aparecen solo en los eventos de la versión 2 o superior, pero los elementos secundarios aparecen en los eventos de la versión 1.  | 2 | 
| accessTokenGeneration |  Las reclamaciones y ámbitos que desea invalidar, agregar o suprimir en el token de acceso del usuario. Este elemento principal para acceder a los valores de personalización del token solo aparece en los eventos de la versión 2 y superior.  | 2 | 
| claimsToAddOrOverride |  Un mapa de una o más reclamaciones y los valores que desee agregar o modificar. Para las reclamaciones relacionadas con el grupo, utilice `groupOverrideDetails` en su lugar. En los eventos de la versión 2 y superior, este elemento aparece en `accessTokenGeneration` y `idTokenGeneration`.  | 1 [*](#cognito-pretoken-complex-objects-note) | 
| claimsToSuppress |  Una lista de reclamaciones que quiere que Amazon Cognito suprima. Si tu función suprime y reemplaza un valor de notificación, Amazon Cognito suprime la notificación. En los eventos de la versión 2 y superior, este elemento aparece en `accessTokenGeneration` y `idTokenGeneration`.  | 1 | 
| groupOverrideDetails |  Objeto de salida que contiene la configuración de grupo actual. El objeto incluye `groupsToOverride`, `iamRolesToOverride` y `preferredRole`. La función sustituye el objeto `groupOverrideDetails` por el objeto que proporcione. Si proporciona un objeto vacío o nulo en la respuesta, entonces Amazon Cognito suprimirá los grupos. Para dejar la configuración de grupos existente tal como está, copie el valor del objeto `groupConfiguration` de la solicitud en el objeto `groupOverrideDetails` de la respuesta. Luego transfiéralo de nuevo al servicio. Los tokens de ID y de acceso de Amazon Cognito contienen la notificación `cognito:groups`. El objeto `groupOverrideDetails` sustituye la reclamación de `cognito:groups` en tokens de acceso y tokens de ID. Las anulaciones de grupo son los únicos cambios en el token de acceso que pueden realizar los eventos de la versión 1.  | 1 | 
| scopesToAdd |  Una lista de ámbitos que quiere agregar a la reclamación de `scope` en el token de acceso del usuario. No puede agregar valores de ámbito que contengan uno o más caracteres de espacio en blanco.  | 2 | 
| scopesToSuppress |  Una lista de ámbitos que quiere eliminar de la reclamación de `scope` en el token de acceso del usuario.  | 2 | 

 \$1 Los objetos de respuesta a los eventos de la versión uno pueden devolver cadenas. Los objetos de respuesta a los eventos de la versión dos y tres pueden devolver [objetos complejos](#user-pool-lambda-pre-token-generation-event-versions).

## Ejemplo de la segunda versión de un evento desencadenante previo al token: añadir y suprimir notificaciones, ámbitos y grupos
<a name="aws-lambda-triggers-pre-token-generation-example-version-2-overview"></a>

En este ejemplo, se realizan las siguientes modificaciones a los tokens de un usuario.

1. Establece su `family_name` como `Doe` en el token de ID.

1. Impide que las notificaciones `email` y `phone_number` aparezcan en el token de ID.

1. Establece su notificación `cognito:roles` de token de ID a `"arn:aws:iam::123456789012:role\/sns_callerA","arn:aws:iam::123456789012:role\/sns_callerC","arn:aws:iam::123456789012:role\/sns_callerB"`.

1. Establece su notificación `cognito:preferred_role` de token de ID a `arn:aws:iam::123456789012:role/sns_caller`.

1. Añade los ámbitos `openid`, `email` y `solar-system-data/asteroids.add` al token de acceso.

1. Suprime el ámbito `phone_number` y `aws.cognito.signin.user.admin` del token de acceso. La eliminación de `phone_number` impide la recuperación del número de teléfono del usuario de `userInfo`. La eliminación de `aws.cognito.signin.user.admin` impide las solicitudes de la API por el usuario para leer y modificar su propio perfil con la API de grupos de usuarios de Amazon Cognito.
**nota**  
La eliminación de `phone_number` de los ámbitos solo impide la recuperación del número de teléfono de un usuario si los ámbitos restantes del token de acceso incluyen `openid` y al menos un ámbito estándar más. Para obtener más información, consulte [Acerca de los ámbitos](cognito-user-pools-define-resource-servers.md#cognito-user-pools-define-resource-servers-about-scopes).

1. Establece su ID y notificación `cognito:groups` de token de acceso en `"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 transfiere la información del evento a la función de Lambda. A continuación, la función devuelve el mismo objeto de evento a Amazon Cognito con los cambios en la respuesta. En la consola de Lambda puede configurar un evento de prueba con los datos relevantes para el desencadenador de Lambda. El siguiente es un evento de prueba para este código de ejemplo:

------
#### [ 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": []
    }
}
```

------

## Ejemplo de la versión dos de evento de generación anterior al token: añadir notificaciones con objetos complejos
<a name="aws-lambda-triggers-pre-token-generation-example-version-2-complex-objects"></a>

En este ejemplo, se realizan las siguientes modificaciones a los tokens de un usuario.

1. Agrega notificaciones de tipo numérico, cadena, booleano y JSON al token de ID. Este es el único cambio que los eventos desencadenantes de la versión dos ponen a disposición del token de ID.

1. Agrega notificaciones de tipo numérico, cadena, booleano y JSON al token de acceso.

1. Añade tres ámbitos al token de acceso.

1. Suprime la reclamación `email` en los tokens de acceso e ID.

1. Suprime el ámbito `aws.cognito.signin.user.admin` en el token de acceso.

------
#### [ 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 transfiere la información del evento a la función de Lambda. A continuación, la función devuelve el mismo objeto de evento a Amazon Cognito con los cambios en la respuesta. En la consola de Lambda puede configurar un evento de prueba con los datos relevantes para el desencadenador de Lambda. El siguiente es un evento de prueba para este código de ejemplo:

------
#### [ 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": []
    }
}
```

------

## Ejemplo uno de versión de evento de generación anterior al token: Agregar una notificación nueva y suprimir otra existente
<a name="aws-lambda-triggers-pre-token-generation-version-1-add-claim"></a>

En este ejemplo, se utiliza el evento de desencadenador versión 1 con una función de Lambda anterior a la generación del token para agregar una reclamación nueva y suprimir una existente.

------
#### [ 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 transfiere la información del evento a la función de Lambda. A continuación, la función devuelve el mismo objeto de evento a Amazon Cognito con los cambios en la respuesta. En la consola de Lambda puede configurar un evento de prueba con los datos relevantes para el desencadenador de Lambda. El siguiente es un evento de prueba para este código de ejemplo: puesto que el ejemplo de código no procesa ningún parámetro de solicitud, puede utilizar un evento de prueba con una solicitud vacía. Para obtener más información sobre los parámetros de solicitud habituales, consulte [Evento desencadenador de Lambda para un grupo de usuarios](cognito-user-pools-working-with-lambda-triggers.md#cognito-user-pools-lambda-trigger-event-parameter-shared).

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

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

------

## Ejemplo uno de versión de evento de generación anterior al token: Modificar la pertenencia de un usuario a un grupo
<a name="aws-lambda-triggers-pre-token-generation-version-1-change-group"></a>

En este ejemplo, se utiliza el evento de desencadenador versión 1 con una función de Lambda anterior a la generación del token para modificar la suscripción de un grupo de usuarios.

------
#### [ 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 transfiere la información del evento a la función de Lambda. A continuación, la función devuelve el mismo objeto de evento a Amazon Cognito con los cambios en la respuesta. En la consola de Lambda puede configurar un evento de prueba con los datos relevantes para el desencadenador de Lambda. El siguiente es un evento de prueba para este código de ejemplo:

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

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

------