Como faço para confirmar automaticamente os usuários no Amazon Cognito?

6 minuto de leitura
0

Quero confirmar os usuários e depois verificar seus endereços de e-mail e números de telefone automaticamente sem usar senhas de uso único (OTPs).

Breve descrição

Em geral, quando um usuário se inscreve em um grupo de usuários do Amazon Cognito, é necessário que seu endereço de e-mail ou número de telefone seja verificado. Isso geralmente é feito enviando uma OTP para o endereço de e-mail ou número de telefone de um usuário para verificação. Um usuário também pode ser confirmado automaticamente sem a verificação OTP.

Estas são as etapas de alto nível para confirmar automaticamente um usuário sem usar uma OTP com seu endereço de e-mail ou número de telefone:

  • Crie uma função do AWS Lambda.
  • Crie um grupo de usuários do Amazon Cognito com um acionador do Lambda de pré-cadastro.
  • Cadastre o usuário no Amazon Cognito. Verifique os atributos do usuário usando o Console de Gerenciamento da AWS ou uma API da AWS.

Resolução

Siga estas etapas para confirmar automaticamente um usuário e seus atributos sem a verificação OTP.

Criar uma função do Lambda

1.    Use os Eventos do Amazon Cognito para criar uma função do Lambda, que é responsável pelo evento de criação de usuário do Amazon Cognito. O código Python a seguir confirma o usuário e seus atributos, como endereço de e-mail e número de telefone.

Exemplo de código de confirmação de usuário Python:

import json

def lambda_handler(event, context):

  # Confirm the user
  event['response']['autoConfirmUser'] = True

  # Set the email as verified if it is in the request
  if 'email' in event['request']['userAttributes']:
    event['response']['autoVerifyEmail'] = True

  # Set the phone number as verified if it is in the request
  if 'phone_number' in event['request']['userAttributes']:
    event['response']['autoVerifyPhone'] = True

  # Return to Amazon Cognito
  return event

2.    Configure um evento de teste na função do Lambda com dados relevantes para o acionador do Lambda de pré-cadastro. O exemplo a seguir inclui o evento de teste do código Python de amostra da etapa 1.

Exemplo de evento de teste JSON:

{
  "request": {
    "userAttributes": {
      "email": "email@example.com",
      "phone_number": "5550100"
    }
  },
  "response": {}
}

Criar um grupo de usuários do Amazon Cognito

1.    Crie um novo grupo de usuários do Amazon Cognito ou selecione um grupo de usuários existente.

2.     No grupo de usuários selecionado, adicione o acionador do Lambda de pré-cadastro, selecionando a função do Lambda que você criou.

O acionador do Lambda de pré-cadastro pode ser usado para adicionar lógica personalizada e validar o novo usuário. Quando um novo usuário se cadastra em sua aplicação, o Amazon Cognito passa as informações do evento para a função do Lambda. (O exemplo da função do Lambda está na etapa 1 da seção Criar uma função do Lambda.) A função do Lambda retorna o mesmo objeto de evento para o Amazon Cognito com qualquer alteração na resposta. A seguir, está a resposta de saída para o evento de teste da etapa 2 da seção Criar uma função do Lambda.

Exemplo de resposta ao evento de teste JSON:

{
  "request": {
    "userAttributes": {
      "email": "email@example.com",
      "phone_number": "5550100"
    }
  },
  "response": {
    "autoConfirmUser": true,
    "autoVerifyEmail": true,
    "autoVerifyPhone": true
  }
}

Observação: se um novo usuário se inscrever com um alias de número de telefone ou endereço de e-mail preexistente, o alias será movido para o novo usuário. Em seguida, o número de telefone ou endereço de e-mail do usuário anterior será marcado como não verificado. Para evitar essas alterações, invoque a API ListUsers para listar os atributos de todos os usuários do grupo de usuários. Analise os atributos do usuário existentes e compare-os com os novos atributos do usuário para garantir que nenhuma alteração inesperada ocorra.

5.    Verifique se o acionador do Lambda de pré-cadastro está configurado em seu grupo de usuários.

Cadastrar o usuário do Amazon Cognito

Cadastre-se como um novo usuário usando a UI hospedada do Amazon Cognito ou invocando a API SignUp.

Como usar a interface de usuário hospedada pelo Amazon Cognito

