Fluxo de autenticação de grupo de usuários - Amazon Cognito

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:

Public authentication

InitiateAuth e RespondToAuthChallenge são APIs não autenticadas para uso com clientes de aplicações públicas do lado do cliente.

Server-side authentication

AdminInitiateAuth e AdminRespondToAuthChallenge exigem credenciais do IAM e são adequadas para clientes de aplicações confidenciais do lado do servidor.

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).

  1. A aplicação solicita que o usuário informe o nome de usuário e a senha.

  2. Você precisa incluir o nome de usuário e a senha como parâmetros em InitiateAuth.

  3. O Amazon Cognito retorna um desafio SMS_MFA e um identificador de sessão.

  4. A aplicação solicita que o usuário forneça o código de MFA exibido no telefone.

  5. 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.

Amazon Cognito console
Como configurar a duração da sessão do fluxo de autenticação do cliente da aplicação (AWS Management Console)
  1. Na guia App integration (Integração de aplicações) no grupo de usuários, selecione o nome do cliente da aplicação no contêiner App clients and analytics (Clientes e análise de aplicações).

  2. Selecione Editar no contêiner Informações do cliente da aplicação.

  3. Altere o valor de Authentication flow session duration (Duração da sessão do fluxo de autenticação) para a duração de validade desejada, em minutos, para códigos de MFA por SMS. Isso também altera a quantidade de tempo que qualquer usuário tem para concluir qualquer desafio de autenticação no cliente da aplicação.

  4. Escolha Salvar alterações.

Amazon Cognito API
Como configurar a duração da sessão do fluxo de autenticação do cliente da aplicação (API do Amazon Cognito)
  1. Prepare uma solicitação UpdateUserPoolClient com as configurações existentes de seu grupo de usuários usando uma solicitação DescribeUserPoolClient. A solicitação UpdateUserPoolClient deve incluir todas as propriedades existentes do cliente da aplicação.

  2. Altere o valor de AuthSessionValidity para a duração de validade desejada, em minutos, para códigos de MFA por SMS. Isso também altera a quantidade de tempo que qualquer usuário tem para concluir qualquer desafio de autenticação no cliente da aplicação.

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.

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 com AWS SDKs.

  1. O usuário insere suas respectivas credenciais no aplicativo.

  2. 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.

  3. 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.

  4. 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 de InitiateAuth). Essa operação requer AWS credenciais com permissões que incluem cognito-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 de RespondToAuthChallenge). A operação AdminRespondToAuthChallenge 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 como ADMIN_NO_SRP_AUTH) no parâmetro ExplicitAuthFlow quando você chamar CreateUserPoolClient ou UpdateUserPoolClient.

  • 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. Quando DefineAuthChallenge retorna CUSTOM_CHALLENGE como o próximo desafio, o fluxo de autenticação chama CreateAuthChallenge. O acionador CreateAuthChallenge 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 com CUSTOM_AUTH como o Authflow. No mapa de AuthParameters, a solicitação de sua aplicação inclui SRP_A: (o valor de SRP A) e CHALLENGE_NAME: SRP_A.

  • O fluxo de CUSTOM_AUTH invoca o acionador do Lambda DefineAuthChallenge com uma sessão inicial de challengeName: SRP_A e challengeResult: true. Sua função do Lambda responde com challengeName: PASSWORD_VERIFIER, issueTokens: false e failAuthentication: false.

  • Depois, a aplicação deve chamar RespondToAuthChallenge com challengeName: PASSWORD_VERIFIER e os outros parâmetros necessários para a SRP no mapa challengeResponses.

  • Se o Amazon Cognito verificar a senha, RespondToAuthChallenge invocará o acionador DefineAuthChallenge do Lambda com uma segunda sessão de challengeName: PASSWORD_VERIFIER e challengeResult: true. Nesse ponto, o acionador do Lambda DefineAuthChallenge pode responder com challengeName: 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.