Flujo de autenticación de los grupos 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.

Flujo de autenticación de los grupos de usuarios

Amazon Cognito incluye varios métodos para autenticar a los usuarios. Todos los grupos de usuarios, tengan un dominio o no, pueden autenticar a los usuarios de los grupos API de usuarios. Si agrega un dominio al grupo de usuarios, puede utilizar los puntos de conexión del grupo de usuarios. Los grupos de usuarios API admiten diversos modelos de autorización y flujos de API solicitudes.

Para verificar la identidad de los usuarios, Amazon Cognito admite flujos de autenticación que incorporan nuevos tipos de desafíos, además de las contraseñas. La autenticación de Amazon Cognito normalmente requiere la implementación de dos API operaciones en el siguiente orden:

Public authentication

InitiateAuthy no RespondToAuthChallenge están autenticados APIs para su uso con clientes de aplicaciones públicas del lado del cliente.

Server-side authentication

AdminInitiateAuthy AdminRespondToAuthChallenge requieren IAM credenciales y son adecuados para clientes de aplicaciones confidenciales del lado del servidor.

Un usuario se autentica respondiendo a desafíos sucesivos hasta que se produce un error de autenticación o Amazon Cognito emite tokens para el usuario. Puede repetir estos pasos con Amazon Cognito, en un proceso que incluye diferentes desafíos, para admitir cualquier flujo de autenticación personalizado.

Authentication flow diagram showing user, mobile/web app, and user pool interactions for token issuance.

Normalmente, la aplicación genera un mensaje para recopilar información del usuario y envía esa información en una API solicitud a Amazon Cognito. Considere un InitiateAuth flujo de un grupo de usuarios en el que haya configurado su usuario con una autenticación multifactorial (). MFA

  1. La aplicación pide a los usuarios el nombre de usuario y la contraseña.

  2. El nombre de usuario y la contraseña se incluyen como parámetros en InitiateAuth.

  3. Amazon Cognito devuelve un desafío de SMS_MFA y un identificador de sesión.

  4. La aplicación solicita el MFA código al usuario desde su teléfono.

  5. Debe incluir ese código y el identificador de sesión en la solicitud RespondToAuthChallenge.

Según las características del grupo de usuarios, puede terminar respondiendo a varios desafíos para InitiateAuth 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 tus API solicitudes en un flujo de autenticación, incluye 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 duración de la sesión del flujo de autenticación se aplica a la autenticación con los grupos de usuarios de Amazon Cognito. API La interfaz de usuario alojada en Amazon Cognito establece la duración de la sesión en 3 minutos para la autenticación multifactorial y 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 (AWS Management Console)
  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 la duración de la sesión del flujo de autenticación por la duración de validez que desee, en minutos, para SMS MFA los códigos. 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. Elija Guardar cambios.

Amazon Cognito API
Para configurar la duración de la sesión del flujo de autenticación del cliente de la aplicación (Amazon CognitoAPI)
  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 por AuthSessionValidity la duración de validez que desee, en minutos, para SMS MFA los códigos. 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 Configuración específica de la aplicación con clientes de aplicaciones.

Puede usar AWS Lambda activadores 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.

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

Tras cinco intentos fallidos de inicio de sesión IAM autenticado o no autenticado con una contraseña, 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.

Flujo de autenticación en el lado del cliente

El siguiente proceso funciona para las aplicaciones del lado del cliente del usuario que cree con o con. AWS AmplifyAWS SDKs

  1. El usuario introduce su nombre de usuario y contraseña en la aplicación.

  2. La aplicación llama a la InitiateAuth operación con el nombre de usuario y los detalles de la contraseña remota segura (SRP).

    Esta API operación devuelve los parámetros de autenticación.

    nota

    La aplicación genera SRP detalles con las SRP funciones de Amazon Cognito integradas en. AWS SDKs

  3. La aplicación llama a la operación RespondToAuthChallenge. Si la llamada se realiza correctamente, Amazon Cognito devuelve los tokens del usuario y el flujo de autenticación finaliza.

    Si Amazon Cognito necesita otro desafío, la llamada a RespondToAuthChallenge no devuelve ningún token. En su lugar, la llamada devuelve una sesión.

  4. Si RespondToAuthChallenge devuelve una sesión, la aplicación RespondToAuthChallenge vuelve a llamar, esta vez con la sesión y la respuesta al desafío (por ejemplo, el MFA código).

