

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.

# Autenticación con grupos de usuarios de Amazon Cognito
<a name="authentication"></a>

Amazon Cognito incluye varios métodos para autenticar a los usuarios. Los usuarios pueden iniciar sesión con WebAuthn contraseñas y claves de acceso. Amazon Cognito puede enviarles una contraseña de un solo uso en un mensaje de correo electrónico o SMS. Puede implementar funciones de Lambda que organicen su propia secuencia de desafíos y respuestas. Son *flujos de autenticación*. En los flujos de autenticación, los usuarios proporcionan un secreto y Amazon Cognito lo verifica y, a continuación, emite tokens web JSON (JWTs) para que las aplicaciones los procesen con las bibliotecas de OIDC. En este capítulo, analizaremos cómo configurar los grupos de usuarios y los clientes de aplicación para varios flujos de autenticación en distintos entornos de aplicaciones. Conocerá las opciones para utilizar las páginas de inicio de sesión alojadas del inicio de sesión gestionado y para crear su propia lógica y interfaz en un SDK. AWS 

Todos los grupos de usuarios, tengan o no un dominio, pueden autenticar usuarios en la API de grupos de usuarios. Si agrega un dominio al grupo de usuarios, puede utilizar los [puntos de conexión del grupo de usuarios](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html). La API de grupos de usuarios admite una variedad de modelos de autorización y flujos de solicitud para las solicitudes de API.

A fin de verificar la identidad de los usuarios, Amazon Cognito admite flujos de autenticación que incorporan tipos de desafíos además de contraseñas, como contraseñas de un solo uso enviadas por correo electrónico y SMS, y claves de acceso.

