📙

Cognitoの3種類トークンの違いは何だ?(ID、アクセス、リフレッシュ)

2022/02/06に公開

Amazon Cognitoを理解したいと思ってログイン画面を実装していると、ログイン成功時に以下の3種類のトークンを返されることに気づいた。

  • idToken
  • accessToken
  • refreshToken

これら3つの使い分けを調べたので、記事に残そうと思う。

idTokenとは

idTokenがいわゆる「トークン」であり、認証成功後に使いまわすアレである。

accessTokenとは

accessTokenはいまいちピンとこないトークン。
AWSの公式ドキュメントを調べたところ、以下のように書いてあった。

アクセストークンの目的は、ユーザープール内のユーザーのコンテキストでの API 操作を承認することです。例えば、アクセストークンを使用して、ユーザーにユーザー属性を追加、変更、または削除するアクセス権を付与することができます。
アクセストークンの使用

この説明だけを見ていると「アクセス権!つまり認可か!?」と思いがちだが早まってはいけない。今はCognitoの認証(ユーザープール)のお話をしており、cognitoにおける認可は「IDプール」のはずだからだ。

文面を見るに「自分の属性情報を操作できるトークン」ということだろう。

cognitoのユーザプール作成時に選択した・しなかったであろう、「ユーザ名」「電話番号」「ニックネーム」「メールアドレス」といった属性を操作するときにaccessTokenを使用するようだ。

アプリケーションにユーザ名変更などの機能をつけるならば、accessTokenが必要になってくると思われる。

refreshTokenとは

refreshTokenは「新たにidTokenとaccessTokenを発行できるtoken」である。

idTokenやaccessTokenの有効期限が切れた際、もう一度ログイン処理をさせるのは面倒くさい。そんな時にrefreshTokenがあれば再発行させることが可能なのだ。

…ただ、このトークンはかなり危険なのではなかろうか。
と思った矢先そうだった。OAuthもぜひ学びたいところだが、軽く調べてみるに「厳重に管理されなければならない」とのことである。

参考: Refresh Token: どのような場合に使用し、どのように JWT と相互作用するか

20230703追記

過去に自分が書いた記事の正確性が怪しいので再調査したいと思います。🙇‍♂️

Discussion