Acionador do Lambda Definir desafio de autenticação - Amazon Cognito

Acionador do Lambda Definir desafio de autenticação


            Acionadores do Lambda de desafio
Definir o desafio de autenticação

O Amazon Cognito invoca esse acionador para iniciar o fluxo de autenticação personalizado.

A solicitação para esse acionador do Lambda contém session, que é uma matriz que contém todos os desafios apresentados ao usuário no processo de autenticação em andamento. A solicitação também inclui o resultado correspondente. Os detalhes do desafio (ChallengeResult) são armazenados em ordem cronológica na matriz session, com session[0] representando o primeiro desafio apresentado ao usuário.

Você pode fazer com que o Amazon Cognito verifique senhas de usuário antes que ele emita seus desafios personalizados. Veja uma visão geral do processo:

  1. Para começar, faça com que sua aplicação inicie o login chamando InitiateAuth ou AdminInitiateAuth com o mapa AuthParameters, incluindoCHALLENGE_NAME: SRP_A, e valores para SRP_A e USERNAME.

  2. O acionador do Lambda de desafio de autenticação de definição é invocado com uma sessão inicial que contém challengeName: SRP_A e challengeResult: true.

  3. Depois de receber essas entradas, a função Lambda responde com challengeName: PASSWORD_VERIFIER, issueTokens: false, failAuthentication: false.

  4. Se a verificação de senha for bem-sucedida, a função Lambda será invocada novamente com uma nova sessão contendo challengeName: PASSWORD_VERIFIER e challengeResult: true.

  5. A função Lambda inicia seus desafios personalizados respondendo com challengeName: CUSTOM_CHALLENGE, issueTokens: false, e failAuthentication: false. Se você não quiser iniciar seu fluxo de autenticação personalizado com a verificação de senha, poderá iniciar o login com o mapa AuthParameters incluindo CHALLENGE_NAME: CUSTOM_CHALLENGE.

  6. O loop de desafios se repetirá até que todos os desafios sejam respondidos.

Parâmetros do acionador do lambda Definir desafio de autenticação

Estes são os parâmetros exigidos por essa função Lambda, além dos parâmetros comuns.

JSON
{ "request": { "userAttributes": { "string": "string", . . . }, "session": [ ChallengeResult, . . . ], "clientMetadata": { "string": "string", . . . }, "userNotFound": boolean }, "response": { "challengeName": "string", "issueTokens": boolean, "failAuthentication": boolean }

Parâmetros de solicitação Define Auth Challenge

Estes são os parâmetros fornecidos à função do Lambda quando ela é invocada.

userAttributes

Um ou mais pares de nome-valor que representam atributos de usuário.

userNotFound

Um booliano que é preenchido quando PreventUserExistenceErrors é definido como ENABLED para o cliente de grupo de usuários. Um valor de true significa que o ID de usuário (nome de usuário, endereço de e-mail, etc.) não correspondeu a nenhum usuário existente. Quando PreventUserExistenceErrors estiver definido como ENABLED, o serviço não informará de volta ao aplicativo que o usuário não existe. A prática recomendada é que as funções Lambda mantenham a mesma experiência do usuário, incluindo a latência, para que o autor da chamada não possa detectar comportamentos diferentes quando o usuário existir ou não existir.

session

Uma matriz de elementos ChallengeResult, em que cada um contém os seguintes elementos:

challengeName

O tipo de desafio. Um destes: CUSTOM_CHALLENGE, SRP_A, PASSWORD_VERIFIER, SMS_MFA, DEVICE_SRP_AUTH, DEVICE_PASSWORD_VERIFIER ou ADMIN_NO_SRP_AUTH.

Importante

Você deve sempre verificar challengeName no acionador do Lambda DefineAuthChallenge para garantir que ele corresponda ao valor esperado ao determinar se um usuário foi autenticado com êxito e deve receber tokens emitidos.

challengeResult

Defina como true se o usuário tiver concluído o desafio com êxito; do contrário, defina-o como false.

challengeMetadata

Seu nome para o desafio personalizado. Usado somente se challengeName for CUSTOM_CHALLENGE.

clientMetadata

Um ou mais pares de chave/valor que você pode fornecer como entrada personalizada para a função Lambda especificada para o acionador definir desafio de autenticação. É possível transmitir esses dados para a função Lambda usando o parâmetro ClientMetadata nas operações de API AdminRespondToAuthChallenge e RespondToAuthChallenge.

Parâmetros de resposta de Definir desafio de autenticação

Na resposta, você pode retornar o próximo estágio do processo de autenticação.

challengeName

Uma string que contém o nome do próximo desafio. Se você deseja apresentar um novo desafio ao seu usuário, especifique o nome do desafio aqui.

issueTokens

Defina como true se você determinar que o usuário foi autenticado com êxito concluindo os desafios. Caso contrário, defina-o como false.

failAuthentication

Defina como true se você quiser encerrar o processo de autenticação atual; do contrário, defina-o como false.

Exemplo de Define Auth Challenge

Este exemplo definirá uma série de desafios de autenticação e emitirá tokens somente se todos os desafios foram concluídos com êxito.

Node.js
exports.handler = (event, context, callback) => { if (event.request.session.length == 1 && event.request.session[0].challengeName == 'SRP_A') { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = 'PASSWORD_VERIFIER'; } else if (event.request.session.length == 2 && event.request.session[1].challengeName == 'PASSWORD_VERIFIER' && event.request.session[1].challengeResult == true) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = 'CUSTOM_CHALLENGE'; } else if (event.request.session.length == 3 && event.request.session[2].challengeName == 'CUSTOM_CHALLENGE' && event.request.session[2].challengeResult == true) { event.response.issueTokens = true; event.response.failAuthentication = false; } else { event.response.issueTokens = false; event.response.failAuthentication = true; } // Return to Amazon Cognito callback(null, event); }