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. Ao criar um cliente de aplicação utilizando a API de grupo de usuários do Amazon Cognito LEGACY será PreventUserExistenceErrors ou então desativada, por padrão. No console do Amazon Cognito, a opção Habilitar a prevenção de erros de existência do usuário — uma configuração de ENABLED para PreventUserExistenceErrors — é selecionada por padrão. Para atualizar a configuração PreventUserExistenceErrors, siga um destes procedimentos:

  • Alterar o valor de PreventUserExistenceErrors entre ENABLED e LEGACY em um UpdateUserPoolClientSolicitação de API.

  • Edite seu cliente de aplicação no console do Amazon Cognito e altere o estado de Habilitar a prevenção de erros de existência do usuário entre selecionado (ENABLED) e desmarcado (LEGACY).

Quando essa propriedade tem um valor LEGACY, o cliente da aplicação retorna uma resposta de erro UserNotFoundException 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 ENABLED, o cliente da aplicação não divulga a inexistência de uma conta de usuário em seu grupo de usuários e exibe o erro UserNotFoundException. Uma configuração PreventUserExistenceErrors de ENABLED tem os seguintes efeitos:

  • O Amazon Cognito responde com informações não específicas às solicitações de API, em que 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ção APIs . 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 como ENABLED.

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

Você pode configurar respostas de erro na autenticação de Nome de usuário-Senha 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 e USER_PASSWORD_AUTH, inclua o nome de usuário e a senha em uma solicitação de API AdminInitiateAuth ou InitiateAuth. 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)

Como prática recomendada, implemente somente PreventUserExistenceErrors com a autenticação SRP em grupos de usuários sem endereço de e-mail, número de telefone ou atributos preferenciais de alias de nome de usuário. Usuários com atributos de alias podem não estar sujeitos à supressão da existência do usuário no fluxo de autenticação SRP. A autenticação por nome de usuário e senha suprime totalmente a existência de usuários a partir de atributos de alias.

Para fazer login de um usuário com USER_SRP_AUTH, inclua o nome de usuário e um parâmetro SRP_A em uma solicitação de API AdminInitiateAuth ou InitiateAuth. Em resposta, o Amazon Cognito retorna SRP_B e usa salt para o usuário. Quando um usuário não é localizado, o Amazon Cognito retorna uma resposta simulada na primeira etapa conforme descrito em RFC 5054. O Amazon Cognito retorna o mesmo salt e um ID de usuário interno no formato de UUID para a mesma combinação de nome de usuário e grupo de usuários. Quando você envia uma solicitação de API RespondToAuthChallenge com prova de senha, o Amazon Cognito retorna um erro genérico NotAuthorizedException quando o nome de usuário ou a senha está incorreta.

nota

Você pode simular uma resposta genérica com a autenticação de nome de usuário e senha se estiver usando atributos de alias baseados em verificação e se o nome de usuário imutável não estiver formatado como um 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 operação SignUp 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 ver um exemplo de como o Amazon Cognito pode impedir o uso de solicitações da API SignUp para descobrir usuários no 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 no grupo de usuários, você pode impedir que endereços de e-mail e números de telefone duplicados gerem erros UsernameExistsException em resposta às solicitações da API SignUp. 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 da API SignUp pública para verificar se existe um usuário 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.