ALB で Cognito ユーザープール認証を使う構成で 1 週間以上ログイン状態を維持できません

2021.03.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

Application Load Balancer(ALB)でユーザー認証に Cognito ユーザープールを使用しています。

Cognito ユーザープールのアプリクライアントの設定では、ID トークン・アクセストークンの有効期限を 10 日としましたが、1 週間で再ログインが求められます。

ALB のユーザー認証に Cognito を使用する構成で、1 週間以上ログイン状態を維持することはできますか?

どう対応すればいいの?

上記の構成では 1 週間以上ログイン状態を維持することはできません。

ALB がログイン状態を維持するにはセッションが必要です。しかしながら、ALB のセッションタイムアウト設定は、最大で 604,800 秒(1 週間)であるため、1 週間経過すると再ログインを求められる挙動になります。(2021/03/15 時点)

ALB のセッションタイムアウト設定を 604,800 から 1 秒でも長く設定すると、以下のようにバリデーションエラーが表示されます。

HTTPS デフォルトリスナー追加・変更時

HTTPS リスナールール変更時

よって、1 週間以上ログイン状態を維持したい要件があれば、ALB のユーザー認証は利用せず、別途 Cognito ユーザープール認証の仕組みを設けることを検討してください。

たとえば以下のような方法が考えられます。

  • アプリ側でトークンを検証する
  • バックエンドサーバーの前段に API Gateway を配置し Cognito ユーザープールと連携させる

参考資料

SessionTimeout
The maximum duration of the authentication session, in seconds. The default is 604800 seconds (7 days).
Type: Long
Required: No