Amazon Cognito 사용자 풀 API에서 발생한 "Unable to verify secret hash for client <client-id>" 오류를 해결하려면 어떻게 해야 합니까?

3분 분량
0

API 쿼리 인수에 비밀 해시가 제공되지 않은 경우 Amazon Cognito는 "Unable to verify secret hash for client <client-id>" 오류를 반환합니다. 이 오류를 해결하려면 어떻게 해야 하나요?

간략한 설명

사용자 풀 앱 클라이언트가 사용자 풀의 클라이언트 암호로 구성된 경우 API의 쿼리 인수에 SecretHash 값이 필요합니다. API 쿼리 인수에 비밀 해시가 제공되지 않은 경우, Amazon Cognito는 Unable to verify secret hash for client <client-id> 오류를 반환합니다.

다음 예는 SecretHash 값을 생성하고 이를 InitiateAuth 또는 ForgotPassword API 직접 호출에 포함하는 방법을 보여줍니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

SecretHash 값 생성

SecretHash 값 계산하기의 지침을 따르세요. 앱 클라이언트 ID, 앱 클라이언트 암호 및 Amazon Cognito 사용자 풀에 있는 사용자의 사용자 이름이 필요합니다.

-또는-

프로세스를 자동화하려면 다음과 같이 하세요.

1.    아직 설치하지 않았다면 Python 을 설치하세요.

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

import sys
import hmac, hashlib, base64

username = sys.argv[1]
app_client_id = sys.argv[2]
key = sys.argv[3]
message = bytes(sys.argv[1]+sys.argv[2],'utf-8')
key = bytes(sys.argv[3],'utf-8')
secret_hash = base64.b64encode(hmac.new(key, message, digestmod=hashlib.sha256).digest()).decode()

print("SECRET HASH:",secret_hash)

참고: 예제 스크립트를 실행하기 전에 다음 값을 바꾸세요. 사용자 이름에 사용자 풀에 있는 사용자의 사용자 이름을 입력합니다. app_client_id에 사용자 풀의 앱 클라이언트 ID를 입력합니다. 에 앱 클라이언트의 암호를 입력합니다.

3.    다음 명령을 실행하여 스크립트를 실행합니다.

python3 secret_hash.py <username> <app_client_id> <app_client_secret>

참고: 명령을 실행하기 전에 다음 값을 바꾸세요. Python 3.0 이전 버전의 Python을 실행 중인 경우, python3python으로 바꾸세요. secret_hash.py에 예제 스크립트의 파일 이름을 입력합니다. 사용자 이름에 사용자 풀 사용자 이름을 입력합니다. app_client_id에 앱 클라이언트 ID를 입력합니다. app_client_secret에 앱 클라이언트의 암호를 입력합니다.

명령 응답은 SecretHash 값을 반환합니다.

API 직접 호출에 SecretHash 값을 포함하기

참고: 앱 클라이언트가 앱 클라이언트 암호로 구성되지 않은 경우 Amazon Cognito API 직접 호출에는 SecretHash 값이 필요하지 않습니다. 자세한 내용을 보려면 사용자 풀 앱 클라이언트 구성을 참조하세요.

API 직접 호출의 쿼리 문자열 파라미터에 생성한 SecretHash 값을 SECRET_HASH 파라미터로 추가합니다.

SECRET_HASH 파라미터를 포함하는 InitiateAuth API 직접 호출 예시

$ aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=<username>,PASSWORD=<password>,SECRET_HASH=<secret_hash> --client-id <client-id>

InitiateAuth API 호출 응답 예시

{
    "ChallengeParameters": {},

    "AuthenticationResult": {
        "AccessToken": "<HIDDEN>",
        "ExpiresIn": 3600,
        "TokenType":
    "Bearer",

        "RefreshToken": "<HIDDEN>",
        "IdToken": "<HIDDEN>"
    }
}

참고: USER_PASSWORD_AUTH 인증 흐름을 사용하는 경우, ALLOW_USER_PASSWORD_AUTH가 켜져 있는지 확인합니다.

SECRET_HASH 파라미터가 포함된 ForgotPassword API 직접 호출 예시

$ aws cognito-idp forgot-password --client-id <client-id> --username <username> --secret-hash <secret-hash>

ForgotPassword API 직접 호출 응답의 예

{
    "CodeDeliveryDetails": {
        "Destination": "+***********",
        "DeliveryMedium": "SMS",
        "AttributeName": "phone_number"
    }
}

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