Skip to content
Latchkey

リフレッシュトークンとは?再ログインなしでアクセスを更新する

リフレッシュトークンとは、ユーザーに再ログインを強いることなく、アプリケーションが新しく短命なアクセストークンを取得できるようにする、長命の認証情報です。

リフレッシュトークンは OAuth における緊張関係を解決します。アクセストークンは漏洩時の被害を抑えるために短命であるべきですが、数分ごとにユーザーへログインを強いるのは苦痛です。リフレッシュトークンはそのギャップを埋め、バックグラウンドで静かに新しいアクセストークンを発行します。長命であるがゆえに、価値の高い標的でもあります。

アクセストークンとリフレッシュトークン

アクセストークンは API を呼び出すために提示するものであり、すぐに期限切れになります。リフレッシュトークンはクライアントが秘密裏に保持し、古いものが期限切れになったときに認可サーバーで新しいアクセストークンと交換されます。両者はライフタイムも用途も大きく異なります。

リフレッシュフローの仕組み

  • クライアントはログイン時にアクセストークンとリフレッシュトークンを取得します。
  • アクセストークンを期限切れになるまで使用します。
  • リフレッシュトークンを送信して新しいアクセストークンを取得します。ユーザーへの確認は不要です。

なぜこの設計がより安全なのか

短命なアクセストークンは、漏洩したトークンが有用である時間枠を限定します。リフレッシュトークンは API トラフィックの外に留まり、認可サーバーでのみ交換されるため、それが更新するアクセストークンよりもはるかに露出頻度が少なくなります。

リフレッシュトークンを保護する

長期間にわたってアクセストークンを発行できるため、盗まれたリフレッシュトークンは深刻です。優れたシステムはそれを安全に保管し、クライアントに紐付け、ローテーションを使用します。使用のたびに新しいリフレッシュトークンを発行して古いものを無効化するため、盗難が検出可能になります。

CI/CD におけるリフレッシュトークン

CI プラットフォームと他のサービスの間の長時間稼働する統合は、接続を維持するためにリフレッシュトークンに依存することがあります。それらを価値の高いシークレットとして扱い、保管時に暗号化し、アクセスを制限し、統合が削除されたら速やかに失効させましょう。

パイプラインは常設トークンを持たないことを好む

job ごとのパイプラインアクセスでは、現代的なパターンは OIDC 経由で認証情報をその場で発行することにより、保管済みリフレッシュトークンを完全に回避します。各 job は clean な状態で始まり、ephemeral な runner 上で clean な状態で終わるため、保護すべき長命なものが何もありません。

重要なポイント

  • リフレッシュトークンは再ログインなしで新しい短命なアクセストークンを発行します。
  • 長命かつ価値が高いため、安全に保管し、理想的にはローテーションすべきです。
  • job ごとのパイプラインアクセスは、OIDC 経由で認証情報を発行することで保管済みトークンを不要にできます。

関連ガイド