Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Come posso modificare gli attributi di un pool di utenti Amazon Cognito dopo averlo creato?
Ho creato un pool di utenti Amazon Cognito e ora voglio modificare gli attributi standard richiesti per la registrazione degli utenti.
Breve descrizione
Non puoi modificare gli attributi standard di un pool di utenti dopo averlo creato. Crea invece un nuovo pool di utenti con gli attributi che desideri richiedere per la registrazione degli utenti. Quindi utilizza una funzione AWS Lambda come trigger di migrazione degli utenti per eseguire la migrazione degli utenti esistenti al nuovo pool di utenti.
Nota: puoi aggiungere attributi personalizzati a un pool di utenti esistente, ma questi attributi non vengono richiesti per la registrazione degli utenti.
Risoluzione
Configura 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 specifichi nuovi attributi necessari nel pool di utenti, progetta la funzione Lambda in modo da fornire i nuovi attributi al nuovo pool di utenti. Se non progetti la funzione in modo da 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, passa i valori degli attributi per il numero di telefono al nuovo pool di utenti per autenticare correttamente gli utenti.
Crea una funzione Lambda
Per creare una funzione Lambda per la migrazione degli utenti, utilizza l'editor della console Lambda o crea e carica il pacchetto di distribuzione.
Importante: questo esempio di codice non funziona per la migrazione degli utenti che utilizzano l'autenticazione a più fattori (MFA) nel vecchio pool di utenti.
Per testare le configurazioni, utilizza il seguente esempio di funzione 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, consultando la pagina di gestione del pool di utenti, nella scheda Impostazioni generali. Sostituisci ClientId con l'ID del client di app del vecchio pool di utenti. Trova l'ID del client di app nella console Amazon Cognito alla voce Client di app.
Aggiungi un trigger di migrazione degli utenti al nuovo pool di utenti
Nella console Amazon Cognito, imposta la nuova funzione Lambda come trigger Lambda di 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 di app del pool di utenti per utilizzare il flusso di autenticazione USER_PASSWORD_AUTH al momento della migrazione. Questo flusso di autenticazione consente all'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 all'app una logica 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 l'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 necessità di inviare password in 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); } });
Verifica la configurazione
Utilizza l'interfaccia utente web ospitata di Amazon Cognito per accedere all'app e verificare 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 verificare le configurazioni, crea un nuovo utente.
Risolvi i problemi
Se ricevi un messaggio di errore durante la verifica, ad esempio "Exception during user migration", attiva le istruzioni di registrazione da Lambda. Questa impostazione registra i parametri di un trigger Lambda di migrazione degli utenti nei log Amazon CloudWatch. Riproduci l'errore, quindi esamina i log per individuare eventuali problemi relativi ai parametri o errori di sintassi nel trigger Lambda di migrazione degli utenti.
Informazioni correlate
Personalizzazione di flussi di lavoro di pool di utenti con trigger Lambda
Qual è la differenza tra i pool di utenti di Amazon Cognito e i pool di identità?
- Argomenti
- Security, Identity, & Compliance
- Lingua
- Italiano
