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 nouveau client d'application avec les groupes d'utilisateurs Amazon Cognito APILEGACY, PreventUserExistenceErrors il est ou est désactivé par défaut. Dans la console Amazon Cognito, l'option Empêcher les erreurs liées à l'existence des utilisateurs (paramètre ENABLED pourPreventUserExistenceErrors) est sélectionnée par défaut. Pour mettre à jour votre PreventUserExistenceErrors configuration, effectuez l'une des opérations suivantes :

  • Modifiez la valeur comprise PreventUserExistenceErrors entre ENABLED et LEGACY dans un UpdateUserPoolClientAPIdemande.

  • Modifiez le client de votre application dans la console Amazon Cognito et modifiez l'état de Empêcher les erreurs d'existence des utilisateurs entre sélectionné (ENABLED) et désélectionné (). LEGACY

Lorsque cette propriété a une valeur égale àLEGACY, le client de votre application renvoie une réponse UserNotFoundException d'erreur lorsqu'un utilisateur tente de se connecter avec un nom d'utilisateur qui n'existe pas dans votre groupe d'utilisateurs.

Lorsque cette propriété a une valeur deENABLED, le client de votre application ne divulgue pas l'inexistence d'un compte utilisateur dans votre groupe d'utilisateurs avec une UserNotFoundException erreur. Une PreventUserExistenceErrors configuration de ENABLED produit les effets suivants :

  • Amazon Cognito fournit des informations non spécifiques aux API demandes lorsque sa réponse pourrait révéler l'existence d'un utilisateur valide.

  • La connexion à Amazon Cognito et le mot de passe oublié APIs 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.

  • La confirmation du compte Amazon Cognito et la récupération du mot de passe APIs renvoient une réponse indiquant qu'un code a été envoyé à un support de diffusion simulé, au lieu d'une représentation partielle des coordonnées d'un utilisateur.

Les informations suivantes détaillent les comportements des opérations du groupe d'utilisateurs lorsque PreventUserExistenceErrors ce paramètre est défini surENABLED.

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

Vous pouvez configurer les réponses aux erreurs lors de l'authentification par nom d'utilisateur-mot de passe et par mot de passe distant sécurisé () SRP. Vous pouvez également personnaliser les erreurs que vous renvoyez grâce à une authentification personnalisée. Les opérations APIs d'authentification suivantes sont effectuées :

  • 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 etUSER_PASSWORD_AUTH, incluez le nom d'utilisateur et le mot de passe dans une InitiateAuth API demande AdminInitiateAuth ou. 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 à distance sécurisé (SRP)

Pour connecter un utilisateurUSER_SRP_AUTH, incluez un nom d'utilisateur et un SRP_A paramètre dans une InitiateAuth API demande AdminInitiateAuth or. En réponse, Amazon Cognito renvoie du sel SRP_B à l'utilisateur. Lorsqu'aucun utilisateur n'est trouvé, Amazon Cognito renvoie une réponse simulée lors de la première étape, comme décrit dans la section 5054. RFC Amazon Cognito renvoie le même sel et un identifiant utilisateur interne UUIDau format correspondant à la même combinaison nom d'utilisateur et groupe d'utilisateurs. Lorsque vous envoyez une RespondToAuthChallenge API demande avec une preuve de mot de passe, Amazon Cognito renvoie une NotAuthorizedException erreur générique lorsque le nom d'utilisateur ou le mot de passe est incorrect.

Note

Vous pouvez simuler une réponse générique avec authentification par nom d'utilisateur et mot de passe si vous utilisez des attributs d'alias basés sur la vérification et si le nom d'utilisateur immuable n'est pas formaté comme 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'SignUpopération revient toujours UsernameExistsException lorsqu'un nom d'utilisateur est déjà utilisé. 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.

Pour un exemple de la manière dont Amazon Cognito peut empêcher l'utilisation de SignUp API demandes visant à découvrir des 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, lorsque vous configurez des attributs d'alias dans votre groupe d'utilisateurs, vous pouvez empêcher les adresses e-mail et les numéros de téléphone dupliqués de générer UsernameExistsException des erreurs en réponse aux SignUp API demandes. 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 AWS CLI commande

    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 AWS CLI commande

    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 AWS CLI commande

    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 AWS CLI commande

    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 du public SignUp API pour vérifier si un utilisateur existe avec une adresse e-mail ou un numéro de téléphone donné.

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 CLI

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.