2 つのトークンは、直接的な対立を解決するために存在します: access token はすべてのリクエストで送信されなければならない (そのため大きく露出する) 一方で、頻繁なログインを強いることなく長く続くセッションも望まれます。1 つのトークンで両方を安全に得ることはできません — そこで役割を分割します。
Authorization ヘッダーで送信されます。絶えず送信されるため漏洩の可能性が高く、短く保つことで盗まれてもほぼ即座に失効します。Login ──▶ access (15m) + refresh (30d)
すべての API 呼び出し ──▶ access を送信
Access 失効 ──▶ refresh を送信 ──▶ 新しい access (+ ローテーションされた refresh)
| 1 つの長命な access token | Access + refresh | |
|---|---|---|
| 露出 | すべてのリクエストで送信、長く生きる → 大きな窃取の窓 | Access は短命; refresh はめったに送信されない |
| 失効 | 困難 (stateless な JWT は発行取り消しできない) | refresh token を失効; access は数分以内に消滅 |
| UX | 短いと頻繁に再ログイン | 認証情報を再入力せずログイン状態を維持 |
| 漏洩の影響範囲 | 大きい | 小さい (access はすぐ失効) |
httpOnly cookie に保存され、XSS の手の届かないところに置かれます。これは標準的なモダン認証設計であり、面接官がこれを尋ねるのは、あなたが どうやって だけでなく なぜ を理解しているかを見るためです。鍵となる洞察はトレードオフです: ステートレス性と短い露出 (access) 対 長いセッションと失効可能性 (refresh)。これを誤ると — 長命な access token、ローテーションなし、localStorage に保存された refresh — 1 つの漏洩トークンが長命なアカウント侵害に変わります。この分割と各トークンが何をもたらすかを説明できることこそ、セキュリティを意識したエンジニアに期待されることです。
ジュニアからシニアまで、詳細な回答付きのIT面接質問ライブラリ。
寄付する