ホーム/セキュリティ/認証・認可の方式/ セッション認証(Cookie)

製品プロフィール

セッション認証(Cookie)

サーバ側セッション

サーバにセッションを保持し、Cookie のセッション ID で本人を識別する古典的で確実な方式。サーバ側で即座に失効できるのが強み。

3つの要点
TL;DR
  1. Cookie のセッション ID で本人を識別する方式。
  2. サーバ側で即座にログアウトを強制できる。
  3. API/モバイル中心なら JWT の方が扱いやすい。

基本情報

仕様と立ち位置

製品・技術の概要セッション認証(Cookie)サーバにセッションを保持し、Cookie のセッション ID で本人を識別する古典的で確実な方式。サーバ側で即座に失効できるのが強み。
種別
サーバ側セッション
目的
認証
トークン/形式
セッション IDCookie)
最大の強み
サーバ側で即時に失効できるブラウザと相性が良い・実績豊富
代表的な用途
伝統的な Web アプリ管理画面・社内システム / 即時ログアウトが要る用途

選定ガイド

選定ポイント

採用する理由と、事前に受け入れるべきトレードオフを分けて確認します。

採用に向く条件

選ぶ理由

  1. サーバ側で即時に失効できる
  2. ブラウザと相性が良い・実績豊富
  3. トークン中身が漏れない

事前に確認する条件

考慮すべき点

  1. サーバにセッション保持が必要(スケール時に共有が要る)
  2. CSRF 対策が必要
  3. モバイル/API には不向きな面

詳しい解説

もっと詳しく

どんな仕組みか

セッション認証は、ログイン後の状態をサーバー側に保持し、利用者にはセッション ID だけを Cookie で渡す、伝統的な Web 認証方式です。

サーバーは「このセッション ID は誰のものか」を内部に記録しておき、リクエストごとに送られてくる ID と突き合わせて本人を識別します。状態をサーバーが握っているのが特徴です。

横にスクロール

ログイン成功後にセッションIDを再生成して共有ストアへ主体と期限を保存し、Cookieでブラウザへ渡し、以後の要求で存在、期限、失効状態を毎回照合して認可する流れ
セッション認証では、ログイン成功時に既存IDを捨て、推測不能なIDを再生成して主体・権限・idle期限・絶対期限・失効状態を共有ストアへ保存します。ブラウザは宛先規則に応じてCookieを自動送信し、サーバーは要求ごとに照合してから認可します。ログアウトや侵害時はストアのIDを削除することで即時失効できます。

どう動くのか

おおまかな流れは次のとおりです。

  • ログイン成功時、サーバーがセッションを作り、推測困難なセッション ID を発行する
  • セッション ID を Cookie に入れてブラウザへ返す
  • 以降のリクエストでブラウザが Cookie を自動送信し、サーバーが照合する
Set-Cookie: session_id=abc123; HttpOnly; Secure; SameSite=Lax

セッションの実体(ユーザー情報や有効期限)はサーバー側にあり、ID はそれを指す引換券のような役割です。だからこそ ID は十分に長くランダムで、推測・総当たりできない値である必要があります。

他の方式との違い

ステートレスな JWT との対比で捉えると分かりやすいです。

観点セッションJWT
状態サーバーが保持トークンが持つ
失効サーバー側で削除すれば即時期限切れまで有効になりがち
保存先Cookie に ID のみトークン本体を保持
スケール共有ストアが要るストア不要
強み確実なログアウト・強制失効分散・ステートレス

ログアウトや強制的な無効化を確実に効かせたい場合、サーバー側で状態を管理できるセッション方式が扱いやすくなります。

使いどころ・注意点

一般的な Web アプリで、確実なログアウトやセッション管理を重視するなら有力です。

Cookie 属性とセッション固定攻撃

Cookie には HttpOnly(JS から読めなくして XSS でのトークン窃取を防ぐ)・Secure(HTTPS 限定)・SameSite(CSRF 緩和)を適切に設定します。ログイン成功時にはセッション ID を再発行し、攻撃者が用意した ID を使わせる「セッション固定攻撃」を防ぎます。加えて、CSRF 対策トークン、適切なタイムアウト、ログアウト時の確実な破棄も重要です。

スケール時は共有ストア

サーバーを複数台にスケールさせると、どのサーバーでも同じセッションを参照できるよう、Redis などの共有ストアが必要になります。ここが単一障害点や性能のボトルネックにならないよう、冗長化とレプリケーションを設計します。スティッキーセッション(同じサーバーへ固定)で凌ぐ方法もありますが、可用性面で弱くなります。

総じてセッション認証は、状態をサーバーが握ることで確実な失効・ログアウトを実現する堅実な方式で、Cookie 属性の適切な設定と共有ストア設計が運用の要点です。

実装・運用の視点

セッション認証(Cookie)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

伝統的な Web アプリ

比較で見る軸

種別: サーバ側セッション / 目的: 認証 / トークン/形式: セッション ID(Cookie)

導入後に効く点

ブラウザと相性が良い・実績豊富

先に潰すリスク

サーバにセッション保持が必要(スケール時に共有が要る)

数字・仕様の読み方
種別
サーバ側セッション
目的
認証
トークン/形式
セッション ID(Cookie)

判断チェックリスト

  • 自社の用途が「伝統的な Web アプリ / 管理画面・社内システム」に近いか確認する。
  • 強みである「サーバ側で即時に失効できる」が本当に評価軸になるか確認する。
  • 注意点の「サーバにセッション保持が必要(スケール時に共有が要る)」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

伝統的な Web アプリ管理画面・社内システム即時ログアウトが要る用途

向いている用途

こんな用途に向く

伝統的な Web アプリ管理画面・社内システム即時ログアウトが要る用途
公式サイト