はじめに
AWS CLIでCognitoユーザーのアクセストークン/IDトークンを取得しようとしました。
しかしながら、以下の様なエラーが発生しました。
An error occurred (NotAuthorizedException) when calling the AdminInitiateAuth operation: Client ************************ is configured with secret but SECRET_HASH was not received
ここではこの事象の原因、解決策について記載したく思います。
実行しようとしていたコマンドの内容
記事を参考に以下コマンドを実行しました。[1]
aws cognito-idp admin-initiate-auth \ --user-pool-id ${userPoolId} \ --client-id ${clientId} \ --auth-flow "ADMIN_USER_PASSWORD_AUTH" \ --auth-parameters USERNAME=${userName},PASSWORD=${password}
コマンドを実行することで以下の様なパラメーターを取得できることを期待していました。
その他にもCognito用に便利なコマンドがあるので、気になった方は公式ドキュメントを確認して下さい。
[1]AWS CLI Command Reference – cognito-idp
https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/index.html#cli-aws-cognito-idp
{ "ChallengeParameters": {}, "AuthenticationResult": { "AccessToken": "*****", "ExpiresIn": 300, "TokenType": "Bearer", "RefreshToken": "*****", "IdToken": "*****" } }
エラー原因
エラー原因は「admin-initiate-auth」コマンドを実行する際に「SECRET_HASH」オプションを付与していなかったからでした。
Cognitoユーザープールのアプリケーションクライアントで「クライアントのシークレット」を作成する設定としていた場合、
「SECRET_HASH」のオプションを付与する必要があります。
クライアントのシークレットを作成する設定をしている場合には、公式ドキュメントにも記載がありますが、「SECRET_HASH」のオプションをつける必要があります。
解決策
「SECRET_HASH」のオプションをつけたコマンドは以下の様になります。
$ aws cognito-idp admin-initiate-auth \ --user-pool-id \ --client-id \ --auth-flow ADMIN_USER_PASSWORD_AUTH \ --auth-parameters "USERNAME=xxx,PASSWORD=yyy,SECRET_HASH=zzz"
まとめ
Cognitoを利用するのは初めてだったので、エラー内容を理解するのに時間がかかりました。