1.    Na interface de usuário hospedada pelo Amazon Cognito, cadastre-se como um novo usuário. Certifique-se de fornecer todos os atributos necessários. Depois de se cadastrar, você acessa um URL de retorno de chamada sem nenhuma verificação.

2.    Verifique seus atributos de usuário.

  • Status da conta: Enabled/CONFIRMED (ativada/CONFIRMADA)
  • email_verified: true (verdadeiro)
  • phone_number_verified: true (verdadeiro)

Usar a AWS CLI

1.    Na AWS Command Line Interface (AWS CLI), crie um usuário invocando a API SignUp.

Importante: nos exemplos de comandos da AWS CLI, substitua todas as instâncias de exemplos de strings por seus valores. (Por exemplo, substitua “example_client_id” pelo seu ID de cliente.)

Exemplo do comando sign-up:

$ aws cognito-idp sign-up --client-id example_client_id --secret-hash example_secret_hash --username example_user_name --password example_password --user-attributes Name="email",Value="email@example.com" Name="phone_number",Value="5550100"

2.    Compute valores do hash secreto usando o ID do cliente da aplicação, o segredo do cliente e o nome de usuário do usuário no grupo de usuários do Amazon Cognito.

3.    Instale o Python.

4.    Salve o exemplo de script Python a seguir como um arquivo .py.

Importante: substitua os seguintes valores antes de executar o exemplo de script. Para username, insira o nome do usuário no grupo de usuários. Para AppClientId, insira o ID do cliente da aplicação do seu grupo de usuários. Em seguida, para AppClientSecret, insira o segredo do cliente da aplicação. Para obter ajuda, execute o seguinte comando: $ python3 secret_hash.py –help.

Exemplo de script Python:

import base64, hashlib, hmac, argparse

parser = argparse.ArgumentParser()
parser.add_argument("--username", required=True)
parser.add_argument("--appclientid", required=True)
parser.add_argument("--appclientsecret", required=True)
args = parser.parse_args()

message = bytes(args.username + args.appclientid, 'utf-8')
key = bytes(args.appclientsecret, 'utf-8')
secret_hash = base64.b64encode(hmac.new(key, message, digestmod=hashlib.sha256).digest()).decode()

print('SecretHash: {}'.format(secret_hash))

5.    Use o comando a seguir para obter o hash secreto computado do script Python.

Exemplo de comando:

$ python3 secret_hash.py --username example_user_name --appclientid example_app_client_id --appclientsecret example_app_client_secret

Um exemplo de usuário confirmado automaticamente

1.    Gere um hash secreto executando um script Python que usa o nome do usuário, o ID do cliente da aplicação e o segredo do cliente.

$ python3 secret_hash.py --username example_user_name --appclientid 11122223333 --appclientsecret je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY

Saída:

SecretHash: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

2.    Crie um usuário do Amazon Cognito invocando a API SignUp.

$ aws cognito-idp sign-up --client-id 7morqrabcdEXAMPLE_ID --secret-hash wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY = --username example_user_name --password Password1@ --user-attributes Name='email',Value='email@example.com' Name='phone_number',Value='5550100'

Saída:

{
  "UserConfirmed": true,
  "UserSub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}

3.    Para verificar o status dos atributos do usuário, invoque a API AdminGetUser.

$ aws cognito-idp admin-get-user --user-pool-id us-east-1_I 111122223333 --username example_user_name

Saída:

{
  "Username": "example_user_name",
  "UserAttributes": [
    {
      "Name": "sub",
      "Value": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
    },
    {
      "Name": "email_verified",
      "Value": "true"
    },
    {
      "Name": "phone_number_verified",
      "Value": "true"
    },
    {
      "Name": "phone_number",
      "Value": "5550100"
    },
    {
      "Name": "email",
      "Value": "email@example.com"
    }
  ],
  "UserCreateDate": "2022-12-12T11:54:12.988000+00:00",
  "UserLastModifiedDate": "2022-12-12T11:54:12.988000+00:00",
  "Enabled": true,
  "UserStatus": "CONFIRMED"
}

A saída final mostra que os atributos do endereço de e-mail e do número de telefone foram verificados. O UserStatus é definido como Confirmed (Confirmado) sem nenhuma verificação externa.


AWS OFICIAL
AWS OFICIALAtualizada há um ano