**Topics**
+ [Implementación de flujos de autenticación](#authentication-implement)
+ [Factores que debe tener en cuenta sobre la autenticación con grupos de usuarios](#authentication-flow-things-to-know)
+ [Un ejemplo de sesión de autenticación](#amazon-cognito-user-pools-authentication-flow)
+ [Configuración de los métodos de autenticación para el inicio de sesión administrado](authentication-flows-selection-managedlogin.md)
+ [Administre los métodos de autenticación en AWS SDKs](authentication-flows-selection-sdk.md)
+ [Flujos de autenticación](amazon-cognito-user-pools-authentication-flow-methods.md)
+ [Modelos de autorización para la autenticación de API y SDK](authentication-flows-public-server-side.md)

## Implementación de flujos de autenticación
<a name="authentication-implement"></a>

Ya sea que esté implementando un inicio de [sesión administrado](authentication-flows-selection-managedlogin.md) o una [interfaz de aplicación personalizada](authentication-flows-selection-sdk.md) con un AWS SDK para la autenticación, debe configurar el cliente de la aplicación para los tipos de autenticación que desee implementar. La siguiente información describe la configuración de los flujos de autenticación en los [clientes de aplicación](user-pool-settings-client-apps.md) y en la aplicación.

------
#### [ App client supported flows ]

Puede configurar los flujos compatibles para los clientes de su aplicación en la consola de Amazon Cognito o con la API de un AWS SDK. Después de configurar el cliente de la aplicación para que admita estos flujos, puede implementarlos en la aplicación.

El siguiente procedimiento configura los flujos de autenticación disponibles para un cliente de aplicación con la consola Amazon Cognito.

**Cómo configurar un cliente de aplicación para flujos de autenticación (consola)**

1. Inicie sesión en la consola AWS de [grupos de usuarios de Amazon Cognito y navegue hasta ella](https://console.aws.amazon.com/cognito/v2/idp). Elija un grupo de usuarios o cree uno nuevo.

1. En la configuración de su grupo de usuarios, seleccione el menú **Clientes de aplicación**. Elija un cliente de aplicación o cree uno nuevo.

1. En **Información del cliente de aplicación**, seleccione **Editar**.

1. En **Flujos de clientes de aplicación**, elija los flujos de autenticación que desee admitir.

**Cómo configurar un cliente de aplicación para flujos de autenticación (API/SDK)**  
Para configurar los flujos de autenticación disponibles para un cliente de aplicaciones con la API de Amazon Cognito, defina el valor de `ExplicitAuthFlows` en una solicitud [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-ExplicitAuthFlows)o [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html#CognitoUserPools-UpdateUserPoolClient-request-ExplicitAuthFlows). A continuación, puede ver un ejemplo donde se proporciona a un cliente una contraseña remota segura (SRP) y una autenticación basada en opciones.

```
"ExplicitAuthFlows": [ 
   "ALLOW_USER_AUTH",
   "ALLOW_USER_SRP_AUTH
]
```

Al configurar los flujos compatibles con el cliente de aplicación, puede especificar las opciones y valores de API siguientes.


**Soporte de flujo del cliente de aplicación**  

| Flujo de autenticación | Compatibilidad | Consola | API  | 
| --- | --- | --- | --- | 
| [Autenticación basada en opciones](authentication-flows-selection-sdk.md#authentication-flows-selection-choice) | En el servidor, en el cliente | Seleccionar un tipo de autenticación al iniciar sesión | ALLOW\_USER\_AUTH | 
| [Inicio de sesión con contraseñas persistentes](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-password) | En el cliente | Inicio de sesión con nombre de usuario y contraseña | ALLOW\_USER\_PASSWORD\_AUTH | 
| [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) | En el servidor, en el cliente | Inicio de sesión con una contraseña remota segura (SRP) | ALLOW\_USER\_SRP\_AUTH | 
| [Actualice los tokens](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-refresh) | En el servidor, en el cliente | Obtener nuevos tokens de usuario de las sesiones autenticadas existentes | ALLOW\_REFRESH\_TOKEN\_AUTH | 
| [Autenticación en el servidor](authentication-flows-public-server-side.md#amazon-cognito-user-pools-server-side-authentication-flow) | En el servidor | Inicio de sesión con credenciales administrativas en el servidor | ALLOW\_ADMIN\_USER\_PASSWORD\_AUTH | 
| [Autenticación personalizada](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-custom) | Aplicaciones personalizadas en el cliente y en el servidor. No es compatible con el inicio de sesión administrado. | Iniciar sesión con flujos de autenticación personalizados desde desencadenadores de Lambda | ALLOW\_CUSTOM\_AUTH | 

------
#### [ Implement flows in your application ]

El inicio de sesión administrado hace que las opciones de autenticación configuradas estén disponibles automáticamente en las páginas de inicio de sesión. En las aplicaciones personalizadas, inicie la autenticación con una declaración del flujo inicial.
+ Para elegir entre una lista de opciones de flujo para un usuario, declare la [autenticación basada en opciones](authentication-flows-selection-sdk.md#authentication-flows-selection-choice) con el flujo `USER_AUTH`. Este flujo tiene métodos de autenticación que no están disponibles en los flujos de autenticación basados en el cliente, como la autenticación con [clave de acceso](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passkey) y [sin contraseña](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless).
+ Para elegir su flujo de autenticación por adelantado, declare la [autenticación basada en el cliente](authentication-flows-selection-sdk.md#authentication-flows-selection-client) con cualquier otro flujo que esté disponible en su cliente de aplicación.

Al iniciar sesión con los usuarios, el cuerpo [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-AuthFlow)de la [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-AuthFlow)solicitud debe incluir un `AuthFlow` parámetro.

Autenticación basada en opciones:

```
"AuthFlow": "USER_AUTH"
```

Autenticación basada en el cliente con SRP:

```
"AuthFlow": "USER_SRP_AUTH"
```

------

## Factores que debe tener en cuenta sobre la autenticación con grupos de usuarios
<a name="authentication-flow-things-to-know"></a>

Tenga en cuenta la siguiente información al diseñar el modelo de autenticación con grupos de usuarios de Amazon Cognito.

**Los flujos de autenticación en el inicio de sesión administrado y en la interfaz de usuario alojada**  
El [inicio de sesión administrado](cognito-user-pools-managed-login.md) tiene más opciones de autenticación que la interfaz de usuario alojada clásica. Por ejemplo, los usuarios solo pueden realizar la autenticación sin contraseña y con clave de acceso en el inicio de sesión administrado.

**Los flujos de autenticación personalizados solo están disponibles en la autenticación AWS del SDK**  
No puede realizar *flujos de autenticación personalizados* ni [autenticaciones personalizadas con activadores Lambda](user-pool-lambda-challenge.md) con el inicio de sesión administrado ni con la interfaz de usuario alojada clásica. La autenticación personalizada está disponible en la [autenticación con AWS SDKs](authentication-flows-selection-sdk.md).

**Inicio de sesión administrado para un proveedor de identidades (IdP) externo**  
No puedes iniciar sesión a los usuarios a través de un [tercero IdPs](cognito-user-pools-identity-federation.md) al [autenticarse con AWS SDKs](authentication-flows-selection-sdk.md). Debe implementar el inicio de sesión administrado o la clásica interfaz de usuario alojada, redirigir al objeto de autenticación resultante y IdPs, a continuación, procesarlo con las bibliotecas OIDC de su aplicación. Para obtener más información sobre el inicio de sesión administrado, consulte [Inicio de sesión administrado de grupos de usuarios](cognito-user-pools-managed-login.md).

**Efecto de la autenticación sin contraseña en otras características de usuario**  
La activación del inicio de sesión sin contraseña con [contraseñas de un solo uso](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless) o [claves de acceso](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passkey) en el grupo de usuarios y en el cliente de aplicación repercute en la creación y migración de los usuarios. Cuando el inicio de sesión sin contraseña está activo, ocurre lo siguiente:  

1. Los administradores pueden crear usuarios sin contraseñas. La plantilla de mensaje de invitación predeterminada cambia y ya no incluye el marcador de posición de contraseñas `{###}`. Para obtener más información, consulte [Creación de cuentas de usuario como administrador](how-to-create-user-accounts.md).

1. En el caso de [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)las operaciones basadas en el SDK, los usuarios no están obligados a proporcionar una contraseña al registrarse. El inicio de sesión administrado y la interfaz de usuario alojada requieren una contraseña en la página de registro, aunque la autenticación sin contraseña esté permitida. Para obtener más información, consulte [Inscripción y confirmación de cuentas de usuario](signing-up-users-in-your-app.md).

1. Los usuarios importados de un archivo CSV pueden iniciar sesión inmediatamente con opciones sin contraseña, sin necesidad de restablecer la contraseña, si sus atributos incluyen una dirección de correo electrónico o un número de teléfono para una opción de inicio de sesión sin contraseña disponible. Para obtener más información, consulte [Importación de usuarios en grupos de usuarios desde un archivo CSV](cognito-user-pools-using-import-tool.md).

1. La autenticación sin contraseña no invoca el [activador Lambda de migración de usuarios](user-pool-lambda-migrate-user.md).

1. Los usuarios que inician sesión con una contraseña de un solo uso (OTP) como primer factor no pueden añadir un factor de [autenticación multifactor (MFA) a](user-pool-settings-mfa.md) su sesión. Las claves de paso con verificación de usuario pueden cumplir los requisitos de MFA cuando se configuran con. `MULTI_FACTOR_WITH_USER_VERIFICATION`

**La persona que confía en la clave de acceso no URLs puede figurar en la lista pública de sufijos**  
Puede usar nombres de dominio de su propiedad, como `www.example.com`, como ID del actor de confianza (RP) en la configuración de su clave de acceso. Esta configuración está pensada para admitir aplicaciones personalizadas que se ejecutan en dominios de su propiedad. La [lista pública de sufijos](https://publicsuffix.org/), o PSL, contiene dominios globales protegidos. Amazon Cognito devuelve un error cuando intenta establecer la URL de un RP en un dominio de la PSL.

**Topics**
+ [Duración del flujo de la sesión de autenticación](#authentication-flow-session-duration)
+ [Comportamiento de bloqueo por intentos de inicio de sesión con error](#authentication-flow-lockout-behavior)

### Duración del flujo de la sesión de autenticación
<a name="authentication-flow-session-duration"></a>

Según las características del grupo de usuarios, puede terminar respondiendo a varios desafíos para `InitiateAuth` y `RespondToAuthChallenge` antes de que la aplicación recupere los tokens de Amazon Cognito. Amazon Cognito incluye una cadena de sesión en la respuesta a cada solicitud. Para combinar las solicitudes de la API en un flujo de autenticación, incluya la cadena de sesión de la respuesta a la solicitud anterior en cada solicitud posterior. De forma predeterminada, los usuarios tienen tres minutos para completar cada desafío antes de que caduque la cadena de sesión. Para ajustar este periodo, cambie el cliente de la aplicación **Duración de la sesión de flujo de autenticación**. En el siguiente procedimiento, se describe cómo cambiar esta configuración en la configuración del cliente de la aplicación.

**nota**  
La configuración de la **duración de la sesión del flujo de autenticación** se aplica a la autenticación con la API de los grupos de usuarios de Amazon Cognito. El inicio de sesión administrado establece la duración de la sesión en 3 minutos para la autenticación multifactor y en 8 minutos para los códigos de restablecimiento de contraseña.

------
#### [ Amazon Cognito console ]

**Para configurar la duración de la sesión del flujo de autenticación del cliente (Consola de administración de AWS)**

1. En la pestaña **App integration** (Integración de aplicaciones) de su grupo de usuarios, seleccione el nombre de su cliente de aplicaciones en el contenedor **App clients and analytics** (Clientes de aplicaciones y análisis).

1. Elija **Editar** en el contenedor de **Información de cliente de aplicaciones**.

1. Cambie el valor de **Duración de la sesión del flujo de autenticación** a la duración de validez que desee, en minutos, para los códigos MFA de SMS y correo electrónico. Esto también cambia la cantidad de tiempo que tiene cualquier usuario para completar cualquier desafío de autenticación en el cliente de la aplicación.

1. Seleccione **Save changes (Guardar cambios)**.

------
#### [ User pools API ]

**Para configurar la duración de la sesión del flujo de autenticación del cliente (API Amazon Cognito)**

1. Prepare una solicitud `UpdateUserPoolClient` con la configuración de su grupo de usuarios existente desde una solicitud `DescribeUserPoolClient`. Su solicitud `UpdateUserPoolClient` debe incluir todas las propiedades del cliente de la aplicación existentes.

1. Cambie el valor de `AuthSessionValidity` a la duración de validez que desee, en minutos, para los códigos MFA de SMS. Esto también cambia la cantidad de tiempo que tiene cualquier usuario para completar cualquier desafío de autenticación en el cliente de la aplicación.

------

Para obtener más información acerca de los clientes de aplicación, consulte [Ajustes específicos de una aplicación en los clientes de aplicación](user-pool-settings-client-apps.md).

### Comportamiento de bloqueo por intentos de inicio de sesión con error
<a name="authentication-flow-lockout-behavior"></a>

Tras cinco intentos infructuosos de inicio de sesión con la contraseña de un usuario, independientemente de si se han solicitado con operaciones de API no autenticadas o con autorización IAM, Amazon Cognito bloquea al usuario durante un segundo. La duración del bloqueo se duplica después de cada intento fallido adicional, hasta un máximo de aproximadamente 15 minutos.

Los intentos realizados durante un periodo de bloqueo generan una excepción `Password attempts exceeded` y no afectan a la duración de los periodos de bloqueo posteriores. Para un número acumulado de intentos de inicio de sesión con error *n*, sin incluir las excepciones `Password attempts exceeded`, Amazon Cognito bloquea a su usuario durante *2^(n-5)* segundos. Para restablecer el bloqueo a su estado inicial *n=0*, su usuario debe iniciar sesión correctamente después de que venza un periodo de bloqueo, o no iniciar ningún intento de inicio de sesión durante 15 minutos consecutivos en cualquier momento después de un bloqueo. Este comportamiento está sujeto a cambios. Este comportamiento no se aplica a los desafíos personalizados, a menos que también realicen una autenticación basada en contraseña.

## Un ejemplo de sesión de autenticación
<a name="amazon-cognito-user-pools-authentication-flow"></a>

El diagrama y la step-by-step guía siguientes ilustran un escenario típico en el que un usuario inicia sesión en una aplicación. La aplicación de ejemplo presenta al usuario varias opciones de inicio de sesión. Para seleccionar una opción, el usuario debe introducir sus credenciales, proporcionar un factor de autenticación adicional e iniciar sesión.

![Diagrama de flujo que muestra una aplicación que solicita al usuario que introduzca datos e inicia sesión con un AWS SDK.](http://docs.aws.amazon.com/es_es/cognito/latest/developerguide/images/authentication-api-userauth.png)


Imagine una aplicación con una página de inicio de sesión en la que los usuarios puedan iniciar sesión con un nombre de usuario y una contraseña, solicitar un código de un solo uso en un mensaje de correo electrónico o elegir una opción de huella digital.

1. **Solicitud de inicio de sesión**: la aplicación muestra una pantalla de inicio con un botón *Iniciar sesión*.

1. **Solicitar inicio de sesión**: el usuario selecciona *Iniciar sesión*. Desde una cookie o desde la memoria caché, la aplicación recupera su nombre de usuario o le pide que lo introduzca.

1. **Opciones de solicitud**: su aplicación solicita las opciones de inicio de sesión del usuario mediante una solicitud de API `InitiateAuth` con el flujo `USER_AUTH`, en la que se solicitan los métodos de inicio de sesión disponibles para el usuario.

1. **Envío de opciones de inicio de sesión**: Amazon Cognito responde con `PASSWORD`, `EMAIL_OTP` y `WEB_AUTHN`. La respuesta incluye un identificador de sesión para que lo reproduzca en la siguiente respuesta.

1. **Opciones de visualización**: su aplicación muestra los elementos de la interfaz de usuario para que el usuario introduzca su nombre de usuario y contraseña, obtenga un código de un solo uso o escanee su huella digital.

1. **Elige option/Enter las credenciales**: el usuario introduce su nombre de usuario y contraseña.

1. **Inicio de la autenticación**: su aplicación proporciona la información de inicio de sesión del usuario con una solicitud de API `RespondToAuthChallenge` que confirma el inicio de sesión con nombre de usuario y contraseña y proporciona el nombre de usuario y la contraseña.

1. **Validación de las credenciales**: Amazon Cognito confirma las credenciales del usuario.

1. **Desafío adicional**: el usuario tiene la autenticación multifactor configurada con una aplicación de autenticación. Amazon Cognito devuelve un desafío `SOFTWARE_TOKEN_MFA`.

1. **Petición del desafío**: la aplicación muestra un formulario en el que se solicita una contraseña temporal de un solo uso (TOTP) desde la aplicación de autenticación del usuario.

1. **Respuesta al desafío**: el usuario envía la TOTP.

1. **Responder al desafío**: en otra solicitud `RespondToAuthChallenge`, su aplicación proporciona la TOTP del usuario.

1. **Validación de la respuesta al desafío**: Amazon Cognito confirma el código del usuario y determina que su grupo de usuarios está configurado para no plantear desafíos adicionales al usuario actual.

1. **Emitir tokens**: Amazon Cognito devuelve los tokens web de ID, acceso y actualización de JSON ()JWTs. La autenticación inicial del usuario está completa.

1. **Almacenamiento de los tokens**: su aplicación almacena en caché los tokens del usuario para poder hacer referencia a los datos del usuario, autorizar el acceso a los recursos y actualizar los tokens cuando caduquen.

1. **Representación de contenido autorizado**: su aplicación determina el acceso del usuario a los recursos en función de su identidad y roles, y entrega el contenido de la aplicación.

1. **Acceso al contenido**: el usuario ha iniciado sesión y comienza a usar la aplicación.

1. **Solicitud de contenido con un token caducado**: posteriormente, el usuario solicita un recurso que requiere autorización. El token en caché del usuario ha caducado.

1. **Tokens de actualización**: su aplicación hace una solicitud `InitiateAuth` con el token de actualización guardado por el usuario.

1. **Emitir fichas**: Amazon Cognito devuelve un nuevo ID y acceso. JWTs La sesión del usuario se actualiza de forma segura sin solicitar credenciales adicionales.

Puede usar [activadores AWS Lambda](cognito-user-pools-working-with-lambda-triggers.md) para personalizar la forma en que los usuarios se autentican. Estos disparadores emiten y verifican sus propios desafíos durante el flujo de autenticación.

También puede utilizar el flujo de autenticación de administrador para servidores backend seguros. También puede utilizar el [flujo de autenticación de migración de usuarios](cognito-user-pools-using-import-tool.md) para permitir la migración de usuarios sin necesidad de que estos restablezcan sus contraseñas.