¿Cómo puedo cambiar los atributos de un grupo de usuarios de Amazon Cognito después de crearlo?

7 minutos de lectura
0

He creado un grupo de usuarios de Amazon Cognito y ahora quiero cambiar los atributos estándar necesarios para el registro de usuarios. ¿Cómo puedo cambiar los atributos?

Breve descripción

No puede cambiar los atributos de un grupo de usuarios estándar después de crear un grupo de usuarios. En su lugar, cree un nuevo grupo de usuarios con los atributos que desee solicitar para el registro de usuarios. A continuación, migre los usuarios existentes al nuevo grupo de usuarios mediante el desencadenador de la migración de usuarios de AWS Kambda.

**Nota:**Puede añadir atributos personalizados a un grupo de usuarios existente, aunque estos atributos no son necesarios para el registro de usuarios.

Resolución

Configure un nuevo grupo de usuarios con diferentes atributos

Cree un nuevo grupo de usuarios. A continuación, durante la configuración (antes de elegir **Crear grupo **por último), edite los atributos estándar según sus preferencias.

**Importante:**Si especifica nuevos atributos obligatorios en el grupo de usuarios, debe diseñar la función Lambda para proporcionar estos nuevos atributos al nuevo grupo de usuarios. Si no lo hace, se producirá un error en la autenticación durante la migración del usuario. Por ejemplo, supongamos que solo necesitó el correo electrónico en su grupo de usuarios anterior, pero ahora necesita tanto el correo electrónico como el número de teléfono en su nuevo grupo de usuarios. En este caso, debe transferir los valores de los atributos del número de teléfono a su nuevo grupo de usuarios para autenticar correctamente a los usuarios.

Crear una función Lambda

Cree una función Lambda de migración de usuarios mediante el editor de consola de Lambda o creando y cargando su propio paquete de implementación.

Aquí tiene un ejemplo de la función en Python que puede usar para hacer una prueba:

**Nota:**Para UserPooliD, sustituya el valor del ejemplo por el identificador del grupo de usuarios anterior. Busque el identificador en la consola de Amazon Cognito, en la página de administración del grupo de usuarios, en la pestaña Configuración general. Para ClientID, sustituya el valor del ejemplo por el identificador de cliente de la aplicación del grupo de usuarios anterior. Busque también el identificador del cliente de la aplicación en la consola de Amazon Cognito; en Configuración general, seleccione Clientes de la aplicación.

**Importante:**Este código de ejemplo no funcionará para migrar a los usuarios que utilizan la autenticación multifactorial (MFA) en el grupo de usuarios anterior.

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

Agregar un desencadenador de migración de usuarios al nuevo grupo de usuarios

En la consola de Amazon Cognito, configure la nueva función Lambda desencadenador de Lambda para la migración de usuarios. Para obtener más información, consulte Agregar un desencadenador Lambda de grupo de usuarios.

Habilite el flujo USER\ _PASSWORD\ _AUTH para la migración de usuarios

Configure el cliente del grupo de usuarios de la aplicación para utilizar el flujo de autenticación USER\ _PASSWORD\ _AUTH en el momento de la migración. Esta acción permite que la aplicación transfiera el nombre y la contraseña del usuario a la función Lambda y, a continuación, autenticarlos desde el grupo de usuarios existente.

Agregar lógica a su aplicación para cambiar el flujo de autenticación predeterminado por el flujo USER\ _PASSWORD\ _AUTH para los intentos de inicio de sesión en los que el usuario esté en el grupo de usuarios anterior y no esté en el nuevo grupo de usuarios.

Por ejemplo, si su aplicación usa JavaScript, especifique **cognitouser.setAuthenticationFlowType **como USER\ _PASSWORD\ _AUTH.

**Nota:**Tras la migración de los usuarios, se recomienda cambiar el flujo de autenticación de la aplicación a USER\ _SRP\ _AUTH. Este flujo autentica a los usuarios mediante el protocolo Secure Remote Password (SRP) sin enviar contraseñas a través de la red. Este flujo también ofrece ventajas de seguridad en comparación con el flujo USER\ _PASSWORD\ _AUTH. Para obtener más información, consulte Flujo de autenticación de migración de usuarios y Autenticación con un grupo de usuarios.

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

Para obtener más información, consulte Migración de un desencadenante de usuario Lambda.

Probar la configuración

Inicie sesión en su aplicación mediante la interfaz de usuario web alojada en Amazon Cognito para probar el flujo de autenticación. El usuario con el que inicia sesión se autentica con el nuevo grupo de usuarios y, a continuación, se procede con la migración.

**Nota:**Si no tiene una cuenta de usuario con la que iniciar sesión para realizar las pruebas, cree un nuevo usuario.

Resolución de problemas

Si recibe un mensaje de error tal como «Excepción durante la migración de usuarios» durante la prueba, habilite el registro de sentencias desde Lambda. Esto registra los parámetros de un desencadenador de Lambda de migración de usuarios en los registros de Amazon CloudWatch.

Reproduzca el error y, a continuación, revise los registros para detectar cualquier problema con los parámetros o errores de sintaxis del desencadenador de Lambda de migración de usuarios.


Información relacionada

Personalización de los flujos de trabajo de grupos de usuarios con desencadenadores de Lambda

¿Cuál es la diferencia entre los grupos de usuarios y los grupos de identidades de Amazon Cognito?

Introducción a los grupos de usuarios

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años