Whats'?
AWS CLI(v2)で、Amazon Cognitoからリフレッシュトークンを使ってアクセストークン、IDトークンを再取得するコマンドをメモ、ということで。
認証のコマンド例はよく見つかるのですが、こちらはなかなか見当たらないな、と思いまして。
--auth-flow REFRESH_TOKEN_AUTH
ヒントは、こちらに書かれています。
ユーザープール API により新しい ID とアクセストークンを取得する際に、更新トークンを使用するには、API オペレーションの AdminInitiateAuth または InitiateAuth を使用します。AuthFlow パラメータの REFRESH_TOKEN_AUTH を渡します。認証パラメータの AuthParameters は、キーが "REFRESH_TOKEN" であり、値が実際の更新トークンであるキーバリューマップです。
AWS CLI v2のcognito-idp
コマンド、admin-initiate-auth
サブコマンドを使用することになります。
--auth-flow
にはREFRESH_TOKEN_AUTH
を指定し、--auth-parameters
としてREFRESH_TOKEN
にリフレッシュトークンを指定すればよい、となりますね。
環境
確認環境はこちら。
$ aws --version
aws-cli/2.13.0 Python/3.11.4 Linux/5.15.0-76-generic exe/x86_64.ubuntu.22 prompt/off
確認
以下のコマンドを実行します。
$ aws cognito-idp admin-initiate-auth --user-pool-id [ユーザープールid] --client-id [クライアントID] --auth-flow REFRESH_TOKEN_AUTH --auth-parameters REFRESH_TOKEN=[リフレッシュトークン] --query 'AuthenticationResult.IdToken' --output text
実行結果はこちら。
{
"ChallengeParameters": {},
"AuthenticationResult": {
"AccessToken": "[アクセストークン]",
"ExpiresIn": [有効期限],
"TokenType": "[トークンタイプ]",
"IdToken": "[IDトークン]"
}
}
特定の項目だけ抽出する場合。たとえば、--query 'AuthenticationResult.IdToken'
。
$ aws cognito-idp admin-initiate-auth --user-pool-id [ユーザープールid] --client-id [クライアントID] --auth-flow REFRESH_TOKEN_AUTH --auth-parameters REFRESH_TOKEN=[リフレッシュトークン] --query 'AuthenticationResult.IdToken'
変数に格納したい場合。--output text
で。
$ ID_TOKEN=$(aws cognito-idp admin-initiate-auth --user-pool-id [ユーザープールid] --client-id [クライアントID] --auth-flow REFRESH_TOKEN_AUTH --auth-parameters REFRESH_TOKEN=[リフレッシュトークン] --query 'AuthenticationResult.IdToken' --output text)