セッション認証とトークン認証は、何が違いますか。
セッションはサーバー側に状態を持ち、ブラウザは Cookie でIDだけを運びます。トークンはクライアントが持ちヘッダで送ります。Cookie は自動送信されるため CSRF 対策が要ります。
面接官が見ているのは前提の補強。
これは「画面のある一般的な Web アプリで、認証の実装として妥当なのはどれですか。」への追撃質問です。
よくある答えと、面談でどう見られるか
- セッションは状態をサーバーが持ち Cookie で ID を運ぶ。トークンはクライアントが持ちヘッダで送る
その通りです。Cookie は自動送信されるので CSRF 対策が要り、手でヘッダに載せるトークンでは基本的に不要になります。 - セッションの方が安全で、トークンは安全性が低い
優劣ではなく用途の違いです。どちらも正しく使えば安全です。 - トークン認証では CSRF 対策が必須になる
逆です。自動送信されないぶん、基本的に不要になります。 - セッションはステートレス、トークンはステートフル
逆です。セッションが状態を持ち、トークンはステートレスです。
面接官は何を見ているか
- 状態をサーバー側に持つかクライアント側に持つかの違いを言えた
- Cookie とヘッダという運び方の違いに触れた
- CSRF 対策の要否が変わる点に触れた
模範解答
セッションはサーバー側に状態を持ち、ブラウザは Cookie でセッションIDだけを運びます。トークンはクライアントが持ち、Authorization ヘッダで送ります。Cookie は自動送信されるため CSRF 対策が必要ですが、ヘッダに手で載せるトークンでは基本的に不要になります。この違いを踏まえずに両方を混ぜると、CSRF の穴になります。