[アップデート]Cognitoユーザープールが発行する各種トークンの有効期限が細かく設定できるようになりました

2020.08.13

CX事業本部@大阪の岩田です。

本日付のアップデートでCognitoユーザープールが発行する各種トークンの有効期限が細かく設定できるようになりましたので、簡単に内容をご紹介します。

これまでとこれから

Cognitoユーザープールが発行するトークンは

  • アクセストークン
  • IDトークン
  • リフレッシュトークン

の3種類があります。

各トークンの意味合いについてはこちらのブログを参照して下さい。

今回のアップデート前後で各種トークンに指定可能な有効期限は以下のように変わります。

~ 2020/8/13 2020/8/13 ~
アクセストークン 1時間固定 5分~1日(デフォルト1時間)
IDトークン 1時間固定 5分~1日(デフォルト1時間)
リフレッシュトークン 1日~3650日 (デフォルト30日) 1時間~3650日(デフォルト30日)

※アクセストークン、IDトークンの最大有効期限を1時間とタイポしていたので修正しましたm(_ _)m

これまではアクセストークン/IDトークン漏洩時のリスクを小さくするために有効期限を1時間未満に設定するといったことができませんでしたが、今回のアップデートにより最小5分の有効期限が設定できるようになりました。

マネコンの表示はこんな感じです。

トークンの有効期限はアプリクライアントごとの設定となります。

やってみる

試しに各種トークンの有効期限を短く設定したアプリクライアントを作成して、発行されたトークンの有効期限を検証してみます。

試しにアクセストークン、IDトークンを5分に設定してみました。パパっと検証するためにALLOW_USER_PASSWORD_AUTHにチェックを入れています。

アプリクライアントが作成できたらユーザープールに適当なユーザーを登録し、AWS CLIからトークンを取得します。

$ aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH  --client-id <クライアントID> --auth-parameters "USERNAME=<ユーザー名>,PASSWORD=<パスワード>"

{
    "ChallengeParameters": {},
    "AuthenticationResult": {
        "AccessToken": "eyJraW...略",
        "ExpiresIn": 300,
        "TokenType": "Bearer",
        "RefreshToken": "eyJjd...略",
        "IdToken": "eyJraWQiOiJF...略"
    }
}

レスポンスに含まれるIDトークンとアクセストークンをjwt.ioで検証してみましょう。

アクセストークンはこちら

続いてIDトークンです。

アクセストークン、IDトークンともにiatが1597288604、expが1597288904なので、1597288904 - 1597288604 = 300で有効期限が5分に設定されていることが分かります。

まとめ

Cognitoユーザープールのアップデートについてご紹介しました。今回のアップデートにより、企業のセキュリティポリシーとして「アクセストークンやIDトークンの有効期限はxx分未満であること...」のような要件があった場合にも柔軟に対応できるようになりました。

注意点として、トークンの有効期限が短くなるとその分頻繁にトークンのリフレッシュが必要となります。トークンの有効期限を短めに設定することでCognitoのレートリミットに抵触するリスクが無いかは事前によく確認しておきましょう。

Amazon Cognito のクォータ