¿Cómo confirmo automáticamente los usuarios en Amazon Cognito?

7 minutos de lectura
0

Quiero confirmar los usuarios y, a continuación, verificar sus direcciones de correo electrónico y números de teléfono automáticamente sin usar contraseñas de un solo uso (OTP).

Descripción breve

Cuando un usuario se registra en un grupo de usuarios de Amazon Cognito, normalmente tiene que verificar su dirección de correo electrónico o número de teléfono. Por lo general, esto se hace enviando una OTP a la dirección de correo electrónico o número de teléfono de un usuario para su verificación. También se puede confirmar automáticamente un usuario sin la verificación de OTP.

Estos son los pasos generales para confirmar automáticamente un usuario sin utilizar una OTP con la dirección de correo electrónico o el número de teléfono del usuario:

  • Cree una función de AWS Lambda.
  • Cree un grupo de usuarios de Amazon Cognito con un disparador de Lambda previo al registro.
  • Registre el usuario en Amazon Cognito. Verifique los atributos del usuario mediante la Consola de administración de AWS o una API de AWS.

Resolución

Siga estos pasos para confirmar automáticamente un usuario y sus atributos sin la verificación de OTP.

Crear una función de Lambda

1.    Utilice los eventos de Amazon Cognito para crear una función de Lambda que gestione el evento que crea un usuario de Amazon Cognito. El siguiente código de Python confirma el usuario y sus atributos, como la dirección de correo electrónico y el número de teléfono.

Ejemplo de código de confirmación de usuario con 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 un evento de prueba en la función de Lambda con datos relevantes para el disparador de Lambda previo al registro. El siguiente ejemplo incluye el evento de prueba para el código de Python de ejemplo del paso 1.

Ejemplo de evento de prueba de JSON:

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

Cree un grupo de usuarios de Amazon Cognito

1.    Cree un nuevo grupo de usuarios de Amazon Cognito o seleccione un grupo de usuarios existente.

2.    En el grupo de usuarios seleccionado, para agregar el disparador de Lambda previo al registro, seleccione la función de Lambda que creó.

El disparador de Lambda previo al registro se puede utilizar para agregar lógica personalizada y validar al nuevo usuario. Cuando un usuario nuevo se registra en su aplicación, Amazon Cognito pasa la información del evento a la función de Lambda. (El ejemplo de la función de Lambda se encuentra en el paso 1 de la sección “Crear una función de Lambda”). La función de Lambda devuelve el mismo objeto de evento a Amazon Cognito con cualquier cambio en la respuesta. La siguiente es la respuesta de salida del evento de prueba del paso 2 de la sección “Crear una función de Lambda”.

Ejemplo de respuesta de un evento de prueba de JSON:

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

Nota: Si un usuario nuevo se registra con un alias de número de teléfono o dirección de correo electrónico preexistente, el alias pasa al nuevo usuario. A continuación, el número de teléfono o la dirección de correo electrónico del usuario anterior se marcan como no verificados. Para evitar estos cambios, invoque la API ListUsers para mostrar los atributos de todos los usuarios del grupo de usuarios. Revise los atributos de usuario existentes y compárelos con los atributos de usuario nuevos para asegurarse de que no se produzcan cambios inesperados.

5.    Compruebe que el disparador de Lambda previo al registro esté configurado en su grupo de usuarios.

Registrar el usuario de Amazon Cognito

Regístrese como nuevo usuario mediante la interfaz de usuario alojada de Amazon Cognito o invocando la API SignUp.

Uso de la interfaz de usuario alojada de Amazon Cognito

1.    En la interfaz de usuario alojada de Amazon Cognito, regístrese como nuevo usuario. Asegúrese de proporcionar todos los atributos necesarios. A continuación, después de registrarse, accederá a una URL de devolución de llamada sin ninguna verificación.

2.    Verifique los atributos de usuario.

  • Estado de la cuenta: Enabled/CONFIRMED (Activada/CONFIRMADA)
  • email_verified: true
  • phone_number_verified: true

Mediante AWS CLI

1.    En la Interfaz de la línea de comandos de AWS (AWS CLI), cree un usuario invocando la API SignUp.

Importante: En los comandos de AWS CLI de ejemplo, sustituya todas las instancias de las cadenas de ejemplo por sus valores. (Por ejemplo, reemplace “example_client_id” por el ID de cliente).

Ejemplo del 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.    Calcule el hash secreto con el ID del cliente de la aplicación, el secreto del cliente y el nombre de usuario del usuario del grupo de usuarios de Amazon Cognito.

3.    Instale Python.

4.    Guarde el siguiente script de Python de ejemplo como archivo .py.

Importante: Sustituya los valores siguientes antes de ejecutar el script de ejemplo. En username (nombre de usuario), ingrese el nombre de usuario del usuario del grupo de usuarios. En AppClientID, ingrese el ID de cliente de la aplicación del grupo de usuarios. A continuación, en AppClientSecret, ingrese el secreto de cliente de la aplicación. Para obtener ayuda, ejecute el siguiente comando: $ python3 secret_hash.py –help.

Ejemplo de script de 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.    Utilice el siguiente comando para obtener el hash secreto calculado del script de Python.

Comando de ejemplo:

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

Un ejemplo de usuario confirmado automáticamente

1.    Para generar un hash secreto, ejecute un script de Python que utilice el nombre de usuario, el ID del cliente de la aplicación y el secreto del cliente.

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

Salida:

SecretHash: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

2.    Cree un usuario de Amazon Cognito invocando la 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'

Salida:

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

3.    Para comprobar el estado de los atributos de usuario, invoque la API AdminGetUser.

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

Salida:

{
  "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"
}

La salida final muestra que los atributos de dirección de correo electrónico y número de teléfono se han verificado. UserStatus se establece en Confirmed (Confirmado) sin ninguna verificación externa.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año