トークン認証において、リフレッシュトークンの存在意義について
認証の学習やらを進めてると、
アクセストークンやらリフレッシュトークンという単語がよく出てきます。
アクセストークンの有効期限が1時間くらいと短いので、
切れた際にリフレッシュトークンを送信して
両トークンの再発行に使用されます。
じゃあ最初からアクセストークンの有効期限長く設定すれば???
どゆこと?意味あるか?
とこんなところから気になり学習しました。
結論から言うと意味あります
アクセストークン認証の流れ
- ユーザーがログインした際に、アプリケーションがアクセストークンを発行
- アクセストークンを保持
- 都度、エンドポイントにアクセスする際にはリクエストヘッダにアクセストークンをつけて送信
- アプリケーションはアクセストークンを認証して、成功すればレスポンス
- アクセストークンの有効期限が切れれば、再びログイン
リフレッシュトークンを使用した場合
- ユーザーがログインした際に、アプリケーションがアクセストークンを発行
- アクセストークンを保持
- 都度、エンドポイントにアクセスする際にはリクエストヘッダにアクセストークンをつけて送信
- アプリケーションはアクセストークンを認証して、成功すればレスポンス
- アクセストークンの有効期限が切れれば、再びログイン(ID,パスワード)ではなく
- トークン再取得のエンドポイントにリフレッシュトークンを送信
- アプリケーションはリフレッシュトークンを受け取り、ユーザーに紐付いたリフレッシュトークンと一致しているか確認し、認証に成功したらトークンを再発行
まとめ
存在意義は、セキュリティを向上することにあります。
アクセストークンの特徴
- 有効期限が短いため、盗難された場合でも限定された期間しか使用不可
- アクセスする都度、サーバーに送信されるため盗難の可能性が比較的高い
リフレッシュトークンの特徴
- 有効期限が切れて両トークンの再発行をする際にのみサーバーに送信される
- 認可サーバーのみが保持するのでアクセストークンより盗難の可能性は低い
まとめると、何度も送信されるため盗聴される可能性の高いアクセストークンを、
その可能性の低いリフレッシュトークンを使用して定期的に更新します。