【初心者向け】セッション認証とJWTの違いとは?わかりやすく解説!

コンニチハ

パンに塗り塗りジャム太郎です!

今回のテーマは

セッション認証」と「JWT」の違い

についてです。


1.はじめに

Webアプリを作っていると、ログイン機能が必要になりますよね。

そのときに出てくるのが「認証」という仕組みです。
でも、「セッション認証」とか「JWT(JSON Web Token)」って、なんか難しそう…

この記事では、初心者の方でもスッと理解できるように、
「セッション認証」と「JWT認証」の違いを図や例を交えてやさしく解説します!


2.「認証」ってなに?

認証とは、「あなたが誰なのかを確認すること」です。

たとえば:

  • ログイン画面で「メールアドレスとパスワード」を入力する
  • それを使って「この人は本当に登録済みのユーザーか?」をチェックする

これが「認証」です!


3.セッション認証とは?

セッション認証は昔からある、シンプルでよく使われている認証方法です。

流れを簡単に説明すると

  1. ユーザーがログインする
  2. サーバー側で「セッションID」を発行して保存する
  3. クライアント(ブラウザ)はそのセッションIDをCookieに保存する
  4. 以降のリクエストには、Cookieに入ったセッションIDが自動的に送られる
  5. サーバーは「保存してあるセッションID」と照らし合わせて、ユーザーを認識する

イメージ図

[ユーザー] ←ログイン→ [サーバー]
     ↓保存されたセッションID
[ユーザー] ←→ [サーバー](毎回IDでチェック)

特徴

  • サーバーがユーザー情報を保持している
  • クッキーを使う
  • セッションはサーバー側で期限切れ管理される

4.JWT認証とは?

JWT(JSON Web Token)は最近よく使われる「トークンベース認証」です。
サーバーにユーザー情報を持たず、すべてをトークンに詰めてクライアントに渡すのが特徴です。

流れを簡単に説明すると:

  1. ユーザーがログインする
  2. サーバーはJWT(ユーザー情報を含んだ署名付きのトークン)を発行する
  3. クライアントはJWTを保存(通常はlocalStorageやCookie)
  4. 以降のリクエストには、JWTをヘッダーに付けて送信する
  5. サーバーはそのトークンを検証してユーザーを認識する

イメージ図

[ユーザー] ←ログイン→ [サーバー]
     ↓JWT(署名付きのユーザー情報)
[ユーザー] ←→ [サーバー](毎回JWTを検証)

特徴

  • サーバーがユーザー情報を保存しない
  • スケーラブル(複数サーバーでも扱いやすい)
  • JWT自体に有効期限を持てる

5.まとめ

項目セッション認証JWT認証
状態管理サーバーがユーザー状態を保持トークンで状態を自己管理
保存先サーバー内メモリ or DBクライアント(localStorageなど)
スケーラビリティあまり得意ではない(状態共有が必要)得意(サーバーレスでもOK)
セキュリティCSRFに注意XSSに注意
無効化のしやすさサーバー側で削除可能一度発行したJWTは無効にしづらい

6.結局どっちを使えばいいの?

ケースおすすめの認証方法
シンプルなアプリ・サーバー少なめセッション認証
モバイルアプリやSPA・API中心JWT認証

それぞれにメリット・デメリットがあるので、アプリの特性に合わせて選ぶのがベストです!


では、また次の記事で〜

投稿者 パンに塗り塗りジャム太郎

コンニチハ! Z世代のパンに塗り塗りジャム太郎です。 Web系自社開発企業でポンコツエンジニアをしております。 このブログでは最低1人にでもタメになってくれたらいいなぁ〜ぐらいの内容を発信しています。 お手柔らかによろしくお願いいたします。