リフレッシュトークン

アクセストークンの有効期限切れ後に、再認証なしで新しいアクセストークンを取得するためのトークン

認証セキュリティ

リフレッシュトークンとは

リフレッシュトークンは、アクセストークンの有効期限が切れた後に、ユーザーの再ログインなしで新しいアクセストークンを取得するためのトークンである。アクセストークンは短命 (15 分〜1 時間)、リフレッシュトークンは長命 (数日〜数週間)。

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

アクセストークンとリフレッシュトークンの違いを以下にまとめる。

観点アクセストークンリフレッシュトークン
有効期限短い (15 分〜1 時間)長い (7〜30 日)
用途API へのアクセス新しいアクセストークンの取得
送信先API サーバー認証サーバーのみ
漏洩リスク短命なので影響が限定的長命なので影響が大きい

フロー

フローを図で示す。

1. ログイン → アクセストークン + リフレッシュトークンを取得
2. API 呼び出し → アクセストークンを使用
3. アクセストークンが期限切れ → 401 Unauthorized
4. リフレッシュトークンで新しいアクセストークンを取得
5. 新しいアクセストークンで API を再呼び出し

Cognito でのリフレッシュトークン

Cognito でのリフレッシュトークンのコード例を示す。

const result = await cognito.initiateAuth({
  AuthFlow: 'REFRESH_TOKEN_AUTH',
  ClientId: 'my-client-id',
  AuthParameters: {
    REFRESH_TOKEN: refreshToken,
  },
});
const newAccessToken = result.AuthenticationResult!.AccessToken;

リフレッシュトークンの保存場所

リフレッシュトークンの保存場所を以下にまとめる。

保存場所セキュリティ推奨
HttpOnly Cookie高い (JS からアクセス不可)
localStorage低い (XSS で盗まれる)
メモリ (変数)高い (ページ遷移で消える)

リフレッシュトークンローテーション

リフレッシュトークンローテーションを図で示す。

1. リフレッシュトークン A で新しいアクセストークンを取得
2. 同時に新しいリフレッシュトークン B を発行
3. リフレッシュトークン A を無効化
→ 漏洩したトークンが再利用されると検知できる

セキュリティ対策

セキュリティ対策を以下にまとめる。

対策説明
HttpOnly CookieXSS でトークンが盗まれない
ローテーション使用済みトークンを無効化
絶対有効期限30 日後に強制ログアウト
デバイスバインド発行時のデバイスでのみ使用可能

より深く学ぶには関連書籍が役立つ。

この記事は役に立ちましたか?

関連用語

関連する記事