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á.
Fluxo de autenticação de grupo de usuários
O Amazon Cognito inclui vários métodos para autenticar os usuários. Todos os grupos de usuários, independentemente de você ter um domínio ou não, podem autenticar usuários na API de grupos de usuários. Se adicionar um domínio ao grupo de usuários, você poderá usar os endpoints do grupo de usuários. A API de grupos de usuários é compatível com uma variedade de modelos de autorização e fluxos de solicitações de API.
Para verificar a identidade dos usuários, o Amazon Cognito é compatível com fluxos de autenticação que incorporam novos tipos de desafio, além de senhas. A autenticação do Amazon Cognito normalmente exige que você implemente duas operações de API na seguinte ordem:
Um usuário faz a autenticação respondendo a desafios sucessivos até que ela falhe ou o Amazon Cognito emita tokens para o usuário. Você pode repetir essas etapas com o Amazon Cognito, em um processo que inclui desafios diferentes, para comportar qualquer fluxo de autenticação personalizado.
Normalmente, sua aplicação gera uma solicitação para coletar informações do usuário e as envia em uma solicitação de API ao Amazon Cognito. Considere um fluxo InitiateAuth
em um grupo de usuários no qual você configurou o usuário com autenticação multifator (MFA).
-
A aplicação solicita que o usuário informe o nome de usuário e a senha.
-
Você precisa incluir o nome de usuário e a senha como parâmetros em
InitiateAuth
. -
O Amazon Cognito retorna um desafio
SMS_MFA
e um identificador de sessão. -
A aplicação solicita que o usuário forneça o código de MFA exibido no telefone.
-
Você precisa incluir esse código e o identificador da sessão na solicitação
RespondToAuthChallenge
.
Dependendo dos recursos do grupo de usuários, você pode acabar respondendo a vários desafios para InitiateAuth
antes da aplicação recuperar tokens do Amazon Cognito. O Amazon Cognito inclui uma string de sessão na resposta a cada solicitação. Para combinar suas solicitações de API em um fluxo de autenticação, inclua a string da sessão da resposta à solicitação anterior em cada solicitação subsequente. Por padrão, os usuários têm três minutos para concluir cada desafio antes que a string da sessão expire. Para ajustar esse período, altere o cliente da aplicação Authentication flow session duration (Duração da sessão do fluxo de autenticação). O procedimento a seguir descreve como alterar essa definição na configuração do cliente da aplicação.
nota
As configurações de duração da sessão do fluxo de autenticação se aplicam à autenticação com a API de grupos de usuários do Amazon Cognito. A interface do usuário hospedada do Amazon Cognito define a duração da sessão como três minutos para autenticação multifator e oito minutos para códigos de redefinição de senha.
Para obter mais informações sobre clientes de aplicação, consulte Clientes de aplicações de grupos de usuários.
Você pode usar AWS Lambda gatilhos para personalizar a forma como os usuários se autenticam. Esses triggers emitem e verificam seus próprios desafios como parte do fluxo de autenticação.
Também é possível usar o fluxo de autenticação de administrador para servidores de backend seguros. É possível usar o fluxo de autenticação de migração do usuário para permitir essa migração sem exigir que os usuários redefinam a respectiva senha.
Comportamento de bloqueio do Amazon Cognito em tentativas fracassadas de login
Após cinco tentativas malsucedidas de login não autenticado ou autenticado pelo IAM com uma senha, o Amazon Cognito bloqueia o usuário por um segundo. A duração do bloqueio dobra após cada tentativa adicional fracassada, até um máximo de aproximadamente 15 minutos. As tentativas feitas durante um período de bloqueio geram uma exceção Password attempts exceeded
e não afetam a duração dos períodos de bloqueio subsequentes. Para um número cumulativo de tentativas fracassadas de login n, sem incluir exceções Password attempts
exceeded
, o Amazon Cognito bloqueia o usuário por 2^(n-5) segundos. Para redefinir o bloqueio como o estado inicial n=0, o usuário deve fazer login com êxito após o término do período de bloqueio ou não iniciar nenhuma tentativa de login por 15 minutos consecutivos a qualquer momento após um bloqueio. Esse comportamento está sujeito a alterações. Esse comportamento não se aplica aos desafios personalizados, a menos que eles também realizem a autenticação baseada em senha.
Tópicos
- Fluxo de autenticação no lado do cliente
- Fluxo de autenticação no lado do servidor
- Fluxo de autenticação personalizado
- Fluxo de autenticação integrado e desafios
- Fluxo de autenticação personalizado e desafios
- Usar verificação de senha SRP no fluxo de autenticação personalizado
- Fluxo de autenticação de administração
- Fluxo de autenticação de migração de usuários
Fluxo de autenticação no lado do cliente
O processo a seguir funciona para aplicações do lado do cliente do usuário que você cria com o AWS Amplify
-
O usuário insere suas respectivas credenciais no aplicativo.
-
A aplicação chama a operação
InitiateAuth
com o nome de usuário e os detalhes da Secure Remote Password (SRP).Essa operação da API retorna os parâmetros de autenticação.
nota
A aplicação gera detalhes do SRP com os recursos SRP do Amazon Cognito incorporados aos AWS SDKs.
-
O aplicativo chama a operação
RespondToAuthChallenge
. Se a chamada for bem-sucedida, o Amazon Cognito retornará os tokens do usuário e o fluxo de autenticação será concluído.Se o Amazon Cognito exigir outro desafio, a chamada para
RespondToAuthChallenge
não retornará tokens. Em vez disso, a chamada retornará uma sessão. -
Se
RespondToAuthChallenge
retornar uma sessão, o aplicativo chamaráRespondToAuthChallenge
novamente, dessa vez com a sessão e a resposta ao desafio (por exemplo, código de MFA).
Fluxo de autenticação no lado do servidor
Se você não tiver uma aplicação de usuário, mas, em vez disso, usar uma aplicação Java, Ruby ou Node.js segura de backend ou no lado do servidor, poderá usar a API autenticada no lado do servidor para os grupos de usuários do Amazon Cognito.
Para aplicações no lado do servidor, a autenticação do grupo de usuários é semelhante à das aplicações no lado do cliente, exceto pelo seguinte:
-
O aplicativo no lado do servidor chama a operação de API
AdminInitiateAuth
(em vez deInitiateAuth
). Essa operação requer AWS credenciais com permissões que incluemcognito-idp:AdminInitiateAuth
e.cognito-idp:AdminRespondToAuthChallenge
A operação retorna os parâmetros de autenticação necessários. -
Depois que a aplicação no lado do servidor tiver os parâmetros de autenticação, ela chamará a operação da API
AdminRespondToAuthChallenge
(em vez deRespondToAuthChallenge
). A operaçãoAdminRespondToAuthChallenge
da API só é bem-sucedida quando você fornece AWS credenciais.
Para obter mais informações sobre a assinatura de solicitações da API do Amazon Cognito com AWS credenciais, consulte Processo de assinatura do Signature versão 4 na AWS Referência geral.
As operações AdminInitiateAuth
e AdminRespondToAuthChallenge
da API não podem aceitar credenciais de username-and-password usuário para login de administrador, a menos que você permita explicitamente que elas façam isso de uma das seguintes formas:
-
Inclua
ALLOW_ADMIN_USER_PASSWORD_AUTH
(anteriormente conhecido comoADMIN_NO_SRP_AUTH
) no parâmetroExplicitAuthFlow
quando você chamarCreateUserPoolClient
ouUpdateUserPoolClient
. -
Adicione
ALLOW_ADMIN_USER_PASSWORD_AUTH
à lista Fluxos de autenticação para o cliente da aplicação. Configure clientes de aplicação na guia App integration (Integração de aplicação) em seu grupo de usuários, em App clients and analytics (Clientes de aplicação e análise). Para ter mais informações, consulte Clientes de aplicações de grupos de usuários.
Fluxo de autenticação personalizado
Os grupos de usuários do Amazon Cognito também possibilitam o uso de fluxos de autenticação personalizados, que podem ajudar você a criar um modelo de autenticação baseado em desafios/respostas usando gatilhos. AWS Lambda
nota
Você não pode usar os recursos avançados de segurança para credenciais comprometidas e autenticação adaptável com fluxos de autenticação personalizados. Para ter mais informações, consulte Como adicionar segurança avançada a um grupo de usuários.
O fluxo de autenticação personalizado possibilita ciclos personalizados de desafio e resposta para atender a diferentes requisitos. O fluxo começa com uma chamada para a operação de API InitiateAuth
que indica o tipo de autenticação que será usado e fornece todos os parâmetros de autenticação inicial. O Amazon Cognito responde à chamada do InitiateAuth
com um dos seguintes tipos de informação:
-
Um desafio para o usuário com uma sessão e parâmetros
-
Um erro se houver falha na autenticação do usuário.
-
ID, acesso e tokens de atualização, se os parâmetros fornecidos na chamada de
InitiateAuth
forem suficientes para que o usuário faça login. (Normalmente, o usuário ou a aplicação deve primeiro responder a um desafio, mas seu código personalizado deve determinar isso.)
Se o Amazon Cognito responder à chamada InitiateAuth
com um desafio, a aplicação reunirá mais entradas e chamará a operação RespondToAuthChallenge
. Essa chamada fornece as respostas do desafio e repassa a sessão. O Amazon Cognito responde à chamada RespondToAuthChallenge
de forma semelhante à chamada InitiateAuth
. Se o usuário tiver feito login, o Amazon Cognito fornecerá tokens ou, se o usuário não estiver conectado, o Amazon Cognito apresentará outro desafio ou um erro. Se o Amazon Cognito retornar outro desafio, a sequência se repetirá e a aplicação chamará RespondToAuthChallenge
até que o usuário faça login com êxito ou um erro seja retornado. Mais detalhes sobre as operações de API InitiateAuth
e RespondToAuthChallenge
são fornecidos na documentação da API.
Fluxo de autenticação integrado e desafios
O Amazon Cognito contém valores AuthFlow
e ChallengeName
integrados para que um fluxo de autenticação padrão possa validar um nome de usuário e a senha pelo protocolo Secure Remote Password (SRP). Os AWS SDKs têm suporte integrado para esses fluxos com o Amazon Cognito.
O fluxo inicia-se com o envio de USER_SRP_AUTH
como o AuthFlow
para InitiateAuth
. Você também envia os valores USERNAME
e SRP_A
em AuthParameters
. Se a chamada de InitiateAuth
for bem-sucedida, a resposta incluiu PASSWORD_VERIFIER
como ChallengeName
e SRP_B
nos parâmetros do desafio. Depois, o aplicativo chama RespondToAuthChallenge
com o ChallengeName
PASSWORD_VERIFIER
e os parâmetros necessários em ChallengeResponses
. Se a chamada para RespondToAuthChallenge
for bem-sucedida e o usuário fizer login, o Amazon Cognito emitirá tokens. Se você tiver ativado a autenticação multifator (MFA) para o usuário, o Amazon Cognito retornará o ChallengeName
da SMS_MFA
. A aplicação pode fornecer o código necessário por meio de outra chamada para RespondToAuthChallenge
.
Fluxo de autenticação personalizado e desafios
Um aplicativo pode iniciar um fluxo de autenticação personalizado chamando InitiateAuth
com CUSTOM_AUTH
como o Authflow
. Com um fluxo de autenticação personalizado, três acionadores do Lambda controlam os desafios e a verificação das respostas.
-
O acionador
DefineAuthChallenge
do Lambda usa como entrada uma matriz de sessão de desafios e respostas anteriores. Depois, ele gera o nome do próximo desafio e os boolianos que indicam se o usuário está autenticado e pode receber tokens. Esse acionador do Lambda é uma máquina de estado que controla o caminho do usuário por meio dos desafios. -
O acionador
CreateAuthChallenge
do Lambda usa um nome de desafio como entrada e gera o desafio e os parâmetros para avaliar a resposta. QuandoDefineAuthChallenge
retornaCUSTOM_CHALLENGE
como o próximo desafio, o fluxo de autenticação chamaCreateAuthChallenge
. O acionadorCreateAuthChallenge
do Lambda passa o próximo tipo de desafio no parâmetro de metadados de desafio. -
A função do
VerifyAuthChallengeResponse
Lambda avalia a resposta e retorna um booleano para indicar se a resposta foi válida.
Um fluxo de autenticação personalizado também pode usar uma combinação de desafios integrados, como verificação de senha SRP e MFA por SMS. Ele pode usar desafios personalizados, como CAPTCHA ou perguntas secretas.
Usar verificação de senha SRP no fluxo de autenticação personalizado
Para incluir a SRP em um fluxo de autenticação personalizado, você deve começar com ele.
-
Para iniciar a verificação de senha SRP em um fluxo personalizado, o aplicativo chama
InitiateAuth
comCUSTOM_AUTH
como oAuthflow
. No mapa deAuthParameters
, a solicitação de sua aplicação incluiSRP_A:
(o valor de SRP A) eCHALLENGE_NAME: SRP_A
. -
O fluxo de
CUSTOM_AUTH
invoca o acionador do LambdaDefineAuthChallenge
com uma sessão inicial dechallengeName: SRP_A
echallengeResult: true
. Sua função do Lambda responde comchallengeName: PASSWORD_VERIFIER
,issueTokens: false
efailAuthentication: false
. -
Depois, a aplicação deve chamar
RespondToAuthChallenge
comchallengeName: PASSWORD_VERIFIER
e os outros parâmetros necessários para a SRP no mapachallengeResponses
. -
Se o Amazon Cognito verificar a senha,
RespondToAuthChallenge
invocará o acionadorDefineAuthChallenge
do Lambda com uma segunda sessão dechallengeName: PASSWORD_VERIFIER
echallengeResult: true
. Nesse ponto, o acionador do LambdaDefineAuthChallenge
pode responder comchallengeName: CUSTOM_CHALLENGE
para iniciar o desafio personalizado. -
Se a MFA estiver habilitada para um usuário, depois que o Amazon Cognito verificar a senha, o usuário será desafiado a configurar ou fazer login com a MFA.
nota
A página da Web de login hospedada do Amazon Cognito não pode ativar Acionadores do Lambda de desafio personalizado de autenticação.
Para obter mais informações sobre os acionadores do Lambda, incluindo o código de exemplo, consulte Como personalizar fluxos de trabalho do grupo de usuários com acionadores do Lambda.
Fluxo de autenticação de administração
A prática recomendada para autenticação é usar as operações de API descritas em Fluxo de autenticação personalizado com a SRP para verificação de senha. Os AWS SDKs usam essa abordagem, e essa abordagem os ajuda a usar o SRP. No entanto, se você quiser evitar os cálculos da SRP, um conjunto alternativo de operações da API de administrador está disponível para proteger servidores de backend. Para essas implementações administrativas de backend, use AdminInitiateAuth
no lugar de InitiateAuth
. Além disso, use AdminRespondToAuthChallenge
no lugar de RespondToAuthChallenge
. Como você pode enviar a senha como texto sem formatação, não é necessário fazer cálculos de SRP ao usar essas operações. Exemplo:
AdminInitiateAuth Request { "AuthFlow":"ADMIN_USER_PASSWORD_AUTH", "AuthParameters":{ "USERNAME":"
<username>
", "PASSWORD":"<password>
" }, "ClientId":"<clientId>
", "UserPoolId":"<userPoolId>
" }
Essas operações de autenticação de administração exigem credenciais de desenvolvedor e usam o processo de assinatura do AWS
Signature Version 4 (SigV4). Essas operações estão disponíveis nos SDKs da AWS
padrão, incluindo o Node.js, que é conveniente para funções do Lambda. Para usar essas operações e fazer com que elas aceitem senhas em texto não criptografado, é necessário ativá-las para a aplicação no console. Como alternativa, é possível transmitir ADMIN_USER_PASSWORD_AUTH
para o parâmetro ExplicitAuthFlow
em chamadas para CreateUserPoolClient
ou UpdateUserPoolClient
. As operações InitiateAuth
e RespondToAuthChallenge
não aceitam a ADMIN_USER_PASSWORD_AUTH
AuthFlow
.
Na resposta AdminInitiateAuth
ChallengeParameters
, o atributo USER_ID_FOR_SRP
, se estiver presente, incluirá o nome do usuário real, não um alias (como o endereço de e-mail ou o número de telefone). Na chamada para AdminRespondToAuthChallenge
, nas ChallengeResponses
, é necessário transmitir esse nome de usuário no parâmetro USERNAME
.
nota
Como as implementações de administração de backend usam o fluxo de autenticação de administração, o fluxo não comporta rastreamento de dispositivo. Quando você ativa o rastreamento de dispositivo, a autenticação de administração é executada com êxito, mas qualquer chamada para atualizar o token de acesso falha.
Fluxo de autenticação de migração de usuários
Um acionador de migração de usuários do Lambda ajuda a migrar usuários de um sistema de gerenciamento de usuários herdado para seu grupo de usuários. Se você escolher o fluxo de autenticação USER_PASSWORD_AUTH
, os usuários não terão que redefinir suas senhas durante a migração de usuários. Esse fluxo envia as senhas dos usuários para o serviço por uma conexão SSL criptografada durante a autenticação.
Quando você concluir a migração de todos os usuários, alterne os fluxos para o fluxo de SRP mais seguro. O fluxo de SRP não envia senhas pela rede.
Para saber mais sobre acionadores do Lambda, consulte Como personalizar fluxos de trabalho do grupo de usuários com acionadores do Lambda.
Para obter mais informações sobre como migrar usuários com um acionador do Lambda, consulte Como importar usuários para grupos de usuários com um acionador Lambda de migração de usuário.