Gestion des réponses aux erreurs liées à l'existence des 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.

Gestion des réponses aux erreurs liées à l'existence des utilisateurs

Amazon Cognito prend en charge la personnalisation des réponses d'erreur renvoyées par les groupes d'utilisateurs. Des réponses d'erreur personnalisées sont disponibles pour les opérations de création et d'authentification, de récupération de mot de passe et de confirmation d'utilisateurs.

Utilisez le paramètre PreventUserExistenceErrors d'un client d'application de groupe d'utilisateurs pour activer ou désactiver les erreurs liées à l'existence de l'utilisateur. Lorsque vous créez un groupe d'utilisateurs à l'aide de l'API des groupes d'utilisateurs Amazon Gognito, PreventUserExistenceErrors a la valeur false par défaut. Lorsque cette valeur est égale à true, Amazon Cognito répond avec des informations non spécifiques aux demandes d'API pour lesquelles sa réponse pourrait autrement révéler l'existence d'un utilisateur valide. Dans l'API Amazon Cognito, mettez à jour cette valeur à l'aide d'une demande UpdateUserPoolClient. Dans la AWS Management Console, créez ou modifiez votre client d'application pour activer Prevent user existence errors (Empêcher les erreurs liées à l'existence de l'utilisateur). Lorsque vous créez un groupe d'utilisateurs dans la AWS Management Console, l'option Empêcher les erreurs d'existence d'utilisateurs est activée par défaut.

Lorsque vous empêchez des erreurs liées à l'existence d'utilisateurs dans votre groupe d'utilisateurs, les API Amazon Cognito de connexion et de mot de passe oublié renvoient une réponse d'échec d'authentification générique. La réponse d'erreur vous indique que le nom d'utilisateur ou le mot de passe est incorrect. Les API de confirmation de compte et de récupération de mot de passe Amazon Cognito renvoient une réponse indiquant qu'un code a été envoyé à un mode de communication simulé. La réponse d'erreur fonctionne quand l'état est ENABLED et que l'utilisateur n'existe pas. Voici les comportements détaillés des opérations Amazon Cognito quand PreventUserExistenceErrors est défini sur ENABLED.

Opérations de création et d'authentification d'utilisateurs

Vous pouvez utiliser l'authentification par nom d'utilisateur et mot de passe ou l'authentification SRP (Secure Remote Password) avec les opérations suivantes. Vous pouvez également personnaliser les erreurs que vous renvoyez avec une authentification personnalisée.

  • AdminInitiateAuth

  • AdminRespondToAuthChallenge

  • InitiateAuth

  • RespondToAuthChallenge

La liste suivante montre comment personnaliser les réponses d'erreur dans les opérations d'authentification des utilisateurs.

Authentification par nom d'utilisateur et mot de passe

Pour connecter un utilisateur avec ADMIN_USER_PASSWORD_AUTH et USER_PASSWORD_AUTH, incluez le nom d'utilisateur et le mot de passe dans une demande d'API AdminInitiateAuth ou InitiateAuth. Amazon Cognito renvoie une erreur NotAuthorizedException générique lorsque le nom d'utilisateur ou le mot de passe sont incorrects.

Authentification basée sur un mot de passe distant sécurisé (Secure Remote Password, SRP)

Pour connecter un utilisateur avec USER_SRP_AUTH, incluez un nom d'utilisateur et un paramètre SRP_A dans une demande d'API AdminInitiateAuth ou InitiateAuth. En réponse, Amazon Cognito renvoie SRP_B et la valeur salt pour l'utilisateur, conformément au standard SRP. Si un utilisateur n'est pas trouvé, Amazon Cognito renvoie une réponse simulée lors de la première étape, comme décrit dans RFC 5054. Amazon Cognito renvoie la même valeur salt et un ID d'utilisateur interne au format UUID (identifiant universel unique) pour la même combinaison de nom d'utilisateur et de groupe d'utilisateurs. Lorsque vous envoyez une demande d'API RespondToAuthChallenge avec preuve de mot de passe, Amazon Cognito renvoie une erreur NotAuthorizedException générique lorsque le nom d'utilisateur ou le mot de passe sont incorrects.