Flujo de autenticación en el lado del servidor

Si no tiene una aplicación de usuario, sino que utiliza una aplicación de servidor o backend segura de Java, Ruby o Node.js, puede utilizar la aplicación autenticada del lado del servidor API para los grupos de usuarios de Amazon Cognito.

En el caso de las aplicaciones del lado del servidor, la autenticación de grupos de usuarios es similar a la de las aplicaciones del lado del cliente, excepto en el siguiente caso:

  • La aplicación del lado del servidor llama a la operación (en lugar de). AdminInitiateAuth API InitiateAuth Esta operación requiere AWS credenciales con permisos que incluyan cognito-idp:AdminInitiateAuth y. cognito-idp:AdminRespondToAuthChallenge Esta operación devuelve los parámetros de autenticación requeridos.

  • Una vez que la aplicación del lado del servidor tiene los parámetros de autenticación, llama a la AdminRespondToAuthChallenge API operación (en lugar deRespondToAuthChallenge). La AdminRespondToAuthChallenge API operación solo se realiza correctamente si se proporcionan las credenciales. AWS

Para obtener más información sobre cómo firmar API las solicitudes de Amazon Cognito con AWS credenciales, consulte el proceso de firma de la versión 4 de Signature en la Referencia AWS general.

AdminRespondToAuthChallengeAPILas operaciones AdminInitiateAuth y no pueden aceptar credenciales de username-and-password usuario para el inicio de sesión de administrador, a menos que las habilite explícitamente de una de las siguientes maneras:

  • Incluya ALLOW_ADMIN_USER_PASSWORD_AUTH (anteriormente llamado ADMIN_NO_SRP_AUTH) en el parámetro ExplicitAuthFlow cuando llame a CreateUserPoolClient o a UpdateUserPoolClient.

  • Agregue ALLOW_ADMIN_USER_PASSWORD_AUTH a la lista de Flujos de autenticación para el cliente de la aplicación. Configure clientes de aplicaciones en la pestaña App integration (Integración de aplicaciones) en el grupo de usuarios, bajo App clients and analytics (Clientes de aplicaciones y análisis). Para obtener más información, consulte Configuración específica de la aplicación con clientes de aplicaciones.

Flujo de autenticación personalizado

Los grupos de usuarios de Amazon Cognito también permiten utilizar flujos de autenticación personalizados, lo que puede ayudarle a crear un modelo de autenticación basado en desafíos/respuestas mediante activadores. AWS Lambda

El flujo de autenticación personalizado hace posible los ciclos de desafíos y respuestas personalizados para satisfacer diferentes requisitos. El flujo comienza con una llamada a la InitiateAuth API operación que indica el tipo de autenticación que se va a utilizar y proporciona los parámetros de autenticación iniciales. Amazon Cognito responde a la llamada InitiateAuth con uno de los siguientes tipos de información:

  • Un desafío para el usuario junto con una sesión y parámetros.

  • Un error si el usuario no se autentica correctamente.

  • Tokens de ID, acceso y actualización, si los parámetros proporcionados en la llamada InitiateAuth son suficientes para que el usuario inicie sesión. (Por lo general, el usuario o la aplicación deben responder primero a un desafío, pero el código personalizado debe determinarlo).

Si Amazon Cognito responde a la llamada InitiateAuth con un desafío, la aplicación reunirá más información y llamará a la operación RespondToAuthChallenge, lo que proporciona las respuestas al desafío y vuelve a pasar la sesión. Amazon Cognito responde a la llamada RespondToAuthChallenge de forma similar a la llamada InitiateAuth. Si el usuario ha iniciado sesión, Amazon Cognito proporciona tokens o si el usuario no ha iniciado sesión, Amazon Cognito proporciona otro desafío o un error. Si devuelve otro desafío, la secuencia se repite y la aplicación llama a RespondToAuthChallenge hasta que el usuario inicie sesión correctamente o se devuelva un error. Para obtener más información sobre las RespondToAuthChallenge API operaciones InitiateAuth y, consulte la APIdocumentación.

