¿Cómo puedo cambiar los atributos de un grupo de usuarios de Amazon Cognito después de crearlo?
He creado un grupo de usuarios de Amazon Cognito y ahora quiero cambiar los atributos estándar necesarios para el registro de usuarios.
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, use una función de AWS Lambda como desencadenador de la migración de usuarios para migrar los usuarios existentes al nuevo grupo de usuarios.
**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, antes de elegir Crear grupo, 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 de 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 su antiguo grupo de usuarios solo requería el correo electrónico, pero su nuevo grupo de usuarios requiere tanto el correo electrónico como el número de teléfono. 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.
Creación de una función de Lambda
Para crear una función de Lambda de migración de usuarios, utilice el editor de la consola de Lambda o cree y cargue su propio paquete de despliegue.
Importante: Este código de ejemplo no sirve para migrar a los usuarios que utilizan la autenticación multifactor (MFA) en el grupo de usuarios anterior.
Para probar las configuraciones, utilice la siguiente función de ejemplo en 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: Sustituya UserPoolId por el ID del grupo de usuarios anterior. Busque el ID en la consola de Amazon Cognito, en la página de administración del grupo de usuarios, en la pestaña Configuración general. Sustituya ClientId por el ID de cliente de la aplicación del grupo de usuarios anterior. Busque el ID de cliente de la aplicación en la consola de Amazon Cognito, en Clientes de aplicación.
Agregar un desencadenador de migración de usuarios al nuevo grupo de usuarios
En la consola de Amazon Cognito, configure la nueva función de Lambda como desencadenador de Lambda para la migración de usuarios. Para obtener más información, consulte Adding a user pool Lambda trigger.
Activación del flujo USER_PASSWORD_AUTH para la migración de usuarios
Configure el cliente de la aplicación del grupo de usuarios para utilizar el flujo de autenticación USER_PASSWORD_AUTH en el momento de la migración. Este flujo de autenticación permite que la aplicación transfiera el nombre de usuario y la contraseña del usuario a la función de Lambda. El flujo de autenticación puede entonces autenticar al usuario desde el grupo de usuarios existente.
Añada lógica a su aplicación para cambiar el flujo de autenticación predeterminado al flujo USER_PASSWORD_AUTH. Haga que la lógica cambie el flujo de autenticación para los intentos de inicio de sesión en los que el usuario exista en el grupo de usuarios anterior pero no 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 utiliza el protocolo Secure Remote Password (SRP) para autenticar a los usuarios sin necesidad de 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.
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); } });
Prueba de la configuración
Utilice la interfaz de usuario web alojada en Amazon Cognito para iniciar sesión en la aplicación y 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 de su configuración, cree un nuevo usuario.
Solucionar problemas
Si recibe un mensaje de error tal como «Exception during user migration» durante la prueba, active el registro de instrucciones 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?
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 9 meses