Como faço para alterar os atributos de um grupo de usuários do Amazon Cognito após sua criação?

6 minuto de leitura
0

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. Como faço para alterar os atributos?

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 acionador da migração de usuários.

Observação: você pode 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. Em seguida, durante a configuração (antes de escolher Criar pool no final), 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 Lambda para fornecer esses novos atributos ao novo grupo de usuários. Caso contrário, a autenticação falhará durante a migração do usuário. Por exemplo, digamos que você precisou apenas de **e-mail ** em seu grupo de usuários antigo, mas agora precisa de **e-mail ** e número de telefone no novo. 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

Crie uma função do Lambda de migração de usuários usando o editor do console do Lambda ou criando e carregando seu próprio pacote de implantação.

Veja abaixo um exemplo de função em Python que você pode usar para testar:

Observação: para UserPooLid, substitua o valor do exemplo 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 General settings (Configurações gerais). Para ** ClientId**, substitua o valor de exemplo pelo ID do cliente do aplicativo do antigo grupo de usuários. Encontre também o ID do cliente do aplicativo no console do Amazon Cognito. Em General settings, escolha App clients (Clientes do aplicativo).

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.

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

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 aplicativo de grupo de usuários para usar o fluxo de autenticação USER_PASSWORD_AUTH no momento da migração. Isso permite que seu aplicativo passe o nome de usuário e a senha do usuário para a função Lambda e depois os autentique no grupo de usuários existente.

Adicione lógica ao seu aplicativo para alterar o fluxo de autenticação padrão para USER_PASSWORD_AUTH para tentativas de login em que o usuário existe no grupo de usuários antigo e não existe no novo grupo de usuários.

Por exemplo, se seu aplicativo 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 do seu aplicativo para USER_SRP_AUTH. Esse fluxo autentica usuários usando o protocolo Secure Remote Password (SRP) sem enviar senhas pela rede. Esse fluxo também oferece benefícios de segurança em relação ao fluxo USER_PASSWORD_AUTH. Para mais informações, consulte Fluxo de autenticação de migração de usuários e Autenticação com um grupo de usuários.

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 mais informações, consulte Migrar o gatilho de usuário do Lambda.

Testar a configuração

Faça login no seu aplicativo 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 para fazer o login de teste, crie um novo usuário.

Resolução de problemas

Se você receber uma mensagem de erro como “Exceção durante a migração do usuário” durante o teste, habilite as instruções de registro do Lambda. Isso registra os parâmetros de um gatilho do Lambda de migração do usuário para os logs do Amazon CloudWatch.

Reproduza o erro e, em seguida, revise os registros 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 identidade do Amazon Cognito?

Introdução aos grupos de usuários

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos