LoginSignup
14
7

トークン認証におけるリフレッシュトークンの存在意義とは?

Last updated at Posted at 2022-07-11

API実装でトークン認証について調べている際にリフレッシュトークン(アクセストークンの有効期限が一時間ほどなのに比べ、こちらは数か月など)の必要性が分からなかったため調べてみた。
リフレッシュトークンは有効期限が切れる際にサーバーに送信され、両トークンの再発行を行うために使用されるとのこと。
だったら初めからアクセストークンのリフレッシュトークンと同じように長くとれば良いのでは、、、と思ったのが始まり。

アクセストークンを使った認証の流れ

以下の流れ

  1. ユーザーがログインした際に、サーバー側でアクセストークンを発行
  2. ブラウザはアクセストークンを受け取り、保持
  3. ブラウザはエンドポイントにアクセスする時に、ヘッダーにアクセストークンを付与して送信
  4. サーバーはアクセストークンを受け取って、認証を行い、成功するとレスポンス
  5. アクセストークンの有効期限が切れたら、ユーザーは再びログイン
    image.png
    引用: 【Python】FastAPIでトークン認証を実装してみた

リフレッシュトークンを使用した、トークンの再取得の流れ

以下の流れ(5までは↑と同じ)

  1. ユーザーがログインした際に、サーバー側でアクセストークンを発行
  2. ブラウザはアクセストークンを受け取り、保持
  3. ブラウザはエンドポイントにアクセスする時に、ヘッダーにアクセストークンを付与して送信
  4. サーバーはアクセストークンを受け取って、認証を行い、成功するとレスポンス
  5. アクセストークンの有効期限が切れたら、ユーザーは再びログイン
  6. アクセストークンの有効期限が切れたら、ブラウザはトークン再取得のエンドポイントにリフレッシュトークンを送信
  7. サーバーはリフレッシュトークンを受け取り、ユーザーに紐付いたリフレッシュトークンと一致しているか確認し、認証に成功したらトークンを再発行

image.png

まとめ

リフレッシュトークンの目的は、セキュリティを向上すること。
各トークンの特徴として以下が挙げられる。

  • アクセストークン
    • 有効期限が短いため、盗難された場合でも限定された期間しか使用不可
    • 一方、エンドポイントにアクセスする毎にサーバーに送信されるため盗難の可能性が比較的高い
  • リフレッシュトークン
    • 有効期限が切れて両トークンの再発行をする際にのみサーバーに送信される

まとめると、何度も送信されるため盗聴される可能性の高いアクセストークンをその可能性の低いリフレッシュトークンを使用して定期的に更新するというメリデメの補い合いといった感覚。

参考文献

この記事は以下の情報を参考にして執筆しました。

14
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
7