Desencadenador de Lambda de pregeneración de tokens.
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 características Essentials o Plus, puede generar la versión dos o el evento desencadenante V2_0 con la personalización del token de acceso y la versión tres o el evento desencadenante V3_0 con la personalización del token de acceso para la concesión de credenciales en el cliente de máquina a máquina (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
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.
-
Las funciones de un desencadenador
V1_0. -
La posibilidad de personalizar los tokens de acceso.
-
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 + 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 + personalización del token de acceso para las identidades de usuario y máquina. También puede establecer el valor de LambdaVersion en los parámetros de LambdaConfig en una solicitud de API UpdateUserPool o CreateUserPool. 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
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
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 | Todas las2 |
scope |
Acceso | Sí | Sí | Sí | scopesToAdd |
scopesToSuppress |
Usuario, máquina 1 | v2_0, v3_0 |
cognito:groups |
ID, acceso | Sí | Sí | Sí | groupsToOverride |
claimsToSuppress |
Usuario | Todas las2 |
cognito:preferred_role |
ID | Sí | Sí | Sí | preferredRole |
claimsToSuppress3 |
Usuario | Todos |
cognito:roles |
ID | Sí | Sí | Sí | iamRolesToOverride |
claimsToSuppress3 |
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_0, v3_0 |
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 |
custom:Atributo |
ID | Sí | Sí | Sí | claimsToAddOrOverride |
claimsToSuppress |
Usuario | Todos |
dev:Atributo |
ID | No | No | Sí | N/A | claimsToSuppress |
Usuario | Todos |
identities |
ID | No | No | No | N/A | N/A | Usuario | N/A |
aud4 |
ID | No | No | No | N/A | N/A | Usuario, máquina | N/A |
client_id |
Acceso | No | No | No | N/A | N/A | Usuario, máquina | N/A |
event_id |
Acceso | No | No | No | N/A | N/A | Usuario, máquina | N/A |
device_key |
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_hash |
ID | No | No | No | N/A | N/A | Usuario, máquina | N/A |
auth_time |
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_jti |
ID, acceso | No | No | No | N/A | N/A | Usuario, máquina | N/A |
token_use |
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
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).
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
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 de acceso protegido, como las operaciones de API autorizadas por el token de Amazon Cognito y las API de terceros. Para la autorización de máquina a máquina (M2M) con una concesión de credenciales de cliente, Amazon Cognito solo invoca al desencadenador Antes de la generación del token cuando el grupo de usuarios está configurado para un evento de versión tres (V3_0). Para obtener más información acerca de los tokens de acceso, consulte Descripción del token de acceso.
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 ámbitoaws.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.
Metadatos del cliente para credenciales de cliente máquina a máquina (M2M)
Puede pasar los metadatos del cliente 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 de pregeneración de tokens.. En las operaciones de autenticación con una entidad principal de usuario, puede pasar los metadatos del cliente al desencadenador Antes de la generación del token en el cuerpo de las solicitudes de API AdminRespondToAuthChallenge y RespondToAuthChallenge. 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, 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ásica. 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
Temas
Fuentes del desencadenador de Lambda de pregeneración de tokens
| Valor de triggerSource | Evento |
|---|---|
TokenGeneration_HostedAuth |
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_Authentication |
Se llama después de que se hayan completado los flujos de autenticación. |
TokenGeneration_NewPasswordChallenge |
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_ClientCredentials |
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_0. |
TokenGeneration_AuthenticateDevice |
Se llama al final de la autenticación de un dispositivo de usuario. |
TokenGeneration_RefreshTokens |
Se llama cuando un usuario intenta actualizar los tokens de identidad y acceso. |
Parámetros del desencadenador de Lambda de pregeneración de tokens
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 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.
Parámetros de la solicitud anterior a la generación del token
| Nombre | 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 |
1 |
| groupsToOverride |
Los grupos del grupo de usuarios de los que es miembro su usuario. |
1 |
| iamRolesToOverride |
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 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 |
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. Puede transferir estos datos a la función de Lambda mediante el parámetro ClientMetadata en las operaciones de la API AdminRespondToAuthChallenge y RespondToAuthChallenge. Amazon Cognito no incluye los datos del parámetro |
1 |
| scopes |
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
| Nombre | Descripción | Versión mínima del evento del desencadenador |
|---|---|---|
| claimsOverrideDetails | A container for all elements in a V1_0 trigger event. |
1 |
| claimsAndScopeOverrideDetails |
Un contenedor para todos los elementos de un evento desencadenador |
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 En los eventos de la versión 2 y superior, este elemento aparece en |
1* |
| 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 |
1 |
| groupOverrideDetails |
Objeto de salida que contiene la configuración de grupo actual. El objeto incluye La función sustituye el objeto Los tokens de ID y de acceso de Amazon Cognito contienen la notificación |
1 |
| scopesToAdd |
Una lista de ámbitos que quiere agregar a la reclamación de |
2 |
| scopesToSuppress |
Una lista de ámbitos que quiere eliminar de la reclamación de |
2 |
* 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.
Ejemplo de la segunda versión de un evento desencadenante previo al token: añadir y suprimir notificaciones, ámbitos y grupos
En este ejemplo, se realizan las siguientes modificaciones a los tokens de un usuario.
-
Establece su
family_namecomoDoeen el token de ID. -
Impide que las notificaciones
emailyphone_numberaparezcan en el token de ID. -
Establece su notificación
cognito:rolesde 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". -
Establece su notificación
cognito:preferred_rolede token de ID aarn:aws:iam::123456789012:role/sns_caller. -
Añade los ámbitos
openid,emailysolar-system-data/asteroids.addal token de acceso. -
Suprime el ámbito
phone_numberyaws.cognito.signin.user.admindel token de acceso. La eliminación dephone_numberimpide la recuperación del número de teléfono del usuario deuserInfo. La eliminación deaws.cognito.signin.user.adminimpide 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_numberde los ámbitos solo impide la recuperación del número de teléfono de un usuario si los ámbitos restantes del token de acceso incluyenopenidy al menos un ámbito estándar más. Para obtener más información, consulte Acerca de los ámbitos. -
Establece su ID y notificación
cognito:groupsde token de acceso en"new-group-A","new-group-B","new-group-C".
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:
Ejemplo de la versión dos de evento de generación anterior al token: añadir notificaciones con objetos complejos
En este ejemplo, se realizan las siguientes modificaciones a los tokens de un usuario.
-
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.
-
Agrega notificaciones de tipo numérico, cadena, booleano y JSON al token de acceso.
-
Añade tres ámbitos al token de acceso.
-
Suprime la reclamación
emailen los tokens de acceso e ID. -
Suprime el ámbito
aws.cognito.signin.user.adminen el token de acceso.
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:
Ejemplo uno de versión de evento de generación anterior al token: Agregar una notificación nueva y suprimir otra existente
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.
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.
Ejemplo uno de versión de evento de generación anterior al token: Modificar la pertenencia de un usuario a un grupo
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.
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: