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 nos grupos API de usuários. Se adicionar um domínio ao grupo de usuários, você poderá usar os endpoints do grupo de usuários. Os grupos de usuários API oferecem suporte a uma variedade de modelos de autorização e fluxos de solicitação para API solicitações.

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 API operações na seguinte ordem:

Public authentication

InitiateAuthe não RespondToAuthChallenge são autenticados APIs para uso com clientes de aplicativos públicos do lado do cliente.

Server-side authentication

AdminInitiateAuthe AdminRespondToAuthChallenge exigem IAM credenciais e são adequados para clientes de aplicativos 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.

Authentication flow diagram showing user, mobile/web app, and user pool interactions for token issuance.

Normalmente, seu aplicativo gera uma solicitação para coletar informações do seu usuário e envia essas informações em uma API solicitação ao Amazon Cognito. Considere um InitiateAuth fluxo em um grupo de usuários em que você configurou seu 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. Seu aplicativo solicita que o usuário insira o MFA código do 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 API solicitações em um fluxo de autenticação, inclua a string de 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 os grupos de usuários do Amazon Cognito. API 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 da duração da sessão do fluxo de autenticação para a duração de validade que você deseja, em minutos, para SMS MFA os códigos. 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
Para configurar a duração da sessão do fluxo de autenticação do cliente do aplicativo (Amazon CognitoAPI)
  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 que você deseja, em minutos, para SMS MFA os códigos. 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 Configurações específicas do aplicativo com clientes de aplicativos.

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

Depois de cinco tentativas fracassadas de login não autenticado ou IAM autenticado com uma senha, o Amazon Cognito bloqueia seu 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 aplicativos do lado do cliente do usuário que você cria com AWS Amplifyou o. AWS SDKs

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

  2. O aplicativo chama a InitiateAuth operação com os detalhes do nome de usuário e da Senha Remota Segura (SRP).

    Essa API operação retorna os parâmetros de autenticação.

    nota

    O aplicativo gera SRP detalhes com os SRP recursos do Amazon Cognito incorporados ao. 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 liga RespondToAuthChallenge novamente, desta vez com a sessão e a resposta do desafio (por exemplo, MFA código).

Fluxo de autenticação no lado do servidor

Se você não tem um aplicativo de usuário, mas usa um back-end seguro ou um aplicativo do lado do servidor em Java, Ruby ou Node.js, você pode usar o servidor autenticado para grupos de usuários do Amazon Cognito. API

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 do lado do servidor chama a AdminInitiateAuth API operação (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 o aplicativo do lado do servidor tem os parâmetros de autenticação, ele chama a AdminRespondToAuthChallenge API operação (em vez de). RespondToAuthChallenge A AdminRespondToAuthChallenge API operação só é bem-sucedida quando você fornece as AWS credenciais.

Para obter mais informações sobre a assinatura de API solicitações do Amazon Cognito com AWS credenciais, consulte Processo de assinatura do Signature versão 4 na AWS Referência geral.

As AdminRespondToAuthChallenge API operações AdminInitiateAuth e 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 obter mais informações, consulte Configurações específicas do aplicativo com clientes de aplicativos.

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

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 InitiateAuth API operação que indica o tipo de autenticação a 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. Para obter mais detalhes sobre as RespondToAuthChallenge API operações InitiateAuth e, consulte a APIdocumentação.

Fluxo de autenticação integrado e desafios

O Amazon Cognito contém ChallengeName valores integrados AuthFlow para que um fluxo de autenticação padrão possa validar um nome de usuário e uma senha por meio do protocolo Secure Remote Password ()SRP. Eles 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ê ativou a autenticação multifatorial (MFA) para o usuário, o Amazon Cognito retornará ChallengeName o de. 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 e MFA verificação de SRP senhaSMS. Ele pode usar desafios personalizados, como CAPTCHA perguntas secretas.

Use SRP a verificação de senha no fluxo de autenticação personalizado

Se você quiser incluir SRP em um fluxo de autenticação personalizado, você deve começar comSRP.

  • Para iniciar a verificação de SRP senha em um fluxo personalizado, o aplicativo liga InitiateAuth com CUSTOM_AUTH asAuthflow. No AuthParameters mapa, a solicitação do seu aplicativo inclui SRP_A: (o valor SRP A) CHALLENGE_NAME: SRP_A e.

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

  • Em seguida, o aplicativo deve chamar RespondToAuthChallenge com challengeName: PASSWORD_VERIFIER e os outros parâmetros necessários SRP no challengeResponses mapa.

  • 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 MFA estiver habilitado para um usuário, depois que o Amazon Cognito verificar a senha, seu usuário será desafiado a configurar ou fazer login com. 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 melhor prática para autenticação é usar as API operações descritas em Fluxo de autenticação personalizado com SRP para verificação de senha. O AWS SDKs uso dessa abordagem, e essa abordagem os ajuda a usarSRP. No entanto, se você quiser evitar SRP cálculos, um conjunto alternativo de API operações administrativas está disponível para servidores de back-end seguros. 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 simples, não precisa fazer SRP cálculos 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 em formato padrão AWS SDKs, incluindo Node.js, que é conveniente para funções 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 meio de uma SSL conexão criptografada durante a autenticação.

Depois de migrar todos os seus usuários, alterne os fluxos para o SRP fluxo mais seguro. O SRP fluxo não envia nenhuma senha 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 com um acionador do Lambda de migração de usuários.