Amazon Cognito에서 사용자를 자동으로 확인하려면 어떻게 해야 합니까?

5분 분량
0

사용자를 확인한 다음 일회용 비밀번호(OTP)를 사용하지 않고 자동으로 사용자의 이메일 주소 및 전화번호를 인증하고 싶습니다.

간략한 설명

사용자가 Amazon Cognito 사용자 풀에 가입할 때는 일반적으로 이메일 주소 또는 전화번호를 인증받아야 합니다. 인증을 위해서 일반적으로 사용자의 이메일 주소 또는 전화번호로 OTP를 전송하여 수행합니다. OTP 인증 없이 사용자를 자동으로 확인할 수도 있습니다.

다음은 사용자의 이메일 주소 또는 전화번호를 포함하는 OTP를 사용하지 않고 사용자를 자동으로 확인하는 상위 단계입니다.

  • AWS Lambda 함수를 생성합니다.
  • 사전 가입 Lambda 트리거를 사용하여 Amazon Cognito 사용자 풀을 생성합니다.
  • 사용자를 Amazon Cognito에 등록합니다. AWS Management Console 또는 AWS API를 사용하여 사용자 속성을 확인합니다.

해결 방법

다음 단계에 따라 OTP 인증 없이 사용자 및 해당 속성을 자동으로 확인합니다.

Lambda 함수 생성

1.    Amazon Cognito 사용자를 생성하는 이벤트를 처리하는 Lambda 함수를 생성하기 위해 Amazon Cognito 이벤트를 사용합니다. 다음 Python 코드는 이메일 주소 및 전화번호와 같은 사용자 및 해당 속성을 확인합니다.

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.    Lambda 함수에서 테스트 이벤트를 설정할 때 사전 가입 Lambda 트리거 관련 데이터를 사용합니다. 다음 예제는 1단계의 샘플 Python 코드에 대한 테스트 이벤트를 포함합니다.

JSON 테스트 이벤트 예시:

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

Amazon Cognito 사용자 풀 생성

1.    새 Amazon Cognito 사용자 풀을 생성하거나 기존 사용자 풀을 선택합니다.

2.    생성한 Lambda 함수를 선택하여 선택한 사용자 풀에서 사전 가입 Lambda 트리거를 추가합니다.

사전 가입 Lambda 트리거를 사용하여 사용자 지정 로직을 추가하고 새 사용자를 검증할 수 있습니다. 새 사용자가 앱에 가입하면 Amazon Cognito는 해당 이벤트 정보를 Lambda 함수에 전달합니다. (Lambda 함수 예시는 Lambda 함수 생성 섹션의 1단계에 나와 있습니다.) Lambda 함수는 응답의 모든 변경 사항과 함께 동일한 이벤트 객체를 Amazon Cognito에 반환합니다. 다음은 Lambda 함수 생성 섹션 2단계의 테스트 이벤트에 대한 출력 응답입니다.

JSON 테스트 이벤트 응답 예제:

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

참고: 새 사용자가 기존 전화번호 또는 이메일 주소 별칭으로 가입하면 별칭이 새 사용자에게 이동합니다. 그러면 이전 사용자의 전화번호 또는 이메일 주소가 미확인으로 표시됩니다. 이러한 변경을 방지하려면 ListUsers API를 호출하여 사용자 풀의 모든 사용자에 대한 속성을 나열합니다. 기존 사용자 특성을 검토하고 새 사용자 특성과 비교하여 예상치 못한 변경이 발생하지 않도록 합니다.

5.    사전 가입 Lambda 트리거가 사용자 풀에 구성되어 있는지 확인합니다.

Amazon Cognito 사용자 등록

Amazon Cognito에서 호스팅한 UI를 사용하거나 가입 API를 호출하여 새 사용자로 가입합니다.

Amazon Cognito에서 호스팅하는 UI 사용

1.    Amazon Cognito 호스팅 UI에서 새 사용자로 등록합니다. 필수 속성을 모두 입력해야 합니다. 그런 다음 가입한 후 인증 없이 콜백 URL로 이동합니다.

2.    사용자 특성을 확인합니다.

  • 계정 상태: 활성화됨/확인됨
  • email_verified: 참
  • phone_number_verified: 참

AWS CLI 사용

1.    AWS Command Line Interface(AWS CLI)에서 SignUp API를 호출하여 사용자를 생성합니다.

중요: 예제 AWS CLI 명령에서 예제 문자열의 모든 인스턴스를 사용자 값으로 변경합니다. (예를 들어,**"example_client_id"**를 사용자의 클라이언트 ID로 변경합니다.)

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.    Amazon Cognito 사용자 풀에 앱 클라이언트 ID, 클라이언트 보안 암호 및 사용자의 사용자 이름을 사용하여 암호 해시를 계산합니다.

3.    Python을 설치합니다.

4.    다음 예제 Python 스크립트를 .py 파일로 저장합니다.

중요: 예제 스크립트를 실행하기 전에 다음 값을 바꿉니다. 사용자 이름에 사용자 풀에 있는 사용자의 사용자 이름을 입력합니다. AppClientId에 사용자 풀의 앱 클라이언트 ID를 입력합니다. 그런 다음 AppClientSecret에 앱 클라이언트 암호를 입력합니다. 도움이 필요하면 $ python3 secret_hash.py –help 명령을 실행합니다.

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.    다음 명령을 사용하여 Python 스크립트에서 계산한 암호 해시를 가져옵니다.

명령 예:

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

자동으로 확인되는 사용자 예제

1.    사용자 이름, 앱 클라이언트 ID 및 클라이언트 암호를 사용하는 Python 스크립트를 실행하여 비밀 해시를 생성합니다.

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

출력:

SecretHash: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

2.    가입 API를 호출하여 Amazon Cognito 사용자를 생성합니다.

$ 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'

출력:

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

3.    사용자 속성의 상태를 확인하려면 AdminGetUser API를 호출합니다.

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

출력:

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

최종 출력은 이메일 주소 및 전화번호 속성이 확인되었음을 보여 줍니다. UserStatus는 외부 확인 없이 확인됨으로 설정됩니다.


AWS 공식
AWS 공식업데이트됨 일 년 전