Wie bestätige ich Benutzer in Amazon Cognito automatisch?

Lesedauer: 6 Minute
0

Ich möchte Benutzer bestätigen können und ihre E-Mail-Adressen und Telefonnummern automatisch verifizieren, ohne Einmalpasswörter (OTPs) verwenden zu müssen.

Kurzbeschreibung

Wenn sich ein Benutzer bei einem Amazon-Cognito-Benutzerpool anmeldet, muss er in der Regel seine E-Mail-Adresse oder Telefonnummer verifizieren lassen. Dies erfolgt normalerweise, indem ein OTP zur Überprüfung an die E-Mail-Adresse oder Telefonnummer eines Benutzers gesendet wird. Ein Benutzer kann auch ohne OTP-Überprüfung automatisch bestätigt werden.

Dies sind die wichtigsten Schritte zur automatischen Bestätigung eines Benutzers, ohne ein OTP mit der E-Mail-Adresse oder Telefonnummer des Benutzers zu verwenden:

  • Eine AWS Lambda-Funktion erstellen.
  • Erstellen Sie einen Amazon-Cognito-Benutzerpool mit einem pre sign-up Lambda-Trigger.
  • Melden Sie den Benutzer bei Amazon Cognito an. Überprüfen Sie die Benutzerattribute mithilfe der AWS-Managementkonsole oder einer AWS-API.

Auflösung

Gehen Sie wie folgt vor, um einen Benutzer und seine Attribute automatisch ohne OTP-Überprüfung zu bestätigen.

Lambda-Funktion erstellen

1.    Verwenden Sie Amazon Cognito Events, um eine Lambda-Funktion zu erstellen, die das Ereignis verarbeitet, das einen Amazon-Cognito-Benutzer erstellt. Der folgende Python-Code bestätigt den Benutzer und seine Attribute wie E-Mail-Adresse und Telefonnummer.

Beispiel für einen Python-Benutzerbestätigungscode:

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.    Richten Sie in der Lambda-Funktion ein Testereignis mit Daten ein, die für den pre sign-up Lambda-Trigger relevant sind. Das folgende Beispiel enthält das Testereignis für den Python-Beispielcode aus Schritt 1.

Beispiel für ein JSON-Testereignis:

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

Erstellen eines Amazon-Cognito-Benutzerpools

1.    Erstellen Sie einen neuen Amazon-Cognito-Benutzerpool oder wählen Sie einen vorhandenen Benutzerpool aus.

2.    Fügen Sie im ausgewählten Benutzerpool den pre sign-up Lambda-Trigger hinzu, indem Sie die von Ihnen erstellte Lambda-Funktion auswählen.

Der pre sign-up Lambda-Trigger kann verwendet werden, um benutzerdefinierte Logik hinzuzufügen und den neuen Benutzer zu validieren. Wenn sich ein neuer Benutzer bei Ihrer App registriert, leitet Amazon Cognito diese Ereignisinformationen an die Lambda-Funktion weiter. (Die Lambda-Beispielfunktion befindet sich in Schritt 1 des Abschnitts „Lambda-Funktion erstellen“.) Die Lambda-Funktion gibt dasselbe Ereignisobjekt mit allen Änderungen in der Antwort an Amazon Cognito zurück. Im Folgenden finden Sie die Ausgabeantwort für das Testereignis aus Schritt 2 des Abschnitts „Lambda-Funktion erstellen“.

Beispiel für eine Antwort auf ein JSON-Testereignis:

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

Hinweis: Wenn sich ein neuer Benutzer mit einem bereits vorhandenen Alias für Telefonnummer oder E-Mail-Adresse anmeldet, wird der Alias auf den neuen Benutzer übertragen. Dann wird die Telefonnummer oder E-Mail-Adresse des vorherigen Benutzers als nicht verifiziert markiert. Um diese Änderungen zu verhindern, rufen Sie die ListUsers-API auf, um die Attribute für alle Benutzer aus dem Benutzerpool aufzulisten. Überprüfen Sie die vorhandenen Benutzerattribute und vergleichen Sie sie mit den neuen Benutzerattributen, um sicherzustellen, dass keine unerwarteten Änderungen durchgeführt werden.

5.    Stellen Sie sicher, dass der pre sign-up des Lambda-Trigger in Ihrem Benutzerpool konfiguriert ist.

Melden Sie den Amazon-Cognito-Benutzer an

Melden Sie sich als neuer Benutzer an, indem Sie die von Amazon Cognito gehostete Benutzeroberfläche verwenden oder die SignUp-API aufrufen.

Verwenden der von Amazon Cognito gehosteten Benutzeroberfläche

1.    Melden Sie sich in der von Amazon Cognito gehosteten Benutzeroberfläche als neuer Benutzer an. Stellen Sie sicher, dass Sie alle erforderlichen Attribute angeben. Nachdem Sie sich angemeldet haben, gehen Sie ohne Überprüfung zu einer Callback URL über.

2.    Überprüfen Sie Ihre Benutzerattribute.

  • Kontostatus: Aktiviert/BESTÄTIGT
  • email_verified: wahr
  • phone_number_verified: wahr

Verwendung von AWS CLI

1.    Erstellen Sie im AWS Command Line Interface (AWS CLI) einen Benutzer, indem Sie die SignUp-API aufrufen.

Wichtig: Ersetzen Sie in den AWS-CLI-Beispielbefehlen alle Instances von Beispielzeichenfolgen durch Ihre Werte. (Ersetzen Sie beispielsweise „example_client_id“ durch Ihre Client-ID.)

Beispiel für einen sign-up-Befehl:

$ 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.    Berechnen Sie den geheimen Hash anhand der App-Client-ID, des Client-Geheimnisses und des Benutzernamens im Amazon-Cognito-Benutzerpool.

3.    Installieren Sie Python.

4.    Speichern Sie das folgende Python-Beispielskript als eine .py-Datei.

Wichtig: Ersetzen Sie die folgenden Werte, bevor Sie das Beispielskript ausführen. Geben Sie als Benutzername den Benutzernamen des Benutzers im Benutzerpool ein. Geben Sie für AppClientID die App-Client-ID Ihres Benutzerpools ein. Geben Sie dann für AppClientSecret Ihr App-Client-Geheimnis ein. Um Hilfe zu erhalten, führen Sie den folgenden Befehl aus: $ python3 secret_hash.py – help.

Beispiel für ein Python-Skript:

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.    Verwenden Sie den folgenden Befehl, um den berechneten geheimen Hash aus dem Python-Skript abzurufen.

Beispielbefehl:

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

Ein automatisch bestätigtes Benutzerbeispiel

1.    Generieren Sie einen geheimen Hash, indem Sie ein Python-Skript ausführen, das den Benutzernamen, die App-Client-ID und das Client-Geheimnis verwendet.

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

Ausgabe:

SecretHash: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

2.    Erstellen Sie einen Amazon-Cognito-Benutzer, indem Sie die SignUp-API aufrufen.

$ 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'

Ausgabe:

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

3.    Rufen Sie die AdminGetUser-API auf, um den Status von Benutzerattributen zu überprüfen.

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

Ausgabe:

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

Die finale Ausgabe zeigt, dass die Attribute E-Mail-Adresse und Telefonnummer verifiziert wurden. Der UserStatus wird ohne externe Überprüfung auf Bestätigt gesetzt.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr