プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

Cognito ユーザープールのトークンと保管場所について

Cognito ユーザープール、なかなか便利そうですね。

blog.mori-soft.com

上記を元に、いろいろと試してみて、気づいたことがいくつかあったのでまとめておきます。

更新トークンの有効期限

ユーザープールで認証をした際にはトークンが3種類発行されます。

docs.aws.amazon.com

そのうちの更新トークン(リフレッシュトークン)の有効期限は、ユーザープール作成時に指定できるのですがデフォルトだと30日になります。

ユーザープールのトークンの使用 - Amazon Cognito

もし、変更したい場合は、Cognito ユーザープール のコンソールを開いて、『アプリクライアント』->『詳細を表示』とすると

f:id:junichim:20180817224001p:plain

『トークンの有効期限を更新(日)』とあるので、ここで適切な日数に変更できます。

ブラウザのストレージ

また、ユーザープールで認証した際に、これらのトークンはローカルストレージに保存されるようです。なので、明示的にログアウトせず、ブラウザを落としただけだと、更新トークンが活きていて、簡単にセッションを貼りなおせるという問題があるそうです。

qiita.com

これへの対策として、トークンをセッションストレージに保存する、というのがあるようです。

確かめてみましょう。 ブラウザ(ここでは Firefox を使いました)で一度Cognito ユーザープールを使ったアプリにログインして、ローカルストレージを見ると

f:id:junichim:20180817225836p:plain

のようにローカルストレージに各種トークンが保存されていることがわかります。 ログアウトせずに一旦ブラウザを落として、再度同じサイト(ここでは http://localhost:9000 )にアクセスすると、ログイン前なのに上記と同じトークンの値が存在しているのを確認できました(画像貼っても同じなので省略しました)。

これだと、更新トークン(デフォルトで有効期限が30日)を使えば、IDトークン、アクセストークンの再取得ができちゃいますね(処理書く必要はありますが)。

ということで、ブラウザ側でユーザープールにアクセスする際に、

morisoftsample.poolData = {
    UserPoolId: 'ap-northeast-1_xxxxxxxxxxxxxx',
    ClientId: 'yyyyyyyyyyyyyyyyyyyyyyy',
    Storage: sessionStorage
};
morisoftsample.UserPool = new AmazonCognitoIdentity.CognitoUserPool(morisoftsample.poolData);

のようにしたら、セッションストレージに保存されるとのことです。

こちらも試してみます。

f:id:junichim:20180817230406p:plain

今度はセッションストレージに格納されていることが分かります。 このままログアウトせずに、一度ブラウザを落として、再度立ち上げると、

f:id:junichim:20180817230547p:plain

のように、きれいに消えてなくなっています。

これだと少しは安心ですね。