Ao usar o AWS re:Post, você concorda com os AWS re:Post Termos de uso

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.

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. 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 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 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 guiaConfigurações gerais. Substitua o ClientID pelo ID do cliente do aplicativo do grupo de usuários antigo. Encontre o ID do cliente do aplicativo no console do Amazon Cognito em Clientes do aplicativo.

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. Esse fluxo de autenticação permite que seu aplicativo passe o nome de usuário e a senha do usuário para a função Lambda. O fluxo de autenticação pode então autenticar o usuário a partir do grupo de usuários existente.

Adicione lógica ao seu aplicativo 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 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 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 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 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 “Exceção durante a migração do usuário”, 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 logs do Amazon CloudWatch. 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 identidade do Amazon Cognito?

Grupos de usuários

AWS OFICIAL
AWS OFICIALAtualizada há 7 meses