Gerenciar respostas de erro de existência do usuário - 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á.

Gerenciar respostas de erro de existência do usuário

O Amazon Cognito permite personalizar respostas de erro retornadas por grupos de usuários. As respostas de erro personalizadas estão disponíveis para operações de criação e autenticação de usuários, recuperação de senha e confirmação.

Use o PreventUserExistenceErrors de um cliente da aplicação de grupo de usuários para habilitar ou desabilitar erros relacionados à existência do usuário. Quando você cria um novo aplicativo, o cliente com os grupos de usuários do Amazon Cognito PreventUserExistenceErrors é APILEGACY, ou desativado, por padrão. No console do Amazon Cognito, a opção Evitar erros na existência do usuário — uma configuração de ENABLED para PreventUserExistenceErrors — é selecionada por padrão. Para atualizar sua PreventUserExistenceErrors configuração, faça o seguinte:

  • Altere o valor de PreventUserExistenceErrors entre ENABLED e LEGACY em uma UpdateUserPoolClientAPIsolicitação.

  • Edite seu cliente de aplicativo no console do Amazon Cognito e altere o estado de Evitar erros de existência de usuário entre selecionado (ENABLED) e desmarcado (). LEGACY

Quando essa propriedade tem um valor deLEGACY, seu cliente do aplicativo retorna uma resposta de UserNotFoundException erro quando um usuário tenta fazer login com um nome de usuário que não existe no seu grupo de usuários.

Quando essa propriedade tem um valor deENABLED, seu cliente do aplicativo não divulga a inexistência de uma conta de usuário em seu grupo de usuários com um UserNotFoundException erro. Uma PreventUserExistenceErrors configuração de ENABLED tem os seguintes efeitos:

  • O Amazon Cognito responde com informações não específicas às API solicitações em que, de outra forma, sua resposta poderia revelar a existência de um usuário válido.

  • O login e a senha esquecida do Amazon Cognito retornam uma resposta genérica de falha de autenticaçãoAPIs. A resposta de erro informa que o nome de usuário ou a senha está incorreta.

  • A confirmação da conta e a recuperação de senha do Amazon Cognito APIs retornam uma resposta indicando que um código foi enviado para um meio de entrega simulado, em vez de uma representação parcial das informações de contato do usuário.

As informações a seguir detalham os comportamentos das operações do grupo de usuários quando PreventUserExistenceErrors está definido comoENABLED.

Operações de autenticação e criação de usuários

Você pode configurar respostas de erro na autenticação de nome de usuário e senha remota segura () SRP. Também é possível personalizar os erros retornados com a autenticação personalizada. O seguinte APIs executa essas operações de autenticação:

  • AdminInitiateAuth

  • AdminRespondToAuthChallenge

  • InitiateAuth

  • RespondToAuthChallenge

A lista a seguir demonstra como você pode personalizar as respostas de erro nas operações de autenticação do usuário.

Autenticação com nome de usuário e senha

Para fazer login de um usuário com ADMIN_USER_PASSWORD_AUTH eUSER_PASSWORD_AUTH, inclua o nome de usuário e a senha em uma InitiateAuth API solicitação AdminInitiateAuth ou. O Amazon Cognito retorna um erro genérico NotAuthorizedException quando o nome de usuário ou a senha está incorreta.

Autenticação baseada em senha remota segura (SRP)

Para fazer login de um usuário comUSER_SRP_AUTH, inclua um nome de usuário e um SRP_A parâmetro em uma InitiateAuth API solicitação AdminInitiateAuth or. Em resposta, o Amazon Cognito devolve um SRP_B sal para o usuário. Quando um usuário não é encontrado, o Amazon Cognito retorna uma resposta simulada na primeira etapa, conforme descrito em 5054. RFC O Amazon Cognito retorna o mesmo sal e uma ID de usuário interna no UUIDformato para a mesma combinação de nome de usuário e grupo de usuários. Quando você envia uma RespondToAuthChallenge API solicitação com comprovante de senha, o Amazon Cognito retorna um NotAuthorizedException erro genérico quando o nome de usuário ou a senha estão incorretos.

nota

Você pode simular uma resposta genérica com autenticação de nome de usuário e senha se estiver usando atributos de alias baseados em verificação e o nome de usuário imutável não estiver formatado como a. UUID

Acionador do Lambda do desafio de autenticação personalizada

Se você usar o Acionador do Lambda do desafio de autenticação personalizada e habilitar respostas de erro, o LambdaChallenge retornará um parâmetro booliano chamado UserNotFound. Em seguida, ele é passado na solicitação de acionadores do Lambda DefineAuthChallenge, VerifyAuthChallenge e CreateAuthChallenge. Você pode usar esse acionador para simular desafios de autenticação personalizados para usuários não existentes. Se você chamar o acionador do Lambda de pré-autenticação para um usuário que não existe, o Amazon Cognito retornará UserNotFound.

A lista a seguir demonstra como você pode personalizar as respostas de erro nas operações de criação de usuários.

SignUp

A SignUp operação sempre retorna UsernameExistsException quando um nome de usuário já está sendo usado. Se você não quiser que o Amazon Cognito retorne um erro UsernameExistsException para endereços de e-mail e números de telefone ao inscrever usuários na aplicação, use atributos de alias baseados em verificação. Para obter mais informações sobre aliases, consulte Personalização dos atributos de login.

