As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Acionadores do Lambda de desafio personalizado de autenticação
Ao criar seus fluxos de autenticação para seu grupo de usuários do Amazon Cognito, você pode querer estender seu modelo de autenticação além dos fluxos integrados. Um caso de uso comum dos acionadores de desafio personalizados é implementar verificações de segurança adicionais além do nome de usuário, senha e autenticação multifator (MFA). Desafio personalizado é qualquer pergunta e resposta que você possa gerar em uma linguagem de programação compatível com Lambda. Por exemplo, você pode exigir que os usuários resolvam um CAPTCHA ou respondam a uma pergunta de segurança antes de poderem se autenticar. Outra necessidade potencial é a integração com fatores ou dispositivos de autenticação especializados. Ou talvez você já tenha desenvolvido um software que autentica usuários com uma chave de segurança de hardware ou um dispositivo biométrico. A definição de sucesso na autenticação para um desafio personalizado é qualquer resposta que sua função do Lambda aceite como correta: uma string fixa, por exemplo, ou uma resposta satisfatória de uma API externa.
Você pode iniciar a autenticação com seu desafio personalizado e controlar totalmente o processo de autenticação, ou pode realizar a autenticação por nome de usuário e senha antes que sua aplicação receba seu desafio personalizado.
O acionador do Lambda do desafio de autenticação personalizada:
- Define
-
Inicia uma sequência de desafios. Determina se você deseja iniciar um novo desafio, marcar a autenticação como concluída ou interromper a tentativa de autenticação.
- Cria
-
Emite a pergunta para a aplicação para o usuário responder. Essa função pode apresentar uma pergunta de segurança ou um link para um CAPTCHA que sua aplicação deve exibir para o usuário.
- Verifica
-
Conhece a resposta esperada e a compara com a resposta que sua aplicação fornece na resposta ao desafio. A função pode chamar a API do seu serviço CAPTCHA para recuperar os resultados esperados da tentativa de solução do usuário.
Essas três funções do Lambda se agrupam para apresentar um mecanismo de autenticação que está completamente sob seu controle e sob seu próprio padrão. Como a autenticação personalizada requer lógica de aplicativo no seu cliente e nas funções do Lambda, você não pode processar a autenticação personalizada no login gerenciado. Esse sistema de autenticação exige um esforço adicional do desenvolvedor. Seu aplicativo deve realizar o fluxo de autenticação com a API de grupos de usuários e lidar com o desafio resultante com uma interface de login personalizada que coloque a questão no centro do desafio de autenticação personalizada.

