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 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.
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 suele requerir que implemente dos operaciones de la API en el siguiente orden:
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.
Por lo general, la aplicación genera un mensaje para recopilar información del usuario y envía esa información en una solicitud de API a Amazon Cognito. Considere un flujo de InitiateAuth
en un grupo de usuarios en el que ha configurado el usuario con autenticación multifactor (MFA).
-
La aplicación pide a los usuarios el nombre de usuario y la contraseña.
-
El nombre de usuario y la contraseña se incluyen como parámetros en
InitiateAuth
. -
Amazon Cognito devuelve un desafío de
SMS_MFA
y un identificador de sesión. -
La aplicación solicita al usuario el código de MFA desde el teléfono.
-
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 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. 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.
Para obtener más información acerca de los clientes de aplicación, consulte Clientes de aplicación de grupo de usuarios.
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 infructuosos de inicio de sesión no autenticado o de inicio de sesión autenticado por IAM 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.
Temas
- Flujo de autenticación en el lado del cliente
- Flujo de autenticación en el lado del servidor
- Flujo de autenticación personalizado
- Flujo de autenticación integrado y desafíos
- Flujo de autenticación personalizado y desafíos
- Usar la verificación de contraseña de SRP en el flujo de autenticación personalizado
- Flujo de autenticación de administrador
- Flujo de autenticación de migración de usuarios
Flujo de autenticación en el lado del cliente
El siguiente proceso funciona para las aplicaciones de usuario en el cliente que cree con AWS Amplify
-
El usuario introduce su nombre de usuario y contraseña en la aplicación.
-
La aplicación llama a la operación
InitiateAuth
con el nombre de usuario y los detalles de contraseña remota segura (SRP) del usuario.Esta operación de la API devuelve los parámetros de autenticación.
nota
La aplicación genera detalles de SRP con las funciones SRP de Amazon Cognito que están integradas en los SDK de AWS .
-
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. -
Si
RespondToAuthChallenge
devuelve una sesión, la aplicación llama de nuevo aRespondToAuthChallenge
, esta vez con la sesión y la respuesta al desafío (por ejemplo, código de MFA).
Flujo de autenticación en el lado del servidor
Si no dispone de una aplicación de usuario, sino que usa una aplicación segura del backend o del lado del servidor en Java, Ruby o Node.js, puede utilizar la API autenticada del lado del servidor 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 de API
AdminInitiateAuth
(en lugar deInitiateAuth
). Esta operación requiere AWS credenciales con permisos que incluyancognito-idp:AdminInitiateAuth
ycognito-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 operación de la API
AdminRespondToAuthChallenge
(en lugar deRespondToAuthChallenge
). La operaciónAdminRespondToAuthChallenge
de la API solo se realiza correctamente si se proporcionan AWS las credenciales.
Para obtener más información sobre cómo firmar las solicitudes de la API de Amazon Cognito con AWS credenciales, consulte el proceso de firma de la versión 4 de Signature en la Referencia AWS general.
Las operaciones AdminInitiateAuth
y la AdminRespondToAuthChallenge
API 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 llamadoADMIN_NO_SRP_AUTH
) en el parámetroExplicitAuthFlow
cuando llame aCreateUserPoolClient
o aUpdateUserPoolClient
. -
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 Clientes de aplicación de grupo de usuarios.
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
nota
No puede utilizar las funciones de seguridad avanzadas para las credenciales comprometidas ni la autenticación adaptativa con flujos de autenticación personalizados. Para obtener más información, consulte Adición de seguridad avanzada a un grupo de usuarios.
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 operación de la API InitiateAuth
, que indica el tipo de autenticación que debe utilizarse y proporciona todos 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 operaciones de la API InitiateAuth
and RespondToAuthChallenge
, consulte la documentación de la API.
Flujo de autenticación integrado y desafíos
Amazon Cognito contiene algunos valores de AuthFlow
y ChallengeName
integrados para que un flujo de autenticación estándar pueda validar el nombre de usuario y la contraseña mediante el protocolo de contraseña remota segura (SRP). Los AWS SDK cuentan con soporte integrado para estos flujos con Amazon Cognito.
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 el ChallengeName
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. CuandoDefineAuthChallenge
devuelveCUSTOM_CHALLENGE
como el siguiente desafío, el flujo de autenticación llama aCreateAuthChallenge
. El desencadenador de LambdaCreateAuthChallenge
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 de contraseñas SRP y MFA mediante SMS. Puede usar desafíos personalizados como CAPTCHA o preguntas secretas.
Usar la verificación de contraseña de SRP en el flujo de autenticación personalizado
Si desea incluir SRP en un flujo de autenticación personalizado, debe comenzar con SRP.
-
Para iniciar la verificación por contraseña de SRP en un flujo personalizado, la aplicación llama a
InitiateAuth
conCUSTOM_AUTH
comoAuthflow
. En la asignación deAuthParameters
, la solicitud de la aplicación incluyeSRP_A:
(el valor de SRP A) yCHALLENGE_NAME: SRP_A
. -
El flujo
CUSTOM_AUTH
invoca el desencadenador de LambdaDefineAuthChallenge
con una sesión inicial dechallengeName: SRP_A
ychallengeResult: true
. La función de Lambda responder conchallengeName: PASSWORD_VERIFIER
,issueTokens: false
yfailAuthentication: false
. -
A continuación, la aplicación debe llamar a
RespondToAuthChallenge
conchallengeName: PASSWORD_VERIFIER
y los demás parámetros necesarios para SRP en el mapachallengeResponses
. -
Si Amazon Cognito verifica la contraseña,
RespondToAuthChallenge
llama al desencadenador de LambdaDefineAuthChallenge
con una segunda sesión dechallengeName: PASSWORD_VERIFIER
ychallengeResult: true
. En ese momento, el desencadenador de LambdaDefineAuthChallenge
responde conchallengeName: CUSTOM_CHALLENGE
para iniciar el desafío personalizado. -
Si MFA está habilitado para un usuario, una vez que Amazon Cognito verifique la contraseña, se le pide al usuario que configure o inicie sesión con 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 práctica recomendada para la autenticación consiste en utilizar las operaciones de la API descritas en Flujo de autenticación personalizado con SRP para la verificación de contraseñas. Los AWS SDK utilizan ese enfoque, y este enfoque les ayuda a utilizar SRP. Sin embargo, si desea evitar los cálculos de SRP, hay disponible un conjunto alternativo de operaciones de la API de administrador que se usa en servidores backend seguros. Para estas implementaciones de administrador de backend, utilice AdminInitiateAuth
en lugar de InitiateAuth
. También utilice AdminRespondToAuthChallenge
en lugar de RespondToAuthChallenge
. Dado que puede enviar la contraseña como texto sin formato, no tiene que realizar cálculos de SRP al utilizar 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 los SDK estándar de AWS
, que incluyen Node.js, lo que es de gran utilidad para las funciones de 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. Durante la autenticación, este flujo envía las contraseñas de los usuarios al servicio a través de una conexión SSL cifrada.
Cuando haya migrado todos los usuarios, cambie los flujos al flujo SRP más seguro. El flujo SRP 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 a grupos de usuarios con un desencadenador de Lambda para la migración de usuarios.