Note

Vous pouvez simuler une réponse générique avec l'authentification par nom d'utilisateur et mot de passe si vous utilisez des attributs d'alias basés sur la vérification, et que le nom d'utilisateur immuable ne se présente pas sous la forme d'un UUID.

Déclencheur Lambda de stimulation d'authentification personnalisée

Si vous utilisez le déclencheur Lambda de stimulation d'authentification personnalisée et que vous activez les réponses d'erreur, LambdaChallenge renvoie un paramètre booléen nommé UserNotFound. Il est ensuite passé dans la demande de déclencheurs Lambda DefineAuthChallenge, VerifyAuthChallenge et CreateAuthChallenge. Vous pouvez utiliser ce déclencheur pour simuler des stimulations d'autorisation personnalisée pour un utilisateur inexistant. Si vous appelez le déclencheur Lambda d'authentification préalable pour un utilisateur inexistant, Amazon Cognito renvoie UserNotFound.

La liste suivante montre comment personnaliser les réponses d'erreur lors des opérations de création d'utilisateurs.

SignUp

L'opération SignUp retourne UsernameExistsException quand un nom d'utilisateur est déjà pris. Si vous ne voulez pas qu'Amazon Cognito renvoie une erreur UsernameExistsException pour les adresses e-mail et les numéros de téléphone au moment où vous inscrivez des utilisateurs dans votre application, utilisez des attributs d'alias basés sur la vérification. Pour en savoir plus sur les alias, consultez la section Personnalisation des attributs de connexion du document Attributs de groupe d'utilisateurs.

Pour voir un exemple de la façon dont Amazon Cognito peut empêcher l'utilisation de demandes d'API SignUp pour découvrir les utilisateurs de votre groupe d'utilisateurs, consultez Prévention des erreurs UsernameExistsException pour les adresses e-mail et les numéros de téléphone au moment de l'inscription.

Utilisateurs importés

Si l'option PreventUserExistenceErrors est activée, lors de l'authentification d'utilisateurs importés, une erreur NotAuthorizedException générique est renvoyée, indiquant que le nom d'utilisateur ou le mot de passe étaient incorrects au lieu de renvoyer PasswordResetRequiredException. Pour plus d'informations, consultez Obligation pour les utilisateurs importés de réinitialiser leur mot de passe.

Déclencheur Lambda de migration d'utilisateur

Amazon Cognito renvoie une réponse simulée pour des utilisateurs inexistants quand une réponse vide a été définie dans le contexte d'événement d'origine par le déclencheur Lambda. Pour plus d'informations, consultez Déclencheur Lambda de migration d'utilisateur.

Prévention des erreurs UsernameExistsException pour les adresses e-mail et les numéros de téléphone au moment de l'inscription

L'exemple suivant montre comment, au moment de configurer des attributs d'alias dans votre groupe d'utilisateurs, vous pouvez empêcher que des adresses e-mail et des numéros de téléphone en double ne génèrent des erreurs UsernameExistsException en réponse à des demandes d'API SignUp. Vous devez avoir créé votre groupe d'utilisateurs avec l'adresse e-mail ou le numéro de téléphone en tant qu'attribut d'alias. Pour en savoir plus, consultez la section Personnalisation des attributs de connexion du document Attributs de groupe d'utilisateurs.

  1. Jie s'inscrit pour obtenir un nouveau nom d'utilisateur et fournit également l'adresse e-mail jie@example.com. Amazon Cognito envoie un code à son adresse e-mail.

    Exemple de commande AWS CLI

    aws cognito-idp sign-up --client-id 1234567890abcdef0 --username jie --password PASSWORD --user-attributes Name="email",Value="jie@example.com"

    Exemple de réponse

    { "UserConfirmed": false, "UserSub": "<subId>", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } }
  2. Jie fournit le code qui lui a été envoyé pour confirmer que l'adresse e-mail lui appartient. Cela termine son inscription en tant qu'utilisateur.

    Exemple de commande AWS CLI

    aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=jie --confirmation-code xxxxxx
  3. Shirley inscrit un nouveau compte d'utilisateur et fournit l'adresse e-mail jie@example.com. Amazon Cognito ne renvoie pas d'erreur UsernameExistsException et envoie un code de confirmation à l'adresse e-mail de Jie.

    Exemple de commande AWS CLI

    aws cognito-idp sign-up --client-id 1234567890abcdef0 --username shirley --password PASSWORD --user-attributes Name="email",Value="jie@example.com"

    Exemple de réponse

    { "UserConfirmed": false, "UserSub": "<new subId>", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } }
  4. Dans un autre scénario, Shirley est propriétaire de jie@example.com. Shirley récupère le code qu'Amazon Cognito a envoyé à l'adresse e-mail de Jie et tente de confirmer le compte.

    Exemple de commande AWS CLI

    aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=shirley --confirmation-code xxxxxx

    Exemple de réponse

    An error occurred (AliasExistsException) when calling the ConfirmSignUp operation: An account with the email already exists.