Para mais informações sobre como implementar uma autenticação personalizada, consulte Fluxo de autenticação personalizado e desafios.
Autenticação entre as operações da API InitiateAuthou AdminInitiateAuth, e RespondToAuthChallengeou AdminRespondToAuthChallenge. Nesse fluxo, um usuário faz a autenticação respondendo desafios sucessivos até que ela falhe ou ele receba os tokens. Uma resposta ao desafio pode ser um novo desafio. Nesse caso, sua aplicação responde quantas vezes forem necessárias aos novos desafios. A autenticação bem-sucedida acontece quando a função define auth analisa os resultados até o momento, determina que todos os desafios foram respondidos e retorna IssueTokens
.
Tópicos
Autenticação SRP em fluxos de desafio personalizados
Você pode fazer com que o Amazon Cognito verifique senhas de usuário antes que ele emita seus desafios personalizados. Todos os gatilhos do Lambda associados à categoria Autenticação das cotas de taxa de solicitação serão executados quando você realizar a autenticação SRP em um fluxo de desafio personalizado. Veja uma visão geral do processo:
-
Sua aplicação inicia o login chamando
InitiateAuth
ouAdminInitiateAuth
com o mapaAuthParameters
. Os parâmetros devem incluirCHALLENGE_NAME: SRP_A,
e os valores deSRP_A
eUSERNAME
. -
O Amazon Cognito invoca o acionador do Lambda de desafio de autenticação com uma sessão inicial que contém
challengeName: SRP_A
echallengeResult: true
. -
Depois de receber essas entradas, a função do Lambda responde com
challengeName: PASSWORD_VERIFIER
,issueTokens: false
,failAuthentication: false
. -
Se a verificação de senha for bem-sucedida, o Amazon Cognito invocará sua função do Lambda novamente com uma nova sessão contendo
challengeName: PASSWORD_VERIFIER
echallengeResult: true
. -
Para iniciar seus desafios personalizados, sua função do Lambda responde com
challengeName: CUSTOM_CHALLENGE
,issueTokens: false
efailAuthentication: 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 mapaAuthParameters
incluindoCHALLENGE_NAME: CUSTOM_CHALLENGE
. -
O loop de desafios se repetirá até que todos os desafios sejam respondidos.
O exemplo a seguir mostra uma solicitação InitiateAuth
inicial que precede a autenticação personalizada com um fluxo SRP.
{ "AuthFlow": "CUSTOM_AUTH", "ClientId": "1example23456789", "AuthParameters": { "CHALLENGE_NAME": "SRP_A", "USERNAME": "testuser", "SRP_A": "[SRP_A]", "SECRET_HASH": "[secret hash]" } }
Redefinição de senha no fluxo SRP de autenticação personalizada
Quando os usuários estão no FORCE_CHANGE_PASSWORD
status, seu fluxo de autenticação personalizado deve integrar a etapa de alteração de senha e, ao mesmo tempo, manter a integridade de seus desafios de autenticação. O Amazon Cognito invoca seu desafio de definição de autenticação Lambda trigger durante o desafio. NEW_PASSWORD_REQUIRED
Nesse cenário, um usuário que faz login com um fluxo de desafio personalizado e autenticação SRP pode definir uma nova senha se estiver em um estado de redefinição de senha.
Quando os usuários estão no FORCE_CHANGE_PASSWORD
status RESET_REQUIRED
or, eles devem responder a um NEW_PASSWORD_REQUIRED
desafio com umNEW_PASSWORD
. Na autenticação personalizada com SRP, o Amazon Cognito retorna NEW_PASSWORD_REQUIRED
um desafio depois que os usuários concluem o PASSWORD_VERIFIER
desafio SRP. Seu gatilho de desafio de definição de autenticação recebe os dois resultados do desafio na session
matriz e pode continuar com desafios personalizados adicionais depois que o usuário alterar a senha com sucesso.
Seu desafio de definição de autenticação Lambda deve gerenciar a sequência de desafios por meio de autenticação SRP, redefinição de senha e desafios personalizados subsequentes. O gatilho recebe uma série de desafios concluídos no session
parâmetro, incluindo ambos PASSWORD_VERIFIER
e NEW_PASSWORD_REQUIRED
resultados. Para ver um exemplo de implementação, consulteExemplo de definição do desafio de autenticação.
Etapas do fluxo de autenticação
Para usuários que precisam verificar sua senha antes de desafios personalizados, o processo segue estas etapas:
-
Sua aplicação inicia o login chamando
InitiateAuth
ouAdminInitiateAuth
com o mapaAuthParameters
. Os parâmetros devem incluirCHALLENGE_NAME: SRP_A
e valores paraSRP_A
USERNAME
e. -
O Amazon Cognito invoca o acionador do Lambda de desafio de autenticação com uma sessão inicial que contém
challengeName: SRP_A
echallengeResult: true
. -
Depois de receber essas entradas, a função do Lambda responde com
challengeName: PASSWORD_VERIFIER
,issueTokens: false
,failAuthentication: false
. -
Se a verificação da senha for bem-sucedida, uma das duas coisas acontecerá:
- Para usuários em status normal:
-
O Amazon Cognito invoca sua função Lambda novamente com uma nova sessão contendo e.
challengeName: PASSWORD_VERIFIER
challengeResult: true
Para iniciar seus desafios personalizados, sua função do Lambda responde com
challengeName: CUSTOM_CHALLENGE
,issueTokens: false
efailAuthentication: false
. - Para usuários em
RESET_REQUIRED
ouFORCE_CHANGE_PASSWORD
status: -
O Amazon Cognito invoca sua função Lambda com uma sessão contendo e.
challengeName: PASSWORD_VERIFIER
challengeResult: true
Sua função do Lambda deve responder com
challengeName: NEW_PASSWORD_REQUIRED
,issueTokens: false
efailAuthentication: false
.Após a alteração bem-sucedida da senha, o Amazon Cognito invoca sua função Lambda com uma sessão contendo os resultados e os resultados.
PASSWORD_VERIFIER
NEW_PASSWORD_REQUIRED
Para iniciar seus desafios personalizados, sua função do Lambda responde com
challengeName: CUSTOM_CHALLENGE
,issueTokens: false
efailAuthentication: false
.
-
O loop de desafios se repetirá até que todos os desafios sejam respondidos.
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
.
Gerenciamento de sessões
O fluxo de autenticação mantém a continuidade da sessão por meio de uma série de resultados de sessões IDs e desafios. Cada resposta ao desafio gera um novo ID de sessão para evitar erros de reutilização da sessão, o que é particularmente importante para fluxos de autenticação multifatorial.
Os resultados do desafio são armazenados cronologicamente na matriz de sessões que seus acionadores Lambda recebem. Para usuários em FORCE_CHANGE_PASSWORD
status, a matriz da sessão contém:
session[0]
-SRP_A
Desafio inicialsession[1]
-PASSWORD_VERIFIER
resultadosession[2]
-NEW_PASSWORD_REQUIRED
resultadoElementos subsequentes - Resultados de desafios personalizados adicionais
Exemplo de fluxo de autenticação
O exemplo a seguir demonstra um fluxo completo de autenticação personalizada para um usuário com FORCE_CHANGE_PASSWORD
status que precisa concluir a alteração da senha e um desafio CAPTCHA personalizado.
-
InitiateAuth request
{ "AuthFlow": "CUSTOM_AUTH", "ClientId": "
1example23456789
", "AuthParameters": { "CHALLENGE_NAME": "SRP_A", "USERNAME": "testuser
", "SRP_A": "[SRP_A]
" } } -
InitiateAuth resposta
{ "ChallengeName": "PASSWORD_VERIFIER", "ChallengeParameters": { "USER_ID_FOR_SRP": "
testuser
" }, "Session": "[session_id_1]
" } -
RespondToAuthChallenge solicitação com
PASSWORD_VERIFIER
{ "ChallengeName": "PASSWORD_VERIFIER", "ClientId": "
1example23456789
", "ChallengeResponses": { "PASSWORD_CLAIM_SIGNATURE": "[claim_signature]
", "PASSWORD_CLAIM_SECRET_BLOCK": "[secret_block]
", "TIMESTAMP": "[timestamp]
", "USERNAME": "testuser
" }, "Session": "[session_id_1]
" } -
RespondToAuthChallenge resposta com
NEW_PASSWORD_REQUIRED
desafio{ "ChallengeName": "NEW_PASSWORD_REQUIRED", "ChallengeParameters": {}, "Session": "
[session_id_2]
" } -
RespondToAuthChallenge solicitação com
NEW_PASSWORD_REQUIRED
{ "ChallengeName": "NEW_PASSWORD_REQUIRED", "ClientId": "
1example23456789
", "ChallengeResponses": { "NEW_PASSWORD": "[password]
", "USERNAME": "testuser
" }, "Session": "[session_id_2]
" } -
RespondToAuthChallenge resposta com desafio personalizado de CAPTCHA
{ "ChallengeName": "CUSTOM_CHALLENGE", "ChallengeParameters": { "captchaUrl": "url/123.jpg" }, "Session": "
[session_id_3]
" } -
RespondToAuthChallenge solicitação com resposta ao desafio personalizado CAPTCHA
{ "ChallengeName": "CUSTOM_CHALLENGE", "ClientId": "
1example23456789
", "ChallengeResponses": { "ANSWER": "123
", "USERNAME": "testuser
" }, "Session": "[session_id_3]
" }
6. Resposta final de sucesso
{ "AuthenticationResult": { "AccessToken": "
eyJra456defEXAMPLE
", "ExpiresIn": 3600, "IdToken": "eyJra789ghiEXAMPLE
", "RefreshToken": "eyJjd123abcEXAMPLE
", "TokenType": "Bearer" }, "ChallengeParameters": {} }