Administración de las respuestas de error de existencia de usuarios - Amazon Cognito

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Administración de las respuestas de error de existencia de usuarios

Amazon Cognito es compatible con la personalización de las respuestas de error que devuelven los grupos de usuarios. Existen respuestas de error personalizadas para las operaciones de creación y autenticación de usuarios, recuperación de contraseñas y confirmación.

Utilice la configuración de PreventUserExistenceErrors de un cliente de aplicaciones del grupo de usuarios para habilitar o desactivar errores relacionados con la existencia del usuario. Cuando crea un nuevo cliente de aplicaciones con los grupos de usuarios de Amazon Cognito APILEGACY, PreventUserExistenceErrors está o deshabilitado de forma predeterminada. En la consola de Amazon Cognito, la opción Evitar errores de existencia del usuario (un ajuste de ENABLED forPreventUserExistenceErrors) está seleccionada de forma predeterminada. Para actualizar la PreventUserExistenceErrors configuración, realice una de las siguientes acciones:

  • Cambie el valor PreventUserExistenceErrors entre ENABLED y LEGACY en una UpdateUserPoolClientAPIsolicitud.

  • Edite el cliente de la aplicación en la consola de Amazon Cognito y cambie el estado de Evitar errores de existencia de usuarios entre selected (ENABLED) y deselected (). LEGACY

Si esta propiedad tiene un valor deLEGACY, el cliente de la aplicación devuelve una respuesta de UserNotFoundException error cuando un usuario intenta iniciar sesión con un nombre de usuario que no existe en su grupo de usuarios.

Cuando esta propiedad tiene un valor deENABLED, el cliente de la aplicación no revela con un UserNotFoundException error la inexistencia de una cuenta de usuario en el grupo de usuarios. Una PreventUserExistenceErrors configuración de ENABLED tiene los siguientes efectos:

  • Amazon Cognito responde con información no específica a API las solicitudes en las que, de lo contrario, su respuesta podría revelar la existencia de un usuario válido.

  • El inicio de sesión en Amazon Cognito y la contraseña olvidada APIs devuelven una respuesta genérica de error de autenticación. Con la respuesta de error, se indica que el nombre de usuario o la contraseña es incorrecto.

  • La confirmación de la cuenta y la APIs recuperación de la contraseña de Amazon Cognito muestran una respuesta que indica que se envió un código a un medio de entrega simulado, en lugar de una representación parcial de la información de contacto del usuario.

La siguiente información detalla el comportamiento de las operaciones del grupo de usuarios cuando PreventUserExistenceErrors está configurado en. ENABLED

Operaciones de autenticación y creación de usuarios

Puede configurar las respuestas de error tanto en la autenticación de nombre de usuario y contraseña como en la autenticación de contraseña remota segura () SRP. También puede personalizar los errores que devuelve con la autenticación personalizada. Las siguientes operaciones de autenticación llevan a APIs cabo las siguientes operaciones de autenticación:

  • AdminInitiateAuth

  • AdminRespondToAuthChallenge

  • InitiateAuth

  • RespondToAuthChallenge

En la siguiente lista se muestra cómo puede personalizar las respuestas de error en las operaciones de autenticación de usuarios.

Autenticación de nombre de usuario y contraseña

Para iniciar sesión con un usuario ADMIN_USER_PASSWORD_AUTH yUSER_PASSWORD_AUTH, incluya el nombre de usuario y la contraseña en una InitiateAuth API solicitud AdminInitiateAuth o. Amazon Cognito devuelve un error NotAuthorizedException genérico en el que se indica que el nombre de usuario o la contraseña no son correctos.

Autenticación basada en Secure Remote Password (SRP)

Para iniciar sesión con un usuarioUSER_SRP_AUTH, incluya un nombre de usuario y un SRP_A parámetro en una InitiateAuth API solicitud AdminInitiateAuth o. En respuesta, Amazon Cognito devuelve SRP_B y sal para el usuario. Cuando no se encuentra un usuario, Amazon Cognito devuelve una respuesta simulada en el primer paso, tal y como se describe en 5054. RFC Amazon Cognito devuelve la misma sal y un seudónimo interno en UUIDformato para la misma combinación de nombre de usuario y grupo de usuarios. Al enviar una RespondToAuthChallenge API solicitud con un comprobante de contraseña, Amazon Cognito devuelve un NotAuthorizedException error genérico cuando el nombre de usuario o la contraseña son incorrectos.

nota

Puede simular una respuesta genérica con la autenticación de nombre de usuario y contraseña si utiliza atributos de alias basados en la verificación y el nombre de usuario inmutable no tiene el formato de. UUID

Desencadenador de Lambda de desafío de autenticación personalizado

Si utiliza el desencadenador de Lambda de desafío de autenticación personalizado y habilita las respuestas de error, LambdaChallenge devuelve un parámetro booleano llamado UserNotFound. A continuación se pasa en la solicitud de los desencadenadores de Lambda DefineAuthChallenge, VerifyAuthChallenge, y CreateAuthChallenge. Puede utilizar este desencadenador a fin de simular desafíos de autenticación personalizados para un usuario que no exista. Si llama al desencadenador de Lambda de autenticación previa para un usuario que no existe, Amazon Cognito devuelve UserNotFound.

En la siguiente lista se muestra cómo puede personalizar las respuestas de error en las operaciones de creación de usuarios.

SignUp

La SignUp operación siempre se devuelve UsernameExistsException cuando ya se ha utilizado un nombre de usuario. Si no desea que Amazon Cognito devuelva un error UsernameExistsException para las direcciones de correo electrónico y los números de teléfono cuando registre usuarios en su aplicación, utilice atributos de alias basados en verificación. Para obtener más información acerca de los alias, consulte Personalización de los atributos de inicio de sesión.

Para ver un ejemplo de cómo Amazon Cognito puede impedir el uso de SignUp API solicitudes para detectar usuarios en su grupo de usuarios, consulte. Prevención de errores UsernameExistsException en las direcciones de correo electrónico y los números de teléfono al registrarse

Usuarios importados

Durante la autenticación de los usuarios importados, si se habilita PreventUserExistenceErrors, se devuelve un error NotAuthorizedException genérico en el que se indica que el nombre de usuario o la contraseña eran incorrectos, en lugar de devolver PasswordResetRequiredException. Para obtener más información, consulte Requisito para que los usuarios importados restablezcan sus contraseñas.

Migración del desencadenador de Lambda del usuario

Amazon Cognito devolverá una respuesta simulada para los usuarios que no existan cuando el desencadenador de Lambda establezca una respuesta vacía en el contexto del evento original. Para obtener más información, consulte Migración del desencadenador de Lambda del usuario.

Prevención de errores UsernameExistsException en las direcciones de correo electrónico y los números de teléfono al registrarse

El siguiente ejemplo demuestra cómo, al configurar los atributos de alias en su grupo de usuarios, puede evitar que las direcciones de correo electrónico y los números de teléfono duplicados generen UsernameExistsException errores en respuesta a SignUp API las solicitudes. Debe haber creado su grupo de usuarios con la dirección de correo electrónico o el número de teléfono como atributo de alias. Para obtener más información, consulte la sección Customizing sign-in attributes (Personalización de atributos de inicio de sesión) de User pool attributes (Atributos de grupo de usuarios).

  1. Jie se registra para obtener un nuevo nombre de usuario y también proporciona la dirección de correo electrónico jie@example.com. Amazon Cognito envía un código a su dirección de correo electrónico.

    Ejemplo de AWS CLI comando

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

    Ejemplo de respuesta

    { "UserConfirmed": false, "UserSub": "<subId>", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } }
  2. Jie proporciona el código que se le envió para confirmar su propiedad de la dirección de correo electrónico. Esto completa su registro como usuario.

    Ejemplo de AWS CLI comando

    aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=jie --confirmation-code xxxxxx
  3. Shirley registra una nueva cuenta de usuario y proporciona la dirección de correo electrónico jie@example.com. Amazon Cognito no devuelve ningún error UsernameExistsException y envía un código de confirmación a la dirección de correo electrónico de Jie.

    Ejemplo de AWS CLI comando

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

    Ejemplo de respuesta

    { "UserConfirmed": false, "UserSub": "<new subId>", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } }
  4. En un escenario diferente, Shirley tiene la propiedad de jie@example.com. Shirley recupera el código que Amazon Cognito envió a la dirección de correo electrónico de Jie e intenta confirmar la cuenta.

    Ejemplo de AWS CLI comando

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

    Ejemplo de respuesta

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

Amazon Cognito no devuelve un error a la solicitud de aws cognito-idp sign-up de Shirley, a pesar de que jie@example.com se asigne a un usuario existente. Shirley debe demostrar la propiedad de la dirección de correo electrónico antes de que Amazon Cognito devuelva una respuesta de error. En un grupo de usuarios con atributos de alias, este comportamiento impide el uso del público SignUp API para comprobar si un usuario existe con una dirección de correo electrónico o un número de teléfono determinados.

Este comportamiento es diferente de la respuesta que Amazon Cognito devuelve a la solicitud SignUp con un nombre de usuario existente, como se muestra en el siguiente ejemplo. Aunque Shirley sabe por esta respuesta que ya existe un usuario con el nombre de usuario jie, no conoce ninguna dirección de correo electrónico o número de teléfono asociados al usuario.

Comando CLI de ejemplo

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

Ejemplo de respuesta

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

Operaciones de restablecimiento de contraseña

Amazon Cognito devuelve las siguientes respuestas a las operaciones de restablecimiento de la contraseña del usuario cuando se evitan los errores de existencia de usuarios.

ForgotPassword

Cuando un usuario no se encuentra, está desactivado o no dispone de un mecanismo de entrega verificado para recuperar su contraseña, Amazon Cognito siempre devuelve CodeDeliveryDetails con un medio de entrega simulado para un usuario. El medio de entrega simulado vendrá determinado por el formato del nombre de usuario de entrada y la configuración de verificación del grupo de usuarios.

ConfirmForgotPassword

Amazon Cognito devuelve el error CodeMismatchException para los usuarios que no existen o que están inhabilitados. Si no se solicita un código al utilizar ForgotPassword, Amazon Cognito devuelve el error ExpiredCodeException.

Operaciones de confirmación

Amazon Cognito devuelve las siguientes respuestas a las operaciones de confirmación y verificación de usuarios cuando se evitan los errores de existencia de usuarios.

ResendConfirmationCode

Amazon Cognito devuelve CodeDeliveryDetails para un usuario inhabilitado o que no existe. Amazon Cognito envía un código de confirmación al correo electrónico o al número de teléfono del usuario existente.

ConfirmSignUp

Se devuelve ExpiredCodeException si un código se ha vencido. Amazon Cognito devuelve NotAuthorizedException cuando un usuario no está autorizado. Si el código no coincide con lo que el servidor espera, Amazon Cognito devuelve CodeMismatchException.