Para obter um exemplo de como o Amazon Cognito pode impedir o uso de SignUp API solicitações para descobrir usuários em seu grupo de usuários, consulte. Evitar erros UsernameExistsException de endereços de e-mail e números de telefone na inscrição

Usuários importados

Se PreventUserExistenceErrors estiver habilitado durante a autenticação de usuários importados, será retornado um erro genérico NotAuthorizedException, que indica que o nome de usuário ou a senha estava incorreta, em vez de PasswordResetRequiredException. Consulte Solicitar que os usuários importados redefinam suas senhas para obter mais informações.

Migrar o acionador do Lambda do usuário

O Amazon Cognito retornará uma resposta simulada para usuários não existentes quando uma resposta vazia tiver sido definida no contexto do evento original pelo acionador do Lambda. Para obter mais informações, consulte Migrar o acionador do Lambda do usuário.

Evitar erros UsernameExistsException de endereços de e-mail e números de telefone na inscrição

O exemplo a seguir demonstra como, ao configurar atributos de alias em seu grupo de usuários, você pode evitar que endereços de e-mail e números de telefone duplicados gerem UsernameExistsException erros em resposta às solicitações. SignUp API Você deve ter criado o grupo de usuários com o endereço de e-mail ou o número de telefone como atributos de alias. Para obter mais informações, consulte a seção Personalizar atributos de login de Atributos de grupos de usuários.

  1. Jie se inscreve com um novo nome de usuário e também fornece o endereço de e-mail jie@example.com. O Amazon Cognito envia um código para o endereço de e-mail dele.

    Exemplo de AWS CLI comando

    aws cognito-idp sign-up --client-id 1234567890abcdef0 --username jie --password PASSWORD --user-attributes Name="email",Value="jie@example.com"

    Exemplo de resposta

    { "UserConfirmed": false, "UserSub": "<subId>", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } }
  2. Jie fornece o código enviado a ele para confirmar a propriedade do endereço de e-mail. Isso conclui seu registro como usuário.

    Exemplo de AWS CLI comando

    aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=jie --confirmation-code xxxxxx
  3. Shirley registra uma nova conta de usuário e fornece o endereço de e-mail jie@example.com. O Amazon Cognito não retorna um erro UsernameExistsException e envia um código de confirmação para o endereço de e-mail de Jie.

    Exemplo de AWS CLI comando

    aws cognito-idp sign-up --client-id 1234567890abcdef0 --username shirley --password PASSWORD --user-attributes Name="email",Value="jie@example.com"

    Exemplo de resposta

    { "UserConfirmed": false, "UserSub": "<new subId>", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } }
  4. Em um cenário diferente, Shirley é proprietária de jie@example.com. Shirley recupera o código que o Amazon Cognito enviou para o endereço de e-mail de Jie e tenta confirmar a conta.

    Exemplo de AWS CLI comando

    aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=shirley --confirmation-code xxxxxx

    Exemplo de resposta

    An error occurred (AliasExistsException) when calling the ConfirmSignUp operation: An account with the email already exists.

O Amazon Cognito não retorna um erro à solicitação aws cognito-idp sign-up de Shirley, apesar de jie@example.com ter sido atribuído a um usuário existente. Shirley deve demonstrar a propriedade do endereço de e-mail antes que o Amazon Cognito retorne uma resposta de erro. Em um grupo de usuários com atributos de alias, esse comportamento impede o uso do público SignUp API para verificar se um usuário existe com um determinado endereço de e-mail ou número de telefone.

Esse comportamento é diferente da resposta que o Amazon Cognito retorna à solicitação SignUp com um nome de usuário existente, conforme mostrado no exemplo a seguir. Embora Shirley saiba, com base nessa resposta, que já existe um usuário com o nome jie, não é possível saber sobre nenhum endereço de e-mail ou número de telefone associado ao usuário.

Exemplo de comando da CLI

aws cognito-idp sign-up --client-id 1example23456789 --username jie --password PASSWORD --user-attributes Name="email",Value="shirley@example.com"

Exemplo de resposta

An error occurred (UsernameExistsException) when calling the SignUp operation: User already exists

Operações de redefinição de senha

O Amazon Cognito retorna as respostas a seguir às operações de redefinição de senha do usuário quando você evita erros de existência do usuário.

ForgotPassword

Quando um usuário não é encontrado, está desativado ou não tem um mecanismo de entrega verificado para recuperar a senha, o Amazon Cognito retorna CodeDeliveryDetails com um meio de entrega simulado para um usuário. O meio de entrega simulado é determinado pelo formato de entrada do nome de usuário e as configurações de verificação do grupo de usuários.

ConfirmForgotPassword

O Amazon Cognito retorna o erro CodeMismatchException para usuários que não existem ou estão desabilitados. Se um código não for solicitado ao ser usado o ForgotPassword, o Amazon Cognito retornará o erro ExpiredCodeException.

Operações de confirmação

O Amazon Cognito retorna as respostas a seguir às operações de confirmação e verificação do usuário quando você evita erros de existência do usuário.

ResendConfirmationCode

O Amazon Cognito retorna CodeDeliveryDetails para um usuário desabilitado ou um usuário que não existe. O Amazon Cognito envia um código de confirmação para o e-mail ou telefone do usuário existente.

ConfirmSignUp

Retorna ExpiredCodeException se um código tiver expirado. O Amazon Cognito retorna NotAuthorizedException quando um usuário não está autorizado. Se o código não corresponder ao que o servidor espera que o Amazon Cognito retorne CodeMismatchException.