Comment confirmer automatiquement les utilisateurs dans Amazon Cognito ?

Lecture de 6 minute(s)
0

Je souhaite confirmer les utilisateurs, puis vérifier automatiquement leurs adresses e-mail et numéros de téléphone sans utiliser de mots de passe uniques (OTP).

Brève description

Lorsqu'un utilisateur s'inscrit auprès d'un groupe d'utilisateurs Amazon Cognito, son adresse e-mail ou son numéro de téléphone doit généralement être vérifié(e). Cette vérification est effectuée la plupart du temps en envoyant un OTP à l'adresse e-mail ou au numéro de téléphone de l'utilisateur à des fins de vérification. Un utilisateur peut également être confirmé automatiquement sans vérification à l'aide d'un OTP.

Voici les étapes de haut niveau permettant de confirmer automatiquement un utilisateur avec son adresse e-mail ou son numéro de téléphone, sans utiliser d'OTP :

  • Créez une fonction AWS Lambda.
  • Créez un groupe d'utilisateurs Amazon Cognito avec un déclencheur Lambda avant l'inscription.
  • Inscrivez l'utilisateur dans Amazon Cognito. Vérifiez les attributs de l'utilisateur en utilisant la console de gestion AWS ou une API AWS.

Résolution

Suivez ces étapes pour confirmer automatiquement un utilisateur et ses attributs sans vérification à l'aide d'un OTP.

Créer une fonction Lambda

1.    Utilisez les événements Amazon Cognito pour créer une fonction Lambda responsable de la gestion de l'événement qui crée un utilisateur Amazon Cognito. Le code Python suivant confirme l'utilisateur et ses attributs, tels que l'adresse e-mail et le numéro de téléphone.

Exemple de code Python de confirmation d'utilisateur :

import json

def lambda_handler(event, context):

  # Confirm the user
  event['response']['autoConfirmUser'] = True

  # Set the email as verified if it is in the request
  if 'email' in event['request']['userAttributes']:
    event['response']['autoVerifyEmail'] = True

  # Set the phone number as verified if it is in the request
  if 'phone_number' in event['request']['userAttributes']:
    event['response']['autoVerifyPhone'] = True

  # Return to Amazon Cognito
  return event

2.    Configurez un événement de test dans la fonction Lambda avec des données correspondant au déclencheur Lambda avant l'inscription. L'exemple suivant inclut l'événement de test correspondant à l'exemple de code Python de l'étape 1.

Exemple d'événement de test JSON :

{
  "request": {
    "userAttributes": {
      "email": "email@example.com",
      "phone_number": "5550100"
    }
  },
  "response": {}
}

Créer un groupe d'utilisateurs Amazon Cognito

1.    Créez un nouveau groupe d'utilisateurs Amazon Cognito ou sélectionnez un groupe d'utilisateurs existant.

2.    Dans le groupe d'utilisateurs sélectionné, ajoutez le déclencheur Lambda avant l'inscription en sélectionnant la fonction Lambda que vous avez créée.

Le déclencheur Lambda avant l'inscription peut être utilisé pour ajouter une logique personnalisée et valider le nouvel utilisateur. Lorsqu'un nouvel utilisateur s'inscrit à votre application, Amazon Cognito transmet ces informations d'événement à la fonction Lambda. (L'exemple de fonction Lambda se trouve à l'étape 1 de la section Créer une fonction Lambda.) La fonction Lambda renvoie le même objet d'événement à Amazon Cognito avec les modifications éventuelles de la réponse. Voici la réponse sortante pour l'événement de test de l'étape 2 de la section Créer une fonction Lambda.

Exemple de réponse à un événement de test JSON :

{
  "request": {
    "userAttributes": {
      "email": "email@example.com",
      "phone_number": "5550100"
    }
  },
  "response": {
    "autoConfirmUser": true,
    "autoVerifyEmail": true,
    "autoVerifyPhone": true
  }
}

Remarque : si un nouvel utilisateur s'inscrit avec un numéro de téléphone ou un alias d'adresse e-mail préexistant, l'alias est transféré au nouvel utilisateur. Le numéro de téléphone ou l'adresse e-mail de l'utilisateur précédent est ensuite marqué(e) comme non vérifié(e). Pour empêcher ces modifications, appelez l'API ListUsers afin de répertorier les attributs de tous les utilisateurs du groupe d'utilisateurs. Examinez les attributs d'utilisateur existants et comparez-les aux nouveaux attributs d'utilisateur pour vous assurer de l'absence de toute modification inattendue.

5.    Vérifiez que le déclencheur Lambda avant l'inscription est configuré dans votre groupe d'utilisateurs.

Inscrire l'utilisateur Amazon Cognito

Inscrivez-vous en tant que nouvel utilisateur en utilisant l'interface utilisateur hébergée d'Amazon Cognito ou en appelant l'API SignUp.

À l'aide de l'interface utilisateur hébergée d'Amazon Cognito

1.    Dans l'interface utilisateur hébergée d'Amazon Cognito, inscrivez-vous en tant que nouvel utilisateur. Renseignez tous les attributs demandés. Après votre inscription, vous accédez à une URL de rappel sans aucune vérification.

2.    Vérifiez vos attributs d'utilisateur.

  • Statut du compte : activé/CONFIRMÉ
  • email_verified : true
  • phone_number_verified : true

Utiliser l'AWS CLI

1.    Dans l'Interface de la ligne de commande AWS (AWS CLI), créez un utilisateur en appelant l'API SignUp.

Important : dans les exemples de commandes d'AWS CLI, remplacez toutes les instances des exemples de chaînes par vos valeurs. (Par exemple, remplacez « example_client_id » par votre ID client.)

Exemple de commande d'inscription :

$ aws cognito-idp sign-up --client-id example_client_id --secret-hash example_secret_hash --username example_user_name --password example_password --user-attributes Name="email",Value="email@example.com" Name="phone_number",Value="5550100"

2.    Calculez le hachage secret à l'aide de l'ID client de l'application, du secret client et du nom d'utilisateur de l'utilisateur dans le groupe d'utilisateurs Amazon Cognito.

3.    Installez Python.

4.    Enregistrez l'exemple de script Python suivant sous la forme d'un fichier .py.

Important : remplacez les valeurs suivantes avant d'exécuter l'exemple de script. Dans le champ username, saisissez le nom d'utilisateur de l'utilisateur dans le groupe d'utilisateurs. Dans le champ AppClientId, saisissez l'ID client de l'application dans votre groupe d'utilisateurs. Ensuite, dans le champ AppClientSecret, saisissez le secret client de l'application. Pour obtenir de l'aide, exécutez la commande suivante : $ python3 secret_hash.py —help.

Exemple de script Python :

import base64, hashlib, hmac, argparse

parser = argparse.ArgumentParser()
parser.add_argument("--username", required=True)
parser.add_argument("--appclientid", required=True)
parser.add_argument("--appclientsecret", required=True)
args = parser.parse_args()

message = bytes(args.username + args.appclientid, 'utf-8')
key = bytes(args.appclientsecret, 'utf-8')
secret_hash = base64.b64encode(hmac.new(key, message, digestmod=hashlib.sha256).digest()).decode()

print('SecretHash: {}'.format(secret_hash))

5.    Utilisez la commande suivante pour obtenir le hachage secret calculé à partir du script Python.

Exemple de commande :

$ python3 secret_hash.py --username example_user_name --appclientid example_app_client_id --appclientsecret example_app_client_secret

Exemple d'utilisateur confirmé automatiquement

1.    Générez un hachage secret en exécutant un script Python utilisant le nom d'utilisateur, l'ID client de l'application et le secret client.

$ python3 secret_hash.py --username example_user_name --appclientid 11122223333 --appclientsecret je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY

Sortie :

SecretHash: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

2.    Créez un utilisateur Amazon Cognito en appelant l'API SignUp.

$ aws cognito-idp sign-up --client-id 7morqrabcdEXAMPLE_ID --secret-hash wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY = --username example_user_name --password Password1@ --user-attributes Name='email',Value='email@example.com' Name='phone_number',Value='5550100'

Sortie :

{
  "UserConfirmed": true,
  "UserSub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}

3.    Pour vérifier l'état des attributs d'utilisateur, appelez l'API AdminGetUser.

$ aws cognito-idp admin-get-user --user-pool-id us-east-1_I 111122223333 --username example_user_name

Sortie :

{
  "Username": "example_user_name",
  "UserAttributes": [
    {
      "Name": "sub",
      "Value": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
    },
    {
      "Name": "email_verified",
      "Value": "true"
    },
    {
      "Name": "phone_number_verified",
      "Value": "true"
    },
    {
      "Name": "phone_number",
      "Value": "5550100"
    },
    {
      "Name": "email",
      "Value": "email@example.com"
    }
  ],
  "UserCreateDate": "2022-12-12T11:54:12.988000+00:00",
  "UserLastModifiedDate": "2022-12-12T11:54:12.988000+00:00",
  "Enabled": true,
  "UserStatus": "CONFIRMED"
}

Le résultat final indique que les attributs d'adresse e-mail et de numéro de téléphone sont vérifiés. UserStatus est défini sur Confirmed (Confirmé) sans aucune vérification externe.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an
Aucun commentaire