Come posso modificare gli attributi di un pool di utenti Amazon Cognito dopo averli creati?

6 minuti di lettura
0

Ho creato un pool di utenti Amazon Cognito e ora voglio modificare gli attributi standard richiesti per la registrazione degli utenti. Come posso modificare gli attributi?

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, durante la configurazione (prima di scegliere Crea pool alla fine), 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. In caso contrario, l'autenticazione fallisce durante la migrazione degli utenti. Ad esempio, supponiamo che tu abbia richiesto solo l'indirizzo e-mail nel tuo vecchio pool di utenti, ma ora hai bisogno sia dell'indirizzo **e-mail ** che del numero di telefono nel tuo nuovo pool di utenti. In questo caso, è necessario passare i valori degli attributi per il numero di telefono al nuovo pool di utenti per autenticare correttamente gli utenti.

Creare 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.

Ecco un esempio di funzione in Python che puoi usare per i test:

Nota: per UserPoolID, sostituisci il valore di esempio 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. Per ClientId, sostituisci il valore di esempio con l'ID client dell'app del vecchio pool di utenti. Trova l'ID client dell'app anche nella console Amazon Cognito: in Impostazioni generali, scegli Client dell'app.

Importante: questo codice di esempio non funzionerà per migrare gli utenti che utilizzano l'autenticazione a più fattori (MFA) nel vecchio pool di utenti.

# 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')

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. Ciò consente all'app di passare il nome utente e la password dell'utente alla funzione Lambda e quindi di autenticarli dal pool di utenti esistente.

Aggiungi log alla tua app per modificare il flusso di autenticazione predefinito nel flusso USER_PASSWORD_AUTH per i tentativi di accesso in cui l'utente risulta esistente nel vecchio pool di utenti e non risulta esistente 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 autentica gli utenti utilizzando il protocollo Secure Remote Password (SRP) senza inviare password attraverso la rete. Questo flusso offre anche vantaggi in termini di sicurezza rispetto al flusso USER_PASSWORD_AUTH. Per ulteriori informazioni, consulta Flusso di autenticazione per la migrazione degli utenti e Autenticazione con un pool di utenti.

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);
        }
    });

Per ulteriori informazioni, consulta Trigger Lambda per la migrazione degli utenti.

Test della 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 i test, crea un nuovo utente.

Risoluzione dei problemi

Se ricevi un messaggio di errore come "Eccezione durante la migrazione degli utenti" durante il test, abilita le istruzioni di registrazione di Lambda. Questo registra i parametri di un trigger Lambda per la migrazione degli utenti nei file di 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à?

Guida introduttiva ai pool di utenti

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa