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

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Flux d'authentification de groupe d'utilisateurs

Amazon Cognito propose plusieurs méthodes d'authentification des utilisateurs. Tous les groupes d'utilisateurs, que vous possédiez un domaine ou non, peuvent authentifier les utilisateurs dans l'API des groupes d'utilisateurs. Si vous ajoutez un domaine à votre groupe d'utilisateurs, vous pouvez utiliser les points de terminaison de groupe d'utilisateurs. L'API des groupes d'utilisateurs prend en charge divers modèles d'autorisation et flux de demandes pour les demandes d'API.

Pour vérifier l'identité des utilisateurs, Amazon Cognito prend en charge les flux d'authentification qui intègrent de nouveaux types de question de sécurité, 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 :

Public authentication

InitiateAuth et RespondToAuthChallenge sont des API non authentifiées destinées à être utilisées avec des clients d'application publique côté client.

Server-side authentication

AdminInitiateAuth et AdminRespondToAuthChallenge nécessitent des informations d'identification IAM et conviennent pour les clients d'application confidentielle côté serveur.

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

En général, votre application génère une invite pour recueillir des informations auprès de votre utilisateur et soumet ces informations dans une demande d'API à Amazon Cognito. Envisagez un flux InitiateAuth dans un groupe d'utilisateurs dans lequel vous avez configuré votre utilisateur avec l'authentification multifactorielle (MFA).

  1. Votre application demande à votre utilisateur de fournir son nom d'utilisateur et son mot de passe.

  2. Vous incluez le nom d'utilisateur et le mot de passe en tant que paramètres dans InitiateAuth.

  3. Amazon Cognito renvoie un défi SMS_MFA et un identifiant de session.

  4. Votre application invite l'utilisateur à saisir le code MFA depuis son téléphone.

  5. Vous devez inclure ce code et l'identifiant de session dans la demande RespondToAuthChallenge.

Selon les fonctionnalités de votre groupe d'utilisateurs, vous pouvez vous retrouver face à plusieurs défis InitiateAuth avant que votre application ne récupère des jetons depuis Amazon Cognito. Amazon Cognito inclut une chaîne de session dans la réponse à chaque demande. Pour combiner vos requêtes d'API dans un flux d'authentification, incluez la chaîne de session de la réponse à la demande précédente dans chaque demande suivante. Par défaut, vos utilisateurs disposent de trois minutes pour terminer chaque défi avant l'expiration de la chaîne de session. Pour modifier cette période, modifiez la Durée de session d'authentification du client d'application. La procédure suivante explique comment modifier ce paramètre dans la configuration de votre client d'application.

Note

Les paramètres de durée de session du flux d'authentification s'appliquent à l'authentification avec l'API des groupes d'utilisateurs Amazon Cognito. L'interface utilisateur hébergée Amazon Cognito définit la durée de session sur 3 minutes pour l'authentification multifactorielle et sur 8 minutes pour les codes de réinitialisation de mot de passe.

Amazon Cognito console
Pour configurer la durée de session du flux d'authentification du client d'application (AWS Management Console)
  1. À partir de l’onglet App integration (Intégration d'applications) dans votre groupe d'utilisateurs, sélectionnez le nom de votre client d'application à partir du conteneur App clients and analytics (Clients d'applications et analyses).

  2. Choisissez Modifier dans le conteneur Informations sur le client d'application.

  3. Modifiez la valeur de Authentication flow session duration (Durée de session du flux d'authentification) pour indiquer la durée de validité choisie (en minutes) pour les codes MFA par SMS. Cela modifie également le temps dont dispose chaque utilisateur pour réaliser un défi d'authentification dans votre client d'application.

  4. Sélectionnez Enregistrer les modifications.

Amazon Cognito API
Pour configurer la durée de session du flux d'authentification du client d'application (API Amazon Cognito)
  1. Préparez une demande UpdateUserPoolClient avec vos paramètres de groupe d’utilisateurs existants à partir d'une demande DescribeUserPoolClient. Votre demande UpdateUserPoolClient doit inclure toutes les propriétés du client d'application existant.

  2. Modifiez la valeur de AuthSessionValidity et indiquez la durée de validité (en minutes) choisie pour les codes MFA par SMS. Cela modifie également le temps dont dispose chaque utilisateur pour réaliser un défi d'authentification dans votre client d'application.

Pour plus d'informations sur les clients d'application, consultez Clients de l’application de groupe d’utilisateurs.

Vous pouvez utiliser des AWS Lambda déclencheurs 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.

Comportement de verrouillage d'Amazon Cognito en cas d'échec des tentatives de connexion

Après cinq tentatives infructueuses de connexion non authentifiée ou authentifiée par IAM avec un mot de passe, Amazon Cognito verrouille votre utilisateur pendant une seconde. La durée du verrouillage double ensuite après chaque nouvelle tentative infructueuse, jusqu'à un maximum d'environ 15 minutes. Les tentatives effectuées pendant une période de verrouillage génèrent une exception Password attempts exceeded et n'affectent pas la durée des périodes de verrouillage suivantes. Pour un nombre cumulé de tentatives de connexion infructueuses n, à l'exclusion des exceptions Password attempts exceeded, Amazon Cognito verrouille votre utilisateur pendant 2^(n-5) secondes. Pour restaurer l'état initial du verrouillage (n=0), votre utilisateur doit parvenir à se connecter à l'issue d'une période de verrouillage ou ne lancer à aucun moment de tentative de connexion pendant 15 minutes consécutives après le verrouillage. Ce comportement est susceptible d'être modifié. Ce comportement ne s'applique pas aux défis personnalisés à moins qu'ils n'effectuent également une authentification basée sur un mot de passe.

Flux d'authentification côté client

Le processus suivant fonctionne pour les applications côté client que vous créez avec AWS Amplify ou les kits SDK AWS.

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

  2. L'application appelle l'opération InitiateAuth avec le nom d'utilisateur et les informations SRP (Secure Remote Password) 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 AWS informations d'identification avec des autorisations telles que cognito-idp:AdminInitiateAuth etcognito-idp:AdminRespondToAuthChallenge. 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 AdminRespondToAuthChallenge d'API ne réussit que lorsque vous fournissez des AWS informations d'identification.

Pour plus d'informations sur la signature des demandes d'API Amazon Cognito avec des AWS informations d'identification, consultez le processus de signature Signature version 4 dans le manuel de référence AWS général.

Les opérations AdminInitiateAuth et AdminRespondToAuthChallenge API ne peuvent pas accepter les informations username-and-password d'identification des utilisateurs pour la connexion des administrateurs, sauf si vous les autorisez explicitement à le faire de l'une des manières suivantes :

  • 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 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 de plus amples informations, veuillez consulter Clients de l’application de groupe d’utilisateurs.

Flux d'authentification personnalisé

Les groupes d'utilisateurs Amazon Cognito permettent également d'utiliser des flux d'authentification personnalisés, qui peuvent vous aider à créer un modèle d'authentification basé sur les défis et les réponses à l'aide de déclencheurs. AWS Lambda

Note

Vous ne pouvez pas utiliser les fonctionnalités de sécurité avancées pour des informations d'identification compromises et l'authentification adaptative avec des flux d'authentification personnalisés. Pour de plus amples informations, veuillez consulter 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 des valeurs AuthFlow et ChallengeName intégrées de sorte 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 AWS SDK prennent en charge ces flux de manière intégrée 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 AWS SDK utilisent cette approche, qui les aide à utiliser le 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 d'utilisateur réel de l'utilisateur, et non pas un alias (tel qu'une adresse e-mail 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.