Amazon Cognito ne renvoie pas d'erreur à la demande aws cognito-idp sign-up de Shirley, bien que jie@example.com soit attribué à un utilisateur existant. Shirley doit prouver qu'elle est propriétaire de l'adresse e-mail avant qu'Amazon Cognito ne renvoie une réponse d'erreur. Dans un groupe d'utilisateurs doté d'attributs d'alias, ce comportement empêche l'utilisation de l'API SignUp publique pour vérifier l'existence d'un utilisateur à partir d'une adresse e-mail ou d'un numéro de téléphone donnés.

Ce comportement est différent de la réponse qu'Amazon Cognito renvoie à une demande SignUp associée à un nom d'utilisateur existant, comme le montre l'exemple suivant. Bien que cette réponse fasse découvrir à Shirley qu'il existe déjà un utilisateur doté du nom d'utilisateur jie, elle ne lui apprend rien concernant les adresses e-mail et les numéros de téléphone associés à cet utilisateur.

Exemple de commande d'interface de ligne de commande

aws cognito-idp sign-up --client-id 1example23456789 --username jie --password PASSWORD --user-attributes Name="email",Value="shirley@example.com"

Exemple de réponse

An error occurred (UsernameExistsException) when calling the SignUp operation: User already exists

Opérations de réinitialisation de mot de passe

Amazon Cognito renvoie les réponses suivantes aux opérations de réinitialisation du mot de passe utilisateur lorsque vous empêchez les erreurs liées à l'existence d'un utilisateur.

ForgotPassword

Quand un utilisateur n'est pas trouvé, est désactivé ou ne dispose d’aucun mécanisme de communication vérifié pour récupérer son mot de passe, Amazon Cognito renvoie CodeDeliveryDetails avec un mode de communication simulé pour un utilisateur. Le mode de communication simulé est déterminé par le format du nom d'utilisateur d'entrée et les paramètres de vérification du pool d'utilisateurs.

ConfirmForgotPassword

Amazon Cognito renvoie l'erreur CodeMismatchException pour des utilisateurs inexistants ou désactivés. Si aucun code n'est demandé lors de l'utilisation de ForgotPassword, Amazon Cognito renvoie l'erreur ExpiredCodeException.

Opérations de confirmation

Amazon Cognito renvoie les réponses suivantes aux opérations de confirmation et de vérification de l'utilisateur lorsque vous empêchez les erreurs liées à l'existence d'un utilisateur.

ResendConfirmationCode

Amazon Cognito renvoie CodeDeliveryDetails pour un utilisateur désactivé ou inexistant. Amazon Cognito envoie un code de confirmation au courriel ou au numéro de téléphone de l'utilisateur existant.

ConfirmSignUp

ExpiredCodeException renvoie si un code a expiré. Amazon Cognito retourne NotAuthorizedException quand un utilisateur n'est pas autorisé. Si le code ne correspond pas à ce que le serveur attend, Amazon Cognito renvoie CodeMismatchException.