

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
<a name="cognito-user-pool-managing-errors"></a>

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 aplicación con la API de grupos de usuarios de Amazon Cognito, `PreventUserExistenceErrors` es `LEGACY` o se inhabilita de forma predeterminada. En la consola de Amazon Cognito, la opción **Evitar errores de existencia de usuarios** (un ajuste de `ENABLED` para `PreventUserExistenceErrors`) está seleccionada de forma predeterminada. Para actualizar la configuración de `PreventUserExistenceErrors`, realice una de las siguientes acciones:
+ Cambie el valor de `PreventUserExistenceErrors` entre `ENABLED` y `LEGACY` en una solicitud de API [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html).
+ 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 seleccionado (`ENABLED`) y deseleccionado (`LEGACY`).

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

Si el valor de esta propiedad es `ENABLED`, el cliente de la aplicación no revela con un error `UserNotFoundException` la inexistencia de una cuenta de usuario en el grupo de usuarios. Una configuración `PreventUserExistenceErrors` de `ENABLED` tiene los siguientes efectos cuando se envía una solicitud de un nombre de usuario que no existe:
+ Amazon Cognito responde con información no específica a las solicitudes de la API cuando, si diera información específica, la respuesta podría revelar que existe un usuario válido.
+ Amazon Cognito devuelve una respuesta genérica a un error de autenticación a las solicitudes de contraseña olvidada y a las solicitudes de autenticación con flujos de autenticación, *excepto* para la [autenticación basada en opciones](authentication-flows-selection-sdk.md#authentication-flows-selection-choice) (`USER_AUTH`), como `USER_SRP_AUTH` o `CUSTOM_AUTH`. Con la respuesta de error, se indica que el nombre de usuario o la contraseña es incorrecto.
+ Amazon Cognito responde a las solicitudes de autenticación basada en opciones con una selección aleatoria de los tipos de desafíos permitidos para el grupo de usuarios. Es posible que su grupo de usuarios devuelva una clave de acceso, una contraseña de un solo uso o un desafío de contraseña.
+ El comportamiento de la confirmación de la cuenta y la recuperación de la contraseña de Amazon Cognito APIs alterna entre devolver una respuesta que indica que se envió un código a un medio de entrega simulado y devolver un error. `InvalidParameterException`

En la siguiente información se da información detallada sobre el comportamiento de las operaciones del grupo de usuarios cuando `PreventUserExistenceErrors` tiene la configuración `ENABLED`.

## Operaciones de autenticación y creación de usuarios
<a name="cognito-user-pool-managing-errors-user-auth"></a>

Puede configurar las respuestas de error en la autenticación de nombre de usuario y contraseña y en la de contraseña remota segura (SRP). También puede personalizar los errores que devuelve con la autenticación personalizada. La configuración de `PreventUserExistenceErrors` no afecta a la autenticación basada en opciones.Información sobre la divulgación de la existencia del usuario en los flujos de autenticación

**Autenticación basada en opciones**  
En el flujo de autenticación `USER_AUTH` basado en opciones, Amazon Cognito plantea un desafío a partir de los principales factores de autenticación disponibles, en función de la configuración del grupo de usuarios y de los atributos de los usuarios. Este flujo de autenticación puede arrojar problemas relacionados con la contraseña, la contraseña remota segura (SRP), la clave de paso, la contraseña de un solo uso WebAuthn (OTP) por SMS o la OTP del correo electrónico. Con `PreventUserExistenceErrors` activo, Amazon Cognito envía un desafío a los usuarios inexistentes para que completen una o más de las formas de autenticación disponibles. Si `PreventUserExistenceErrors` está inactivo, Amazon Cognito devuelve una excepción `UserNotFound`.

**Autenticación de nombre de usuario y contraseña**  
Los flujos de autenticación `ADMIN_USER_PASSWORD_AUTH` y `USER_PASSWORD_AUTH` y el flujo `PASSWORD` de `USER_AUTH` devuelven una `NotAuthorizedException` con el mensaje `Incorrect username or password` cuando `PreventUserExistenceErrors` está activo. Cuando `PreventUserExistenceErrors` está inactivo, estos flujos devuelven `UserNotFoundException`.

**Autenticación basada en contraseña remota segura (SRP)**  
Como práctica recomendada, implemente solo `PreventUserExistenceErrors` con `USER_SRP_AUTH` o el flujo `PASSWORD_SRP` de `USER_AUTH` en grupos de usuarios sin los [atributos de alias](user-pool-settings-attributes.md#user-pool-settings-aliases) de dirección de correo electrónico, número de teléfono o nombre de usuario preferido. Es posible que los usuarios con atributos de alias no estén sujetos a la supresión de la existencia del usuario en el flujo de autenticación del SRP. Los flujos de autenticación de nombre de usuario y contraseña (`ADMIN_USER_PASSWORD_AUTH`, `USER_PASSWORD_AUTH` y el desafío de `PASSWORD` `USER_AUTH`) suprimen por completo la existencia de usuarios a partir de los atributos de alias.  
Cuando alguien intenta iniciar sesión con SRP con un nombre de usuario que el cliente de aplicación no conoce, Amazon Cognito devuelve una respuesta simulada en el primer paso, tal y como se describe en [RFC 5054](https://tools.ietf.org/html/rfc5054#section-2.5.1.3). Amazon Cognito devuelve el mismo fragmento salt y un ID de usuario interno en formato de [UUID](cognito-terms.md#terms-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érico `NotAuthorizedException` cuando el nombre de usuario o la contraseña son incorrectos. Para obtener más información sobre cómo implementar una autenticación personalizada, consulte [Inicio de sesión con contraseñas persistentes y carga útil segura](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-srp).  
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](cognito-terms.md#terms-uuid).

**Desencadenador de Lambda del desafío de autenticación personalizada**  
Amazon Cognito invoca los [desencadenadores de Lambda de desafío de autenticación personalizada](user-pool-lambda-challenge.md) cuando los usuarios intentan iniciar sesión con el flujo de autenticación `CUSTOM_AUTH`, pero no se encuentra su nombre de usuario. El evento de entrada incluye un parámetro booleano denominado `UserNotFound` con un valor de `true` para cualquier usuario inexistente. Este parámetro aparece en los eventos de solicitud que el grupo de usuarios envía a las funciones de Lambda de creación, definición y verificación de autenticación que componen la arquitectura de autenticación personalizada. Al examinar este indicador en la lógica de la función de Lambda, puede simular desafíos de autenticación personalizados para un usuario que no exista.

**Desencadenador de Lambda Antes de la autenticación**  
Amazon Cognito invoca el [desencadenador antes de la autenticación](user-pool-lambda-pre-authentication.md) cuando los usuarios intentan iniciar sesión, pero no se encuentra su nombre de usuario. El evento de entrada incluye un parámetro `UserNotFound` con un valor de `true` para cualquier usuario inexistente.

En la siguiente lista se describe el efecto de `PreventUserExistenceErrors` en la creación de cuentas de usuario.Información sobre la divulgación de la existencia del usuario en los flujos de creación de usuarios

**SignUp**  
La operación `SignUp` siempre devuelve `UsernameExistsException` cuando ya existe 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](user-pool-settings-attributes.md#user-pool-settings-aliases).  
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](#cognito-user-pool-managing-errors-prevent-userexistence-errors).

**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 [Obligación de que los usuarios importados restablezcan sus contraseñas](cognito-user-pools-using-import-tool.md#cognito-user-pools-using-import-tool-password-reset).

**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 [Importación de usuarios con un desencadenador de Lambda para la migración de usuarios](cognito-user-pools-import-using-lambda.md). 

### Prevención de errores `UsernameExistsException` en las direcciones de correo electrónico y los números de teléfono al registrarse
<a name="cognito-user-pool-managing-errors-prevent-userexistence-errors"></a>

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](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#user-pool-settings-aliases) (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 comando AWS CLI **

   ```
   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"
       }
   }
   ```

1. 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
   ```

1. 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"
       }
   }
   ```

1. 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 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"
```

**Ejemplo de respuesta**

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

## Operaciones de restablecimiento de contraseña
<a name="cognito-user-pool-managing-errors-password-reset"></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
<a name="cognito-user-pool-managing-errors-confirmation"></a>

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