Flujo de autenticación integrado y desafíos

Amazon Cognito contiene ChallengeName valores AuthFlow e integrados para que un flujo de autenticación estándar pueda validar un nombre de usuario y una contraseña mediante el protocolo Secure Remote Password (SRP). Amazon Cognito ofrece soporte integrado para estos flujos. AWS SDKs

El flujo comienza enviando USER_SRP_AUTH como el AuthFlow a InitiateAuth. También envía los valores USERNAME y SRP_A en AuthParameters. Si la llamada InitiateAuth tiene éxito, la respuesta incluye PASSWORD_VERIFIER como ChallengeName y SRP_B en los parámetros del desafío. La aplicación llamará a continuación a RespondToAuthChallenge con el ChallengeName PASSWORD_VERIFIER y los parámetros necesarios en ChallengeResponses. Si la llamada a RespondToAuthChallenge se efectúa de manera correcta y el usuario inicia sesión, Amazon Cognito emite tokens. Si ha activado la autenticación multifactor (MFA) para el usuario, Amazon Cognito devuelve ChallengeName el de. SMS_MFA La aplicación puede proporcionar el código necesario a través de otra llamada a RespondToAuthChallenge.

Flujo de autenticación personalizado y desafíos

Una aplicación puede iniciar un flujo de autenticación personalizado llamando a InitiateAuth con CUSTOM_AUTH como Authflow. En el caso de un flujo de autenticación personalizado, tres desencadenadores de Lambda controlan los desafíos y la verificación de las respuestas.

  • El desencadenador de Lambda DefineAuthChallenge toma como entrada una matriz de sesiones de desafíos y respuestas anteriores. Luego genera los siguientes nombres de desafíos y valores booleanos que indican si el usuario está autenticado y se le deben otorgar tokens. Este desencadenador de Lambda es una máquina de estado que controla la ruta que sigue el usuario a través de los desafíos.

  • El desencadenador de Lambda CreateAuthChallenge toma el nombre de un desafío como entrada y genera el desafío y los parámetros para evaluar la respuesta. Cuando DefineAuthChallenge devuelve CUSTOM_CHALLENGE como el siguiente desafío, el flujo de autenticación llama a CreateAuthChallenge. El desencadenador de Lambda CreateAuthChallenge supera el siguiente tipo de desafío del parámetro de metadatos del desafío.

  • La función de Lambda VerifyAuthChallengeResponse evalúa la respuesta y devuelve un valor booleano para indicar si la respuesta ha sido válida.

Un flujo de autenticación personalizado también puede utilizar una combinación de desafíos integrados, como la verificación y MFA el SRP procesamiento de contraseñas. SMS Puede usar desafíos personalizados, como CAPTCHA preguntas secretas.

Utilice SRP la verificación de contraseña en el flujo de autenticación personalizado

Si desea incluirla SRP en un flujo de autenticación personalizado, debe empezar porSRP.

  • Para iniciar la verificación de la SRP contraseña en un flujo personalizado, la aplicación llama InitiateAuth con CUSTOM_AUTHAuthflow. En el AuthParameters mapa, la solicitud de tu aplicación incluye SRP_A: (el valor SRP A) yCHALLENGE_NAME: SRP_A.

  • El flujo CUSTOM_AUTH invoca el desencadenador de Lambda DefineAuthChallenge con una sesión inicial de challengeName: SRP_A y challengeResult: true. La función de Lambda responder con challengeName: PASSWORD_VERIFIER, issueTokens: false y failAuthentication: false.

  • A continuación, la aplicación debe llamar RespondToAuthChallenge con challengeName: PASSWORD_VERIFIER los demás parámetros requeridos SRP en el challengeResponses mapa.

  • Si Amazon Cognito verifica la contraseña, RespondToAuthChallenge llama al desencadenador de Lambda DefineAuthChallenge con una segunda sesión de challengeName: PASSWORD_VERIFIER y challengeResult: true. En ese momento, el desencadenador de Lambda DefineAuthChallenge responde con challengeName: CUSTOM_CHALLENGE para iniciar el desafío personalizado.

  • Si MFA está habilitada para un usuario, después de que Amazon Cognito verifique la contraseña, dicho usuario tendrá el desafío de configurarla o iniciar sesión con ella. MFA

