¿Cómo puedo pasar ClientMetadata a los desencadenadores de Lambda en Amazon Cognito?

3 minutos de lectura
0

Quiero crear un flujo de trabajo de autenticación con las API de Amazon Cognito para transferir los metadatos del cliente a los desencadenadores de AWS Lambda.

Solución

Al llamar a la APIInitiateAuth con el parámetroClientMetadata para iniciar la autenticación de usuarios en Amazon Cognito, ClientMetadata se pasa únicamente a estos desencadenadores de Lambda:

En comparación, debe llamar a la API RespondToAuthChallenge para incluir ClientMetadata en estos desencadenadores de Lambda:

Incluya el parámetro ClientMetadata en la llamada a la API RespondToAuthChallenge para responder a cualquiera de estos desafíos de autenticación:

  • Autenticación multifactorial (MFA) con contraseña de un solo uso (TOTP) basada en el tiempo
  • Servicio de mensajes cortos (SMS) para MFA
  • Contraseña remota segura del dispositivo (SRP)
  • Desafíos de autenticación personalizada

Además, el parámetro ClientMetadata mejora los flujos de trabajo personalizados para los desencadenadores del grupo de usuarios de la función Lambda.

Ejemplo de llamada a la API RespondToAuthChallenge con el parámetro ClientMetadata

En este ejemplo, se configura un grupo de usuarios de Amazon Cognito con un cliente de aplicación. Un grupo de usuarios de Lambda posterior a la autenticación está asociado al grupo de usuarios.

La función Lambda denominada lambda\ _handler imprime el evento que recibe:

import json

def lambda_handler(event, context):
# TODO implement
print(event)
return event

**Importante:**Utilice el registro con cuidado en el sistema de producción para evitar exponer datos o secretos seguros en Amazon CloudWatch.

Se crea un usuario de prueba en el grupo de usuarios. A continuación, se configura el SMS para MFA.

El ejemplo de solicitud de llamada a la API InitiateAuth inicia el inicio de sesión del usuario:

aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=test,PASSWORD=Password@123 --client-id 1abcd2efgh34ij5klmnopq456r

Ejemplo de respuesta de llamada a la API InitiateAuth:

{
  "ChallengeName": "SMS_MFA",
  "Session": "1AbcDEfgXXXXX",
  "ChallengeParameters": {
    "CODE_DELIVERY_DELIVERY_MEDIUM": "SMS",
    "CODE_DELIVERY_DESTINATION": "+********1234",
    "USER_ID_FOR_SRP": "test"
  }
}

En el ejemplo de solicitud de llamada a la API RespondToAuthChallenge, se envía el código MFA y el parámetro ClientMetadata incluye la información adicional que se debe transmitir:

aws cognito-idp respond-to-auth-challenge --client-id 9zyxw8vuts76rq5ponmlkj432i --challenge-name SMS_MFA --session "9ZyxWVutXXXXX" --challenge-responses USERNAME=test,SMS_MFA_CODE=654321 --client-metadata KeyName1='string',KeyName2='string'

Ejemplo de respuesta de llamada a la API RespondToAuthChallenge:

{
  "ChallengeParameters": {},
  "AuthenticationResult": {
    "AccessToken": "abXXXX",
    "ExpiresIn": 3600,
    "TokenType": "Bearer",
    "RefreshToken": "abXX",
    "IdToken": "abXXX"
  }
}

Cuando un usuario se autentica correctamente y recibe los tokens de Amazon Cognito, se invoca el desencadenador de Lambda posterior a la autenticación.

Busque los resultados del desencadenador de Lambda posterior a la autenticación en Registrar eventos en la consola de CloudWatch. Busque los detalles del parámetro ClientMetadata en el cuerpo del evento.

Información relacionada

Desafíos de autenticación personalizados: los desencadenadores de Lambda

Personalización de los flujos de trabajo de grupos de usuarios con desencadenadores de Lambda

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años