Como faço para passar ClientMetadata para gatilhos do Lambda no Amazon Cognito?

3 minuto de leitura
0

Quero criar um fluxo de trabalho de autenticação com APIs do Amazon Cognito para passar metadados de cliente a gatilhos do AWS Lambda.

Resolução

Quando você chama a API InitiateAuth com o parâmetro ClientMetadata para iniciar a autenticação do usuário no Amazon Cognito, ClientMetadata é passado somente para estes gatilhos do Lambda:

Em comparação, você deve chamar a API RespondToAuthChallenge para incluir ClientMetadata nesses gatilhos do Lambda:

Inclua o parâmetro ClientMetadata na chamada da API RespondToAuthChallenge para responder a qualquer um destes desafios de autenticação:

  • Autenticação multifator (MFA) com senha de uso único com marcação temporal (TOTP)
  • Serviço de mensagens curtas (SMS) para MFA
  • Senha remota segura de dispositivo (SRP)
  • Desafios de autenticação personalizada

Além disso, o parâmetro ClientMetadata aprimora fluxos de trabalho personalizados para acionadores de grupos de usuários da função do Lambda.

Exemplo de chamada de API RespondToAuthChallenge com o parâmetro ClientMetadata

Neste exemplo, um grupo de usuários do Amazon Cognito é configurado com um cliente de aplicação. Um gatilho do Lambda pós-autenticação está associado ao grupo de usuários.

A função do Lambda denominada lambda_handler imprime o evento que recebe:

import json

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

Importante: use logs com cuidado no sistema de produção para evitar a exposição de segredos ou dados seguros no Amazon CloudWatch.

Um usuário de teste é criado no grupo de usuários. Em seguida, o SMS para MFA é configurado.

O exemplo de solicitação da chamada de API InitiateAuth inicia o login do usuário:

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

O exemplo de resposta da chamada de API InitiateAuth:

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

O exemplo de solicitação da chamada de API RespondToAuthChallenge envia o código MFA, e o parâmetro ClientMetadata inclui qualquer informação adicional a ser transmitida:

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'

O exemplo de resposta da chamada de API RespondToAuthChallenge:

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

Depois que um usuário se autentica com êxito e recebe tokens do Amazon Cognito, o gatilho do Lambda de pós-autenticação é invocado.

Localize os resultados do gatilho do Lambda de pós-autenticação em eventos de log no console do CloudWatch. Procure os detalhes do parâmetro ClientMetadata no corpo do evento.

Informações relacionadas

Gatilhos do Lambda de desafio de autenticação personalizada

Personalizar fluxos de trabalho do grupo de usuários com gatilhos do Lambda

AWS OFICIAL
AWS OFICIALAtualizada há um ano