MFAを有効化したCognitoユーザープールよりCLIでToken取得

はじめに

何かとサーバレス構成の認証でよく利用するCognitoで、MFAを有効化したCognitoユーザープールよりCLIでToken取得をしてみました。

目次

手順の概要

基本的には下記の認証フロー通りに実施するだけです。
https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html
一番上の図を参照

  1. ClientからInitiate Authの実行
  • 返却されたSession情報を受信
  • MFAコードを受信 (今回はSMSを設定)
  1. AuthChallengeへ応答
  • MFAコードの送信
  1. 目的のToken受信

手順

Cognito アプリクライントの設定

アプリベースの認証でユーザー名とパスワードの (SRP を使用しない) フローを有効にする (USER_PASSWORD_AUTH)

ClientからInitiate Authの実行

$ aws cognito-idp initiate-auth \
> --auth-flow USER_PASSWORD_AUTH \
> --client-id ***Cognito設定にて確認できるアプリクライントID \
> --auth-parameters \
> USERNAME=[Cognito上に作成したユーザID],PASSWORD=[Cognito上に作成したユーザPW]

下記レスポンス
{
    "ChallengeName": "SMS_MFA",
    "Session": "[次のリクエストで利用するためのSession情報]",
    "ChallengeParameters": {
        "CODE_DELIVERY_DELIVERY_MEDIUM": "SMS",
        "CODE_DELIVERY_DESTINATION": "+***MFA通知先電話番号",
        "USER_ID_FOR_SRP": "***ユーザ名が表示される"
    }
}

※Profileを利用している場合、パラメータに –profile *** として指定

AuthChallengeへ応答

$ aws cognito-idp respond-to-auth-challenge \
> --client-id ***Cognito設定にて確認できるアプリクライントID \
> --challenge-name SMS_MFA \
> --challenge-responses \
> USERNAME=[Cognito上に作成したユーザID],SMS_MFA_CODE=[SMSに通知されたCode]] \
> --session "[上記レスポンスでSessionとして返却された内容を入れ込む]"

下記レスポンス
{
    "ChallengeParameters": {},
    "AuthenticationResult": {
        "AccessToken": "***アクセストークンが表示される",
        "ExpiresIn": 3600,
        "TokenType": "Bearer",
        "RefreshToken": "***リフレッシュトークンが表示される",
        "IdToken": "***Idトークンが表示される",
        "NewDeviceMetadata": {
            "DeviceKey": "ap-northeast-1_***",
            "DeviceGroupKey": "***"
        }
    }
}

※Profileを利用している場合、パラメータに –profile *** として指定

結果確認

https://jwt.io 等でTokenがDecode出来る事を確認できました。

投稿者プロフィール

takashi
開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て
2010年よりスカイアーチネットワークスに在籍しております

機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。
個人ブログではRaspberryPiを利用したシステムやロボット作成も
実施しております。

スカイアーチネットワークスで一緒に働きましょう!

コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.

ABOUTこの記事をかいた人

開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て 2010年よりスカイアーチネットワークスに在籍しております 機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。 個人ブログではRaspberryPiを利用したシステムやロボット作成も 実施しております。 スカイアーチネットワークスで一緒に働きましょう!