Amazon Cognito 사용자 풀 API에서 “<client-id> 클라이언트의 보안 암호 해시를 확인할 수 없습니다.” 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 4월 5일

Amazon Cognito 사용자 풀 API를 호출하려고하면 “<client-id> 클라이언트의 보안 암호 해시를 확인할 수 없습니다.” 오류가 발생합니다. 이 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

사용자 풀 앱 클라이언트가 사용자 풀에 클라이언트 보안 암호가 있는 상태로 구성된 경우 API의 쿼리 인수에 SecretHash 값이 필요합니다. API 쿼리 인수에 보안 암호 해시가 제공되지 않으면 Amazon Cognito는 [<client-id> 클라이언트의 보안 암호 해시를 확인할 수 없습니다.(Unable to verify secret hash for client <client-id>)]라는 오류를 반환합니다.

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

해결 방법

참고: AWS 명령줄 인터페이스(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

SecretHash 값을 생성하려면

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

-또는-

프로세스를 자동화하려면 다음을 수행합니다.

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)

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

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

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

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

명령 응답에 SecretHash 값이 반환됩니다.

API 호출에 SecretHash 값을 포함하려면

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

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

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

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?