nota

La página web de inicio de sesión alojada de Amazon Cognito no puede activar Desencadenadores de Lambda de desafío de autenticación personalizado.

Para obtener más información sobre los desencadenadores de Lambda, incluido el código de muestra, consulte Personalización de flujos de trabajo de grupos de usuarios con desencadenadores de Lambda.

Flujo de autenticación de administrador

La mejor práctica de autenticación consiste en utilizar las API operaciones descritas en SRP para la verificación Flujo de autenticación personalizado de la contraseña. AWS SDKsUtilice ese enfoque, y este enfoque les ayuda a usarloSRP. Sin embargo, si quiere evitar SRP los cálculos, hay disponible un conjunto alternativo de API operaciones de administración para los servidores back-end seguros. Para estas implementaciones de administrador de backend, utilice AdminInitiateAuth en lugar de InitiateAuth. También utilice AdminRespondToAuthChallenge en lugar de RespondToAuthChallenge. Como puede enviar la contraseña como texto sin formato, no tiene que realizar SRP cálculos cuando utilice estas operaciones. A continuación se muestra un ejemplo:

AdminInitiateAuth Request { "AuthFlow":"ADMIN_USER_PASSWORD_AUTH", "AuthParameters":{ "USERNAME":"<username>", "PASSWORD":"<password>" }, "ClientId":"<clientId>", "UserPoolId":"<userPoolId>" }

Estas operaciones de autenticación de administrador requieren credenciales de desarrollador y el uso del proceso de firma de AWS Signature Version 4 (SigV4). Estas operaciones están disponibles en formato estándar AWS SDKs, incluido Node.js, que resulta práctico para las funciones Lambda. Para utilizar estas operaciones y hacer que acepten contraseñas como texto sin formato, debe activarlas para la aplicación en la consola. Alternativamente, puede pasar ADMIN_USER_PASSWORD_AUTH en el parámetro ExplicitAuthFlow en llamadas a CreateUserPoolClient o UpdateUserPoolClient. Las operaciones InitiateAuth y RespondToAuthChallenge no aceptan ADMIN_USER_PASSWORD_AUTH y AuthFlow.

En la respuesta AdminInitiateAuth de ChallengeParameters, el atributo USER_ID_FOR_SRP, si existe, contiene el verdadero nombre de usuario y no el alias del usuario (como la dirección de correo electrónico o un número de teléfono). En la llamada a AdminRespondToAuthChallenge, en ChallengeResponses, debe pasar este nombre de usuario en el parámetro USERNAME.

nota

Dado que las implementaciones de administrador de backend usan el flujo de autenticación de administrador, el flujo no admite el seguimiento de dispositivos. Si el seguimiento de dispositivos está activado, la autenticación de administrador se realiza correctamente, pero las llamadas de actualización del token de acceso fallan.

Flujo de autenticación de migración de usuarios

Un desencadenador de Lambda para la migración de usuarios ayuda a migrar usuarios desde un sistema de administración de usuarios heredado a un grupo de usuarios. Si elige el flujo de autenticación USER_PASSWORD_AUTH, no es necesario que los usuarios restablezcan sus contraseñas durante la migración de usuarios. Este flujo envía las contraseñas de los usuarios al servicio a través de una SSL conexión cifrada durante la autenticación.

Cuando haya migrado a todos sus usuarios, cambie los flujos a un SRP flujo más seguro. El SRP flujo no envía ninguna contraseña a través de la red.

Para obtener más información sobre los desencadenadores de Lambda, consulte Personalización de flujos de trabajo de grupos de usuarios con desencadenadores de Lambda.

Para obtener más información acerca de la migración de usuarios con un desencadenador de Lambda, consulte Importación de usuarios con un desencadenador de Lambda para la migración de usuarios.