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 grupo de usuarios con la API de grupos de usuarios de Amazon Cognito, PreventUserExistenceErrors
es false
de forma predeterminada. Cuando este valor es true
, Amazon Cognito responde con información no específica a las solicitudes de la API cuando, de lo contrario, la respuesta podría revelar que existe un usuario válido. En la API de Amazon Cognito, actualice este valor con una solicitud UpdateUserPoolClient. En la AWS Management Console, cree o edite su cliente de aplicación para activar Prevent user existence errors (Prevenir errores de existencia de usuario). Cuando crea un nuevo grupo de usuarios en la AWS Management Console, Evitar errores de existencia de usuarios se habilita de forma predeterminada.
Cuando evita errores de existencia de usuarios en el grupo de usuarios, las API de inicio de sesión y de contraseña olvidada de Amazon Cognito devuelven una respuesta de error de autenticación genérica. Con la respuesta de error, se indica que el nombre de usuario o la contraseña es incorrecto. Las API de confirmación de cuentas y de recuperación de contraseñas de Amazon Cognito devuelven una respuesta en la que se indica que se ha enviado un código a un medio de entrega simulado. La respuesta de error funciona cuando el estado es ENABLED
y el usuario no existe. A continuación, se muestra el funcionamiento detallado de las operaciones de Amazon Cognito cuando PreventUserExistenceErrors
se establece en ENABLED
.
Operaciones de creación y autenticación de usuarios
Puede utilizar la autenticación por contraseña de nombre de usuario o la autenticación por contraseña remota segura (SRP) con las siguientes operaciones. También puede personalizar los errores que devuelve con la autenticación personalizada.
-
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 la sesión de un usuario con
ADMIN_USER_PASSWORD_AUTH
yUSER_PASSWORD_AUTH
, incluya el nombre de usuario y la contraseña en una solicitud de APIAdminInitiateAuth
oInitiateAuth
. Amazon Cognito devuelve un errorNotAuthorizedException
genérico en el que se indica que el nombre de usuario o la contraseña no son correctos. - Autenticación basada en contraseña remota segura (SRP)
-
Para iniciar la sesión de un usuario con
USER_SRP_AUTH
, incluya un nombre de usuario y un parámetroSRP_A
en una solicitud de APIAdminInitiateAuth
oInitiateAuth
. En respuesta, Amazon Cognito devuelveSRP_B
y "sal" para el usuario, de acuerdo con el estándar SRP. Cuando no se encuentra ningún usuario, Amazon Cognito devuelve una respuesta simulada en el primer paso, tal y como se describe en RFC 5054. Amazon Cognito devuelve la misma "sal" y un ID de usuario interno en formato de identificador único universal (UUID) para la misma combinación de nombre de usuario y grupo de usuarios. Al enviar una solicitud de API RespondToAuthChallenge
con prueba de contraseña, Amazon Cognito devuelve un error genéricoNotAuthorizedException
cuando el nombre de usuario o la contraseña son incorrectos.nota
Puede simular una respuesta genérica con 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 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 llamadoUserNotFound
. A continuación se pasa en la solicitud de los desencadenadores de LambdaDefineAuthChallenge
,VerifyAuthChallenge
, yCreateAuthChallenge
. 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 devuelveUserNotFound
.
En la siguiente lista se muestra cómo puede personalizar las respuestas de error en las operaciones de creación de usuarios.
- SignUp
-
La operación
SignUp
devuelveUsernameExistsException
cuando ya existe un nombre de usuario. Si no desea que Amazon Cognito devuelva un errorUsernameExistsException
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 sobre los alias, 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).Para obtener un ejemplo de cómo Amazon Cognito puede evitar que se utilicen las solicitudes de API
SignUp
para descubrir 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 errorNotAuthorizedException
genérico en el que se indica que el nombre de usuario o la contraseña eran incorrectos, en lugar de devolverPasswordResetRequiredException
. 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
En el siguiente ejemplo se 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 errores UsernameExistsException
en respuesta a las solicitudes de API SignUp
. 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).
-
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.Comando AWS CLI de ejemplo
aws cognito-idp sign-up --client-id 1234567890abcdef0 --username jie --password PASSWORD --user-attributes Name="email",Value="jie@example.com"
Respuesta de ejemplo
{ "UserConfirmed": false, "UserSub": "
<subId>
", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } } -
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.
Comando AWS CLI de ejemplo
aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=jie --confirmation-code xxxxxx
-
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 errorUsernameExistsException
y envía un código de confirmación a la dirección de correo electrónico de Jie.Comando AWS CLI de ejemplo
aws cognito-idp sign-up --client-id 1234567890abcdef0 --username shirley --password PASSWORD --user-attributes Name="email",Value="jie@example.com"
Respuesta de ejemplo
{ "UserConfirmed": false, "UserSub": "
<new subId>
", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } } -
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.Comando AWS CLI de ejemplo
aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=shirley --confirmation-code xxxxxx
Respuesta de ejemplo
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 utilizar la API SignUp
pública para comprobar si existe un usuario 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 de la CLI de ejemplo
aws cognito-idp sign-up --client-id 1example23456789 --username jie --password PASSWORD --user-attributes Name="email",Value="shirley@example.com"
Respuesta de ejemplo
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 utilizarForgotPassword
, Amazon Cognito devuelve el errorExpiredCodeException
.
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 devuelveNotAuthorizedException
cuando un usuario no está autorizado. Si el código no coincide con lo que el servidor espera, Amazon Cognito devuelveCodeMismatchException
.