Come posso confermare automaticamente gli utenti in Amazon Cognito?

6 minuti di lettura
0

Desidero confermare gli utenti e verificare automaticamente i loro indirizzi email e numeri di telefono senza utilizzare password monouso (OTP).

Breve descrizione

Quando un utente si iscrive a un pool di utenti di Amazon Cognito, in genere deve verificare il proprio indirizzo email o numero di telefono. Questo passaggio di solito viene fatto inviando un OTP all'indirizzo email o al numero di telefono di un utente per la verifica. Un utente può essere confermato automaticamente anche senza la verifica OTP.

Questi sono i passaggi di alto livello per confermare automaticamente un utente senza utilizzare una OTP con l'indirizzo email o il numero di telefono:

  • Creazione di una funzione AWS Lambda.
  • Crea un pool di utenti di Amazon Cognito con un trigger Lambda di pre-registrazione.
  • Registrazione dell'utente in Amazon Cognito. Verifica gli attributi utente utilizzando la Console di gestione AWS o un'API AWS.

Risoluzione

Segui questi passaggi per confermare automaticamente un utente e i suoi attributi senza verifica OTP.

Creazione di una funzione Lambda

1.    Usa Amazon Cognito Events per creare una funzione Lambda che gestisca l'evento creatore di un utente Amazon Cognito. Il seguente codice Python conferma l'utente e i suoi attributi, come l'indirizzo email e il numero di telefono.

Esempio di codice di conferma utente in Python:

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.    Imposta un evento di test nella funzione Lambda con dati pertinenti al trigger Lambda di pre-registrazione. L'esempio seguente include l'evento di test per il codice Python di esempio del passaggio 1.

Esempio di evento di test JSON:

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

Creazione di un pool di utenti di Amazon Cognito

1.    Crea un nuovo pool di utenti di Amazon Cognito o seleziona un pool di utenti esistente.

2.    Nel pool di utenti selezionato, aggiungi il trigger Lambda di pre-registrazione selezionando la funzione Lambda creata.

Il trigger Lambda di pre-registrazione può essere utilizzato per aggiungere una logica personalizzata e convalidare il nuovo utente. Quando un nuovo utente si registra alla tua app, Amazon Cognito trasmette le informazioni sull'evento alla funzione Lambda. (L'esempio della funzione Lambda si trova nel passaggio 1 della sezione Creazione di una funzione Lambda). La funzione Lambda restituisce lo stesso oggetto evento ad Amazon Cognito con eventuali modifiche nella risposta. Di seguito è riportata la risposta in uscita per l'evento di test del passaggio 2 della sezione Creazione di una funzione Lambda.

Esempio di risposta all'evento di test JSON:

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

Nota: se un nuovo utente si registra con un numero di telefono o un alias di indirizzo e-mail preesistente, l'alias passa al nuovo utente. Di conseguenza, il numero di telefono o l'indirizzo email dell'utente precedente viene contrassegnato come non verificato. Per impedire queste modifiche, richiama l'API ListUsers per elencare gli attributi di tutti gli utenti del pool di utenti. Rivedi gli attributi utente esistenti e confrontali con i nuovi attributi utente per assicurarti che non siano state effettuate modifiche impreviste.

5.    Verifica che il trigger Lambda di pre-registrazione sia configurato nel tuo pool di utenti.

Registrazione dell'utente Amazon Cognito

Registrati come nuovo utente utilizzando l'interfaccia utente ospitata di Amazon Cognito o richiamando l'API SignUp.

Utilizzo dell'interfaccia utente ospitata di Amazon Cognito

1.    Nell'interfaccia utente ospitata di Amazon Cognito, registrati come nuovo utente. Assicurati di fornire tutti gli attributi richiesti. Dopo la registrazione, si accede a un URL di richiamata senza alcuna verifica.

2.    Verifica gli attributi utente.

  • Account status: Enabled/CONFIRMED
  • email_verified: true
  • phone_number_verified: true

Utilizzando l'AWS CLI

1.    Nell'interfaccia della linea di comando AWS (AWS CLI), crea un utente richiamando l'API SignUp.

Importante: nei comandi AWS CLI di esempio, sostituisci tutte le istanze di stringhe di esempio con i valori in tuo possesso. (Ad esempio, sostituisci "example_id_client" con il tuo ID client).

Esempio di comando sign-up:

$ 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.    Calcola l'hash segreto utilizzando l'ID client dell'app, il segreto client e il nome dell'utente nel pool di utenti di Amazon Cognito.

3.    Installa Python.

4.    Salva il seguente script Python di esempio come file .py.

Importante: sostituisci i seguenti valori prima di eseguire lo script di esempio. Per username, inserisci il nome dell'utente nel pool di utenti. Per AppClientId, inserisci l'ID client dell'app del pool di utenti. Infine, per AppClientSecret, inserisci il segreto client dell'app. Per ricevere assistenza, esegui il seguente comando: $ python3 secret_hash.py –help.

Esempio di 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.    Usa il seguente comando per ottenere l'hash segreto calcolato dallo script Python.

Comando di esempio:

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

Esempio di utente confermato automaticamente

1.    Genera un hash segreto eseguendo uno script Python che utilizza il nome utente, l'ID del client dell'app e il segreto client.

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

Output:

SecretHash: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

2.    Crea un utente Amazon Cognito richiamando 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'

Output:

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

3.    Per verificare lo stato degli attributi utente, richiama l'API AdminGetUser.

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

Output:

{
  "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"
}

L'output finale mostra che gli attributi dell'indirizzo email e del numero di telefono sono verificati. UserStatus è impostato su Confirmed senza alcuna verifica esterna.


AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa