AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
Wie ändere ich die Attribute eines Amazon-Cognito-Benutzerpools nach der Erstellung?
Ich habe einen Amazon-Cognito-Benutzerpool erstellt und möchte jetzt die Standardattribute ändern, die für die Benutzerregistrierung erforderlich sind.
Kurzbeschreibung
Du kannst Standard-Benutzerpool-Attribute nicht ändern, nachdem ein Benutzerpool erstellt wurde. Erstelle stattdessen einen neuen Benutzerpool mit den Attributen, die du für die Benutzerregistrierung voraussetzen möchtest. Verwende anschließend eine AWS-Lambda-Funktion als Auslöser für die Benutzermigration, um bestehende Benutzer in den neuen Benutzerpool zu migrieren.
Hinweis: Du kannst einem vorhandenen Benutzerpool benutzerdefinierte Attribute hinzufügen, diese Attribute sind jedoch für die Benutzerregistrierung nicht erforderlich.
Behebung
Einen neuen Benutzerpool mit unterschiedlichen Attributen einrichten
Erstellen Sie einen neuen Benutzerpool. Bevor du dann Pool erstellen auswählst, bearbeite die Standardattribute nach deinen Wünschen.
Wichtig: Wenn du neue erforderliche Attribute im Benutzerpool angibst, lege deine Lambda-Funktion so aus, dass sie diese neuen Attribute für den neuen Benutzerpool bereitstellt. Wenn du die Funktion nicht so entwirfst, dass sie die neuen Attribute bereitstellt, schlägt die Authentifizierung während der Benutzermigration fehl. Angenommen, dein alter Benutzerpool benötigte lediglich E-Mail, dein neuer Benutzerpool benötigt allerdings sowohl E-Mail als auch Telefonnummer. Übergib in diesem Fall Attributwerte für die Telefonnummer an deinen neuen Benutzerpool, um Benutzer erfolgreich zu authentifizieren.
Lambda-Funktion erstellen
Um eine Lambda-Funktion für die Benutzermigration zu erstellen, nutze den Lambda-Konsoleneditor oder erstelle dein eigenes Bereitstellungspaket und lade es hoch.
Wichtig: Dieser Beispielcode funktioniert nicht, wenn Benutzer migriert werden, die die Multi-Faktor-Authentifizierung (MFA) im alten Benutzerpool verwenden.
Verwende die folgende Beispielfunktion in Python, um deine Konfigurationen zu testen:
# Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. # Permission is hereby granted, free of charge, to any person obtaining a copy of this # software and associated documentation files (the "Software"), to deal in the Software # without restriction, including without limitation the rights to use, copy, modify, # merge, publish, distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, # INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A # PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. import json import boto3 client = boto3.client('cognito-idp') def lambda_handler(event, context): if (event['triggerSource'] == 'UserMigration_Authentication'): user = client.admin_initiate_auth( UserPoolId='<user pool id of the user pool where the user already exists>', ClientId='<app client id of the user pool where the user already exists>', AuthFlow='ADMIN_NO_SRP_AUTH', AuthParameters={ 'USERNAME': event['userName'], 'PASSWORD': event['request']['password'] } ) if (user): userAttributes = client.get_user( AccessToken=user['AuthenticationResult']['AccessToken'] ) for userAttribute in userAttributes['UserAttributes']: if userAttribute['Name'] == 'email': userEmail = userAttribute['Value'] #print(userEmail) event['response']['userAttributes'] = { "email": userEmail, "email_verified": "true" } event['response']['messageAction'] = "SUPPRESS" print (event) return (event) else: return('Bad Password') elif (event["triggerSource"] == "UserMigration_ForgotPassword"): user = client.admin_get_user( UserPoolId='<user pool id of the user pool where the already user exists>', Username=event['userName'] ) if (user): for userAttribute in user['UserAttributes']: if userAttribute['Name'] == 'email': userEmail = userAttribute['Value'] print(userEmail) event['response']['userAttributes'] = { "email": userEmail, "email_verified": "true" } event['response']['messageAction'] = "SUPPRESS" print (event) return (event) else: return('Bad Password') else: return('there was an error')
Hinweis: Ersetze UserPoolId durch die ID des alten Benutzerpools. Suche die ID in der Amazon Cognito-Konsole auf der Verwaltungsseite für den Benutzerpool auf der Registerkarte Allgemeine Einstellungen. Ersetze ClientId durch die App-Client-ID des alten Benutzerpools. Suche die App-Client-ID in der Amazon-Cognito-Konsole unter App-Clients.
Dem neuen Benutzerpool einen Auslöser für die Benutzermigration hinzufügen
Legen Sie in der Amazon-Cognito-Konsole Ihre neue Lambda-Funktion als Lambda-Auslöser für die Benutzermigration fest. Weitere Informationen findest du unter Hinzufügen eines Lambda-Auslösers für einen Benutzerpool.
Den Flow USER_PASSWORD_AUTH für die Benutzermigration aktivieren
Konfiguriere deinen Benutzerpool-App-Client so, dass er zum Zeitpunkt der Migration den Authentifizierungs-Flow USER_PASSWORD_AUTH verwendet. Mit diesem Authentifizierungs-Flow kann deine App den Benutzernamen und das Passwort des Benutzers an die Lambda-Funktion weitergeben. Der Authentifizierungs-Flow kann dann den Benutzer aus dem vorhandenen Benutzerpool authentifizieren.
Füge deiner App Logik hinzu, um den Standardauthentifizierungs-Flow auf den Flow USER_PASSWORD_AUTH zu ändern. Lasse die Logik den Authentifizierungs-Flow für Anmeldeversuche ändern, bei denen der Benutzer im alten Benutzerpool, aber nicht im neuen Benutzerpool existiert.
Wenn deine App beispielsweise JavaScript verwendet, gib cognitoUser.setAuthenticationFlowType als USER_PASSWORD_AUTH an.
Hinweis: Nach der Migration deiner Benutzer empfiehlt es sich, den Authentifizierungs-Flow deiner App auf USER_SRP_AUTH zu ändern. Dieser Flow verwendet das Secure Remote Password (SRP)-Protokoll, um Benutzer zu authentifizieren, ohne dass Passwörter über das Netzwerk gesendet werden müssen. Dieser Flow bietet zudem Sicherheitsvorteile gegenüber dem Flow USER_PASSWORD_AUTH.
cognitoUser.setAuthenticationFlowType('USER_PASSWORD_AUTH'); cognitoUser.authenticateUser(authenticationDetails, { onSuccess: function(result) { // User authentication was successful }, onFailure: function(err) { // User authentication was not successful }, mfaRequired: function (codeDeliveryDetails) { // MFA is required to complete user authentication. // Get the code from user and call cognitoUser.sendMFACode(verificationCode, this); } });
Setup testen
Verwende die von Amazon Cognito gehostete Web-Benutzeroberfläche zum Anmelden bei deiner App, um den Authentifizierungs-Flow zu testen. Der Benutzer, mit dem du dich anmeldest, wird mit dem neuen Benutzerpool authentifiziert und dann migriert.
Hinweis: Wenn du kein Benutzerkonto hast, mit dem du dich anmelden kannst, um deine Konfigurationen zu testen, erstelle einen neuen Benutzer.
Probleme beheben
Wenn du beim Testen eine Fehlermeldung erhältst, z. B. „Exception during user migration“, aktiviere die Protokollierung von Anweisungen von Lambda. Diese Einstellung protokolliert die Parameter für einen Lambda-Auslöser für die Benutzermigration in Amazon CloudWatch Logs. Reproduziere den Fehler und überprüfe dann die Protokolle auf Probleme mit den Parametern oder Syntaxfehlern im Lambda-Auslöser für die Benutzermigration.
Ähnliche Informationen
Anpassen von Benutzerpool-Workflows mit Lambda-Auslösern
Was ist der Unterschied zwischen Amazon-Cognito-Benutzerpools und -Identitätspools?
- Tags
- Amazon Cognito
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 4 Jahren
AWS OFFICIALAktualisiert vor 6 Monaten