リフレッシュトークン

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

認証セキュリティ

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

リフレッシュトークンは、アクセストークンの有効期限が切れた後に、ユーザーの再ログインなしで新しいアクセストークンを取得するためのトークンである。アクセストークンは短命 (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 Cookie XSS でトークンが盗まれない
ローテーション 使用済みトークンを無効化
絶対有効期限 30 日後に強制ログアウト
デバイスバインド 発行時のデバイスでのみ使用可能

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

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

関連用語

関連する記事