Flux d'authentification de groupe d'utilisateurs - Amazon Cognito

Flux d'authentification de groupe d'utilisateurs

Pour vérifier l'identité des utilisateurs, les flux d'authentification modernes intègrent de nouveaux types de demande de vérification, en plus des mots de passe. L'authentification Amazon Cognito nécessite généralement que vous implémentiez deux opérations d'API dans l'ordre suivant :

  1. InitiateAuth

  2. RespondToAuthChallenge

Un utilisateur s'authentifie en répondant à des demandes de vérification successives jusqu'à ce que l'authentification échoue ou qu'Amazon Cognito émette des jetons pour l'utilisateur. Vous pouvez répéter ces étapes avec Amazon Cognito, dans un processus qui inclut différentes demandes de vérification, pour prendre en charge n'importe quel flux d'authentification personnalisé.

Vous pouvez utiliser les déclencheurs AWS Lambda pour personnaliser la façon dont les utilisateurs s'authentifient. Ces déclencheurs émettent et vérifient leurs propres défis dans le cadre du flux d'authentification.

Vous pouvez également utiliser le flux d'authentification de l'administration pour des serveurs backend sécurisés. Vous pouvez utiliser le flux d'authentification de migration des utilisateurs pour permettre la migration des utilisateurs sans exiger de vos utilisateurs qu'ils réinitialisent leurs mots de passe.

Note

Les utilisateurs peuvent tenter de se connecter correctement cinq fois, sans succès, avant qu'Amazon Cognito ne les verrouille temporairement. Le temps de verrouillage commence à une seconde et augmente de façon exponentielle, doublant après chaque tentative échouée, jusqu'à environ 15 minutes. Amazon Cognito ignore les tentatives de connexion effectuées pendant une période de verrouillage temporaire et ces tentatives ne déclenchent pas de nouvelle période de verrouillage. Après une attente de 15 minutes d'un utilisateur, Amazon Cognito réinitialise le verrouillage temporaire. Ce comportement est susceptible d'être modifié.

Flux d'authentification côté client

Le processus suivant fonctionne pour les applications côté client que vous créez avec le kit SDK AWS Mobile SDK for Android, AWS Mobile SDK for iOS ou AWS pour JavaScript :

  1. L'utilisateur entre le nom d'utilisateur et le mot de passe dans l'application.

  2. L'appli appelle l'opération InitiateAuth avec le nom d'utilisateur et les informations Secure Remote Password (SRP) détaillées de l'utilisateur.

    Cette opération d'API renvoie les paramètres d'authentification.

    Note

    L'application génère des détails SRP avec les fonctionnalités Amazon Cognito SRP intégrées aux kits AWS SDK.

  3. L'appli appelle l'opération RespondToAuthChallenge. Si l'appel aboutit, Amazon Cognito retourne les jetons de l'utilisateur et le flux d'authentification est terminé.

    Si Amazon Cognito requiert une autre demande de vérification, l'appel à RespondToAuthChallenge ne renvoie aucun jeton. À la place, l'appel renvoie une session.

  4. Si RespondToAuthChallenge renvoie une session, l'appli appelle RespondToAuthChallenge à nouveau, cette fois avec la session et la réponse à la stimulation (par exemple, le code MFA).

Flux d'authentification côté serveur

Si vous ne disposez pas d'une application d'utilisateur, mais utilisez une application côté serveur ou backend sécurisée Java, Ruby ou Node.js, vous pouvez utiliser l'API côté serveur authentifiée pour les groupes d'utilisateurs Amazon Cognito.

Pour les applications côté serveur, l'authentification d'un groupe d'utilisateurs est similaire à celle des applications côté client, à l'exception des aspects suivants :

  • L'appli côté serveur appelle l'opération d'API AdminInitiateAuth (au lieu de InitiateAuth). Cette opération nécessite des informations d'identification administrateur AWS. Cette opération renvoie les paramètres d'authentification requis.

  • Une fois que l'application côté serveur possède les paramètres d'authentification, elle appelle l'opération d'API AdminRespondToAuthChallenge (à la place de RespondToAuthChallenge). L'opération d'API AdminRespondToAuthChallenge ne réussit que lorsque vous fournissez des informations d'identification d'administrateur AWS.

Les opérations AdminInitiateAuth et AdminRespondToAuthChallenge ne peuvent pas accepter les informations d'identification nom d'utilisateur et mot de passe pour la connexion administrateur, sauf si vous les autorisez explicitement par l'un des moyens suivants :

  • Incluez ALLOW_ADMIN_USER_PASSWORD_AUTH (anciennement connu sous le nom ADMIN_NO_SRP_AUTH) dans le paramètre ExplicitAuthFlow lorsque vous appelez CreateUserPoolClient ou UpdateUserPoolClient.

  • Ajoutez ALLOW_ADMIN_USER_PASSWORD_AUTH dans la liste Authentication flows (Flux d'authentification) pour votre client d'application. Configurez les clients d'application dans l'onglet App integration (Intégration d'application) de votre groupe d'utilisateurs, sous App clients and analytics (Clients d'application et analytique). Pour plus d'informations, consultez Configuration d'un client d'application pour un groupe d'utilisateurs..

Flux d'authentification personnalisé

Les groupes d'utilisateurs Amazon Cognito permettent aussi d'utiliser les flux d'authentification personnalisés, qui peuvent vous aider à créer un modèle d'authentification basé sur une demande de vérification/réponse à l'aide des déclencheurs AWS Lambda.

Note

Vous ne pouvez pas utiliser de fonctions de sécurité avancées avec des flux d'authentification personnalisés. Pour plus d'informations, consultez Ajout de la sécurité avancée à un groupe d'utilisateurs.

Le flux d'authentification personnalisé permet des cycles de stimulation/réponse personnalisés pour répondre à des besoins différents. Le flux commence par un appel à l'opération d'API InitiateAuth qui indique le type d'authentification qui sera utilisé, et fournit les paramètres d'authentification initiaux. Amazon Cognito répond à l'appel InitiateAuth avec l'un des types d'informations suivants :

  • Une stimulation pour l'utilisateur avec une session et des paramètres.

  • Une erreur si l'utilisateur ne parvient pas à s'authentifier.

  • Les jetons d'identification, d'accès et d'actualisation si les paramètres fournis dans l'appel InitiateAuth sont suffisants pour connecter l'utilisateur. (En règle générale, l'utilisateur ou l'appli doit d'abord répondre à une stimulation, mais votre code personnalisé doit le déterminer.)

Si Amazon Cognito répond à l'appel InitiateAuth avec une demande de vérification, l'application recueille davantage d'informations et appelle l'opération RespondToAuthChallenge. Cet appel fournit les réponses à la demande de vérification et les renvoie à la session. Amazon Cognito répond à l'appel RespondToAuthChallenge de la même manière qu'à l'appel InitiateAuth. Si l'utilisateur s'est connecté, Amazon Cognito fournit des jetons ou si l'utilisateur n'est pas connecté, Amazon Cognito fournit une autre demande de vérification ou une erreur. Si Amazon Cognito renvoie une autre demande de vérification, la séquence se reproduit et l'application appelle RespondToAuthChallenge jusqu'à ce que l'utilisateur se connecte avec succès ou qu'une erreur soit retournée. Pour plus d'informations sur les opérations d'API InitiateAuth et RespondToAuthChallenge, consultez la documentation sur les API.

Flux d'authentification intégré et stimulations

Amazon Cognito contient certaines valeurs AuthFlow et ChallengeName intégrées pour qu'un flux d'authentification standard puisse valider un nom d'utilisateur et un mot de passe via le protocole SRP (Secure Remote Password). Les kits AWS SDK intègrent la prise en charge de ces flux avec Amazon Cognito.

Le flux commence par l'envoi de USER_SRP_AUTH comme AuthFlow pour InitiateAuth. Vous envoyez également les valeurs USERNAME et SRP_A dans AuthParameters. Si l'appel InitiateAuth aboutit, la réponse a inclus PASSWORD_VERIFIER comme ChallengeName et SRP_B dans les paramètres de stimulation. L'appli appelle ensuite RespondToAuthChallenge avec le PASSWORD_VERIFIER ChallengeName et les paramètres nécessaires dans ChallengeResponses. Si l'appel à RespondToAuthChallenge réussit et que l'utilisateur est connecté, Amazon Cognito émet des jetons. Si vous avez activé l'authentification multifacteur (MFA) pour l'utilisateur, Amazon Cognito renvoie ChallengeName de SMS_MFA. L'application peut fournir le code nécessaire via un autre appel à RespondToAuthChallenge.

Flux d'authentification personnalisé et stimulations

Pour initier un flux d'authentification personnalisé, une appli peut appeler InitiateAuth avec CUSTOM_AUTH comme paramètre Authflow. Avec un flux d'authentification personnalisé, trois déclencheurs Lambda contrôlent les demandes de vérification et la vérification des réponses.

  • Le déclencheur Lambda DefineAuthChallenge utilise en entrée un tableau de session de demandes de vérification et de réponses précédentes. Il affiche ensuite le nom de la demande de vérification suivante et les booléens qui indiquent si l'utilisateur est authentifié et peut recevoir des jetons. Ce déclencheur Lambda est une machine d'état qui contrôle le parcours de l'utilisateur au fil des stimulations.

  • Le déclencheur Lambda CreateAuthChallenge prend un nom de demande de vérification en entrée et génère le défi et les paramètres permettant d'évaluer la réponse. Quand DefineAuthChallenge retourne CUSTOM_CHALLENGE comme demande de vérification suivante, le flux d'authentification appelle CreateAuthChallenge. Le déclencheur Lambda CreateAuthChallenge transmet le type de demande de vérification suivant dans le paramètre de métadonnées de demande de vérification.

  • La fonction Lambda VerifyAuthChallengeResponse évalue la réponse et renvoie une valeur booléenne indiquant si la réponse était valide.

Un flux d'authentification personnalisé peut également utiliser une combinaison de stimulations intégrées, telles que la vérification de mot de passe via le protocole SRP et la MFA par SMS. Il peut utiliser des stimulations personnalisées, telles que CAPTCHA ou des questions secrètes.

Utiliser la vérification de mot de passe par protocole SRP dans le flux d'authentification personnalisé

Si vous souhaitez inclure le protocole SRP dans un flux d'authentification personnalisé, vous devez commencer par SRP.

  • Pour lancer la vérification de mot de passe par protocole SRP dans un flux personnalisé, l'appli appelle InitiateAuth avec CUSTOM_AUTH en tant que Authflow. Dans le mappage AuthParameters, la demande de votre application inclut SRP_A: (la valeur SRP A) et CHALLENGE_NAME: SRP_A.

  • Le flux CUSTOM_AUTH invoque le déclencheur Lambda DefineAuthChallenge avec une session initiale de challengeName: SRP_A et challengeResult: true. Votre fonction Lambda répond avec challengeName: PASSWORD_VERIFIER, issueTokens: false et failAuthentication: false.

  • L'appli doit ensuite appeler RespondToAuthChallenge avec challengeName: PASSWORD_VERIFIER et les autres paramètres requis pour le protocole SRP dans la carte challengeResponses.

  • Si Amazon Cognito vérifie le mot de passe, RespondToAuthChallenge appelle le déclencheur Lambda DefineAuthChallenge avec une deuxième session de challengeName: PASSWORD_VERIFIER et challengeResult: true. À ce stade, le déclencheur Lambda DefineAuthChallenge répond avec challengeName: CUSTOM_CHALLENGE pour démarrer la stimulation personnalisée.

  • Si l'authentification MFA est activée pour un utilisateur, une fois qu'Amazon Cognito a vérifié le mot de passe, l'utilisateur est invité à configurer MFA ou à se connecter avec MFA.

Note

La page web de connexion hébergée Amazon Cognito ne peut pas activer les Déclencheurs Lambda création d'une stimulation d'authentification personnalisée.

Pour plus d'informations sur les déclencheurs Lambda, ainsi qu'un exemple de code, consultez Personnalisation des flux de travail de groupe d'utilisateurs avec des déclencheurs Lambda.

Flux d'authentification de l'administration

La meilleure pratique pour l'authentification consiste à utiliser les opérations d'API décrites dans Flux d'authentification personnalisé avec SRP pour la vérification du mot de passe. Les kits AWS SDK utilisent cette approche, qui les aide à utiliser SRP. Toutefois, si vous souhaitez éviter les calculs SRP, un autre ensemble d'opérations d'API d'administration est disponible pour les serveurs backend sécurisés. Pour ces implémentations d'administration backend, utilisez AdminInitiateAuth au lieu de InitiateAuth. Utilisez également AdminRespondToAuthChallenge au lieu de RespondToAuthChallenge. Étant donné que vous pouvez soumettre le mot de passe en texte brut, vous n'avez pas à effectuer de calculs SRP lorsque vous utilisez ces opérations. Voici un exemple :

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

Ces opérations d'authentification de l'administration requièrent les informations d'identification d'un développeur et utilisent le processus de signature d'AWS Signature Version 4 (SigV4). Ces opérations sont disponibles dans les kits SDK AWS standard, y compris Node.js, ce qui est pratique avec les fonctions Lambda. Pour utiliser ces opérations et leur faire accepter des mots de passe en texte brut, vous devez les activer pour l'application dans la console. Vous pouvez également transmettre ADMIN_USER_PASSWORD_AUTH pour le paramètre ExplicitAuthFlow dans les appels à CreateUserPoolClient ou UpdateUserPoolClient. Les opérations InitiateAuth et RespondToAuthChallenge n'acceptent pas ADMIN_USER_PASSWORD_AUTH AuthFlow.

Dans la réponse AdminInitiateAuth ChallengeParameters, l'attribut USER_ID_FOR_SRP, s'il est présent, contient le nom actuel de l'utilisateur, et non un alias (par exemple une adresse électronique ou un numéro de téléphone). Dans votre appel à AdminRespondToAuthChallenge, dans le ChallengeResponses, vous devez transmettre ce nom d'utilisateur dans le paramètre USERNAME.

Note

Comme les implémentations d'administrateur backend utilisent le flux d'authentification d'administrateur, ce flux ne prend pas en charge la fonctionnalité de suivi des dispositifs. Lorsque la fonctionnalité de suivi des dispositifs est activée, l'authentification d'administrateur réussit, mais tout appel visant à actualiser le jeton d'accès échoue.

Flux d'authentification pour la migration d'utilisateurs

Un déclencheur Lambda de migration d'utilisateur facilite la migration d'utilisateurs à partir d'un système de gestion des utilisateurs hérité vers votre groupe d'utilisateurs. Si vous choisissez le flux d'authentification USER_PASSWORD_AUTH, les utilisateurs n'ont pas à réinitialiser leurs mots de passe durant la migration des utilisateurs. Ce flux envoie les mots de passe de vos utilisateurs au service via une connexion SSL cryptée pendant l'authentification.

Lorsque vous avez migré tous vos utilisateurs, changez de flux et passez au flux SRP plus sécurisé. Le flux SRP n'envoie aucun mot de passe sur le réseau.

Pour en savoir plus sur les déclencheurs Lambda, consultez Personnalisation des flux de travail de groupe d'utilisateurs avec des déclencheurs Lambda.

Pour plus d'informations sur la migration d'utilisateurs avec un déclencheur Lambda, consultez Importation d'utilisateurs dans des groupes d'utilisateurs avec un déclencheur Lambda de migration d'utilisateur.