REST APIにおけるJWT認証
JWTとは?
JWTは「自己完結型の署名付きトークン」であり、サーバーがリクエストごとにセッションデータベースにアクセスすることなく認証を検証できます。
- クライアントは
Authorization: Bearer <access_token>を付けてAPIを呼び出します - サーバーはJWTの署名を検証し、有効期限を確認します
- 有効であればリクエストが認可されます
REST APIの実装
以下のエンドポイントにメソッドを追加します。 注:アクセストークンはステートレスに検証されます。サーバー側の状態管理が必要なのはリフレッシュトークンのみです。
/sessions
- POST —
end_user_idとpasswordを使ってアクセストークンとリフレッシュトークンを発行します - DELETE — リフレッシュトークンを無効化します
/sessions/refresh
- POST — 有効なリフレッシュトークンを使ってアクセストークンを再発行します
| アクセストークン | リフレッシュトークン | |
|---|---|---|
| 目的 | APIアクセス | ATの再発行 |
| 有効期限 | 短い(例:5〜15分) | 長い(例:数日〜数週間) |
| 保存場所 | メモリまたはHTTP-Only Cookieを推奨 | HTTP-Only Cookieを推奨 |
| サーバー状態 | ステートレス(署名検証のみ) | DBで管理(失効処理のため) |
フローチャート
ATが有効かどうかを判定するには、以下を確認します:
- 署名の検証
- 有効期限(
exp)クレーム