Como faço para alterar os atributos de um grupo de usuários do Amazon Cognito após sua criação?
Eu criei um grupo de usuários do Amazon Cognito e agora quero alterar os atributos padrão necessários para o registro de usuários.
Breve descrição
Não é possível alterar os atributos padrão do grupo de usuários após a sua criação. Em vez disso, crie um novo grupo de usuários com os atributos que você deseja exigir para o registro do usuário. Em seguida, migre os usuários existentes para o novo grupo de usuários usando uma função do AWS Lambda como gatilho da migração de usuários.
Observação: é possível adicionar atributos personalizados a um grupo de usuários existente, mas esses atributos não são necessários para o registro do usuário.
Resolução
Configurar um novo grupo de usuários com atributos diferentes
Crie um novo grupo de usuários. Então, antes de escolher Criar grupo, edite os atributos padrão de acordo com sua preferência.
Importante: se você especificar novos atributos obrigatórios no grupo de usuários, deverá criar sua função do Lambda para fornecer esses novos atributos ao novo grupo de usuários. Se você não criar a função para fornecer os novos atributos, a autenticação falhará durante a migração do usuário. Por exemplo, suponha que seu grupo de usuários antigo exigisse apenas e-mail, mas seu novo grupo de usuários exigisse e-mail e número de telefone. Nesse caso, você deve passar valores de atributo de número de telefone para seu novo grupo de usuários para autenticar os usuários com êxito.
Criar uma função do Lambda
Para criar uma função do Lambda de migração de usuário, use o editor do console Lambda ou crie e faça o upload de seu próprio pacote de implantação.
Importante: esse código de exemplo não funcionará para migrar usuários que usam autenticação multifator (MFA) no antigo grupo de usuários.
Para testar suas configurações, use o exemplo de função a seguir em 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')
Observação: substitua UserPoolId pelo ID do grupo de usuários antigo. O ID pode ser encontrado no console do Amazon Cognito, na página de gerenciamento do grupo de usuários, na guia Configurações gerais. Substitua o ClientId pelo ID do cliente da aplicação do antigo grupo de usuários. Encontre o ID do cliente da aplicação no console do Amazon Cognito em Clientes da aplicação.
Adicionar um gatilho de migração de usuário ao novo grupo de usuários
No console do Amazon Cognito, defina sua nova função do Lambda como um gatilho do Lambda de migração de usuários. Para mais informações, consulte Adicionar um gatilho do Lambda do grupo de usuários.
Ative o fluxo USER_PASSWORD_AUTH para a migração de usuários
Configure seu cliente de aplicação de grupo de usuários para usar o fluxo de autenticação USER_PASSWORD_AUTH no momento da migração. Esse fluxo de autenticação permite que sua aplicação passe o nome de usuário e a senha do usuário para a função do Lambda. O fluxo de autenticação pode então autenticar o usuário a partir do grupo de usuários existente.
Adicione lógica à sua aplicação para alterar o fluxo de autenticação padrão para o fluxo USER_PASSWORD_AUTH. Faça com que a lógica altere o fluxo de autenticação para tentativas de login em que o usuário exista no grupo de usuários antigo, mas não no novo grupo de usuários.
Por exemplo, se sua aplicação usa JavaScript, especifique cognitoUser.setAuthenticationFlowType como USER_PASSWORD_AUTH.
Observação: depois que seus usuários forem migrados, é uma prática recomendada alterar o fluxo de autenticação da sua aplicação para USER_SRP_AUTH. Esse fluxo usa o protocolo Secure Remote Password (SRP) para autenticar usuários sem a necessidade de enviar senhas pela rede. Esse fluxo também oferece benefícios de segurança em relação ao fluxo 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); } });
Testar a configuração
Faça login na sua aplicação usando a interface web hospedada pelo Amazon Cognito para testar o fluxo de autenticação. O usuário com o qual você faz login é autenticado com o novo grupo de usuários e depois migrado.
Observação: se você não tiver uma conta de usuário com a qual possa fazer login para testar suas configurações, crie um novo usuário.
Solucionar problemas
Se você receber uma mensagem de erro durante o teste, como “Exception during user migration”, ative as instruções de logging do Lambda. Isso registra os parâmetros de um gatilho do Lambda de migração do usuário para os Amazon CloudWatch Logs. Reproduza o erro e, em seguida, revise os logs em busca de problemas com os parâmetros ou erros de sintaxe no gatilho do Lambda de migração do usuário.
Informações relacionadas
Personalizar fluxos de trabalho do grupo de usuários com gatilhos do Lambda
Qual é a diferença entre grupos de usuários e bancos de identidades do Amazon Cognito?
- Tags
- Amazon Cognito
- Idioma
- Português
