Autenticación con grupos de usuarios de Amazon Cognito - 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.

Autenticación con grupos de usuarios de Amazon Cognito

Amazon Cognito incluye varios métodos para autenticar a los usuarios. Los usuarios pueden iniciar sesión con contraseñas y claves de acceso de WebAuthn. 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; luego, emite tokens web JSON (JWT) 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 usar las páginas de inicio de sesión alojadas del inicio de sesión administrado y para crear su propia lógica y interfaz en un AWS SDK.

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

Implementación de flujos de autenticación

Tanto si está implementando un inicio de sesión administrado como un frontend de aplicación personalizada con un AWS SDK para la autenticación, debe configurar el cliente de 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 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 AWS y vaya a la consola de grupos de usuarios de Amazon Cognito. Elija un grupo de usuarios o cree uno nuevo.

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

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

  4. 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)

A fin de configurar los flujos de autenticación disponibles para un cliente de aplicación con la API de Amazon Cognito, defina el valor de ExplicitAuthFlows en una solicitud CreateUserPoolClient o UpdateUserPoolClient. 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 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 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 En el servidor, en el cliente Inicio de sesión con una contraseña remota segura (SRP) ALLOW_USER_SRP_AUTH
Tokens de actualización 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 En el servidor Inicio de sesión con credenciales administrativas en el servidor ALLOW_ADMIN_USER_PASSWORD_AUTH
Autenticación personalizada 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 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 y sin contraseña.

  • Para elegir su flujo de autenticación por adelantado, declare la autenticación basada en el cliente con cualquier otro flujo que esté disponible en su cliente de aplicación.

Al iniciar sesión con los usuarios, el cuerpo de la solicitud InitiateAuth o AdminInitiateAuth debe incluir un parámetro AuthFlow.

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

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 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 del AWS SDK

No puede realizar flujos de autenticación personalizados ni autenticaciones personalizadas con activadores Lambda 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 SDK.

Inicio de sesión administrado para un proveedor de identidades (IdP) externo

No puede iniciar sesión para los usuarios mediante IdP de terceros en la autenticación con AWS SDK. Debe implementar el inicio de sesión administrado o la interfaz de usuario alojada clásica, redirigir a los IdP y, a continuación, procesar el objeto de autenticación resultante con las bibliotecas de OIDC en 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.

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 o claves de acceso 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.

  2. Para las operaciones SignUp basadas en SDK, los usuarios no tienen que poner una contraseña cuando se registran. 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.

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

  4. La autenticación sin contraseña no invoca el activador Lambda de migración de usuarios.

  5. Los usuarios que inicien sesión con un factor inicial sin contraseña no pueden añadir un factor de autenticación multifactor (MFA) a su sesión. Solo los flujos de autenticación basados en contraseña admiten la MFA.

Las URL de los actores de confianza de las clave de acceso no pueden 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, 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.

Duración del flujo de la sesión de autenticación

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

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

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

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

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

Comportamiento de bloqueo por intentos de inicio de sesión con error

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

El siguiente diagrama y la guía paso a paso 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 y luego ejecuta un inicio de sesión de usuario con un AWS SDK.

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.

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

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

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

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

  6. Seleccionar opción/introducir credenciales: el usuario introduce su nombre de usuario y contraseña.

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

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

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

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

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

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

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

  14. Emisión de tokens: Amazon Cognito devuelve los tokens web JSON (JWT) de ID, acceso y actualización. La autenticación inicial del usuario está completa.

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

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

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

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

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

  20. Emisión de tokens: Amazon Cognito devuelve un nuevo ID y accede a JWT. La sesión del usuario se actualiza de forma segura sin solicitar credenciales adicionales.

Puede usar activadores AWS Lambda 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 para permitir la migración de usuarios sin necesidad de que estos restablezcan sus contraseñas.