Cognitoのセッションタイムアウトってどうなっているんでしょうか?
現在、「Angular×Cognito」で開発をしているのですが、どのアプリでもログイン画面ってありますよね?
このログイン画面の認証にCognitoを使っているのですが、当然セッションタイムアウトとかも考える必要があるわけです。
そこら辺の詳しいことが分からなかったので、ちょっくら調べてみました。
僕のプロフィールはこちら
Cognito認証の概要
まず、Cognitoでユーザ認証を行うと、CognitoからJWT(Json Web Token)が発行されます。
このトークンを利用して、API GatewayのAPIを叩いたりするわけです。
つまり、「このトークンを理解することがCognitoのセッション周りを理解すること」につながります。
Cognitoから発行されるトークン
Cognitoから発行されるトークンは1つではなく、すべてで3つ発行されます。
IDトークン(ID Token) | Cognito User Poolsのユーザー属性(例えばメールアドレスなど)を含めたトークンです。 ユーザーに関する情報をすべて取得したい場合はこちらを使います。 ※API Gateway はこちらを採用します。 |
---|---|
アクセストークン(AccessToken) | Cognito User Poolsの最低限のユーザー情報を含めたトークンです。 |
更新トークン(Refresh Token) | IDトークンおよびアクセストークンを更新するために利用します。 Cognito User PoolsのクライアントSDKを利用している場合は自動で更新されます。 |
トークンの有効期限
「トークンが切れる=セッションが切れる=セッションタイムアウト」と考えるなら、各トークンの有効期限を整理しておくと良さそうです。
IDトークン(ID Token) | ユーザーが認証した1時間後に有効期限切れになります。 |
---|---|
アクセストークン(AccessToken) | ユーザーが認証に成功した1時間後に有効期限切れになります。 |
更新トークン(Refresh Token) | デフォルトでは、更新トークンは、アプリのユーザーがユーザープールにサインインしてから30日後に有効期限が切れます。 ユーザープールのアプリを作成したら、アプリの更新トークンの有効期限(日)を 1~3650 の任意の値に設定できます。 |
で、いつセッションが切れる?
ユーザ認証には、基本的に「IDトークン」を使用します。
IDトークンは1時間後に有効期限切れとなりますが、クライアントSDKを使用している場合、更新トークンによって自動的にIDトークンが更新されるっぽいです。
つまり、更新トークンが有効期限切れになっていない場合、IDトークンは復活することになりますね。
ということは厳密に言うと「更新トークンが有効期限切れになった場合に、セッションは切れる。ただし、クライアントSDKを使用している場合に限る」となる。
参考サイト
■ユーザープールのトークンの使用
URL:「https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html」
まとめ
Cognitoのセッションタイムアウトについて調べてみましたが、AWS周りって難しいですね。
ちゃんと言及しているものが少ないので自分で調べるしかありません。
時間があればもっと掘り下げて調べてみます。