aws cliを用いてcognitoのAccessTokenを取得する方法

2021/03/17に公開

必要な変数

  • USER_POOL_ID
  • CLIENT_ID
  • EMAIL (ユーザのメールアドレス)
  • PASSWORD (ユーザのパスワード)

通常の場合

TOKEN=$(aws cognito-idp admin-initiate-auth \
  --user-pool-id ${USER_POOL_ID} \
  --client-id ${CLIENT_ID} \
  --auth-flow ADMIN_NO_SRP_AUTH \
  --auth-parameters "USERNAME=${EMAIL},PASSWORD=${PASSWORD}" \
  --query "AuthenticationResult.AccessToken" | sed "s/\"//g")
echo ${TOKEN}

MFAが有効になっている場合

上記の変数に加え USER_SUB が追加で必要になる。

SESSION=$(aws cognito-idp admin-initiate-auth \
  --user-pool-id ${USER_POOL_ID} \
  --client-id ${CLIENT_ID} \
  --auth-flow ADMIN_NO_SRP_AUTH \
  --auth-parameters "USERNAME=${EMAIL},PASSWORD=${PASSWORD}" \
  --query "Session" | sed "s/\"//g")

# Note: このタイミングでSMSが送られる。送られない場合はSNSの上限に達した可能性がある。

# コードの入力
echo -n Input Code: 
read code
echo code is ${code}

TOKEN=$(aws cognito-idp respond-to-auth-challenge \
  --client-id ${CLIENT_ID} \
  --challenge-name SMS_MFA \
  --challenge-responses \
  "USERNAME=${USER_SUB},SMS_MFA_CODE=${code}" \
  --session ${SESSION} \
  --query "AuthenticationResult.AccessToken" | sed "s/\"//g")
echo ${TOKEN}

Discussion