Come posso modificare gli attributi di un pool di utenti Amazon Cognito dopo averli creati?
Ho creato un pool di utenti Amazon Cognito e ora voglio modificare gli attributi standard richiesti per la registrazione degli utenti.
Breve descrizione
Non è possibile modificare gli attributi standard del pool di utenti dopo la creazione di un pool di utenti. Crea invece un nuovo pool di utenti con gli attributi che vuoi richiedere per la registrazione degli utenti. Quindi, migra gli utenti esistenti al nuovo pool di utenti utilizzando una funzione AWS Lambda come trigger per la migrazione degli utenti.
Nota: puoi aggiungere attributi personalizzati a un pool di utenti esistente, ma questi attributi non sono necessari per la registrazione degli utenti.
Soluzione
Configurare un nuovo pool di utenti con attributi diversi
Crea un nuovo pool di utenti. Quindi, prima di scegliere Crea pool, modifica gli attributi standard in base alle tue preferenze.
Importante: se si specificano nuovi attributi obbligatori nel pool di utenti, è necessario progettare la funzione Lambda per fornire questi nuovi attributi al nuovo pool di utenti. Se non si progetta la funzione per fornire i nuovi attributi, l'autenticazione non riesce durante la migrazione degli utenti. Ad esempio, supponiamo che il vecchio pool di utenti richieda solo l'e-mail, mentre il nuovo pool di utenti richieda sia l'**e-mail ** sia il numero di telefono. In questo caso, è necessario passare i valori degli attributi per il numero di telefono al nuovo pool di utenti per autenticare correttamente gli utenti.
Crea una funzione Lambda
Crea una funzione Lambda per la migrazione degli utenti utilizzando l'editor della console Lambda o creando e caricando il tuo pacchetto di implementazione.
Importante: questo codice di esempio non funzionerà per migrare gli utenti che utilizzano l'autenticazione a più fattori (MFA) nel vecchio pool di utenti.
Per testare le tue configurazioni, usa la seguente funzione di esempio in Python:
# 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')
Nota: sostituisci UserPoolId con l'ID del vecchio pool di utenti. Trova l'ID nella console Amazon Cognito, nella pagina di gestione del pool di utenti, nella scheda Impostazioni generali. Sostituisci ClientId con l'ID client dell'app del vecchio pool di utenti. Trova l'ID del client dell'app nella console Amazon Cognito in App client.
Aggiungi un trigger per la migrazione degli utenti al nuovo pool di utenti
Nella console Amazon Cognito, imposta la tua nuova funzione Lambda come trigger Lambda per la migrazione degli utenti. Per ulteriori informazioni, consulta Aggiungere un trigger Lambda per un pool di utenti.
Abilita il flusso USER_PASSWORD_AUTH per la migrazione degli utenti
Configura il client dell'app del pool di utenti per utilizzare il flusso di autenticazione USER_PASSWORD_AUTH al momento della migrazione. Questo flusso di autenticazione consente alla tua app di passare il nome utente e la password dell'utente alla funzione Lambda. Il flusso di autenticazione può quindi autenticare l'utente dal pool di utenti esistente.
Aggiungi logica alla tua app per modificare il flusso di autenticazione predefinito nel flusso USER_PASSWORD\ _AUTH. Fai in modo che la logica modifichi il flusso di autenticazione per i tentativi di accesso in cui l'utente è presente nel vecchio pool di utenti ma non nel nuovo pool di utenti.
Ad esempio, se la tua app utilizza JavaScript, specifica cognitoUser.setAuthenticationFlowType come USER_PASSWORD_AUTH.
Nota: dopo la migrazione degli utenti, è consigliabile modificare il flusso di autenticazione dell'app in USER_SRP_AUTH. Questo flusso utilizza il protocollo Secure Remote Password (SRP) per autenticare gli utenti senza la necessità di inviare password attraverso la rete. Questo flusso offre anche vantaggi in termini di sicurezza rispetto al flusso 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); } });
Prova la configurazione
Accedi alla tua app utilizzando l'interfaccia utente web ospitata da Amazon Cognito per testare il flusso di autenticazione. L'utente con cui accedi viene autenticato con il nuovo pool di utenti e quindi migrato.
Nota: se non disponi di un account utente con cui accedere per testare le configurazioni, crea un nuovo utente.
Risolvere i problemi
Se ricevi un messaggio di errore durante il test, ad esempio "Exception during user migration", attiva le istruzioni di registrazione di Lambda. Questo registra i parametri di un trigger Lambda per la migrazione degli utenti nei log Amazon CloudWatch. Riproduci l'errore, quindi esamina i log per eventuali problemi con i parametri o gli errori di sintassi nel trigger Lambda per la migrazione degli utenti.
Informazioni correlate
Personalizzare i flussi di lavoro del pool di utenti con trigger Lambda
Qual è la differenza tra i pool di utenti di Amazon Cognito e i pool di identità?
Video correlati


Contenuto pertinente
- AWS UFFICIALEAggiornata 7 mesi fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa