2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JWT認証 vs セッションID認証の違い

Posted at

1. セッションID認証(サーバー側でセッション管理)

📌 仕組み

  1. ユーザーがログイン

    • クライアントがユーザー名とパスワードを送信
    • サーバーが認証し、セッションID を発行
    • セッションIDをクライアントに返し、クッキーに保存
  2. APIアクセス時の動作

    • クライアントは次のリクエスト時に、セッションIDを送信
    • サーバー側でセッションIDを管理し、照合して認証
  3. サーバーがセッションを管理

    • サーバー側の データベースやメモリ にセッション情報を保持
    • ユーザーがログアウトすると、サーバー側のセッションが削除

✅ メリット

  • 実装が簡単
  • セッションの無効化が可能(ログアウト時にサーバー側で削除)
  • セッション情報を変更しやすい(管理画面などで強制ログアウト可能)

❌ デメリット

  • サーバーの負荷が増える(セッションデータを保存・管理する必要あり)
  • スケールしにくい(ロードバランサー環境ではSticky Sessionが必要)
  • 分散システムには不向き(マルチサーバーではセッション共有が必要)

2. JWT認証(トークンベースの認証)

📌 仕組み

  1. ユーザーがログイン

    • クライアントがユーザー名とパスワードを送信
    • サーバーが認証し、JWT(トークン)を発行
    • クライアントがJWTをローカルストレージやクッキーに保存
  2. APIアクセス時の動作

    • クライアントはリクエストヘッダにJWTを含めて送信
      Authorization: Bearer <JWT>
      
    • サーバーはJWTを検証し、正しければ認証成功
  3. サーバーはセッションを管理しない

    • JWTには 認証情報(ユーザーID, 権限など)と有効期限が含まれる
    • サーバー側ではトークンの検証のみ行い、データベース不要

🔹 「サーバーに保存しないのに、どうやってJWTを照合するの?」

🔽 その答えは 「JWTの署名を検証する」 ことにあります。

📌 JWTの検証方法

  1. JWTには「署名」が含まれている

    • これはサーバー側の「秘密鍵」で作られたデジタル署名
  2. サーバーは「秘密鍵」または「公開鍵」で署名を検証

    • JWTの内容が改ざんされていないか確認
    • トークンの有効期限が切れていないかチェック

🔽 つまり、サーバーは 「このトークンは本物か?」だけを検証する ので、
データベースでユーザー情報を探す必要がない!

✅ メリット

  • ステートレス(サーバー側でデータを持たない) → 負荷が軽い
  • スケールしやすい → ロードバランサーを使う環境に最適
  • APIに適している → モバイルアプリやSPA(シングルページアプリケーション)で広く利用

❌ デメリット

  • ログアウトやトークン無効化が難しい(発行済みトークンは有効期限が切れるまで有効)
  • トークンの管理が重要(盗まれると第三者が不正アクセス可能)
  • 長いトークンはリクエストサイズを増やす(Authorizationヘッダに入れる場合)

3. セッションID認証 vs JWT認証

項目 セッションID認証 JWT認証
管理方式 サーバー側で管理(DBやメモリ) クライアント側で管理(トークン)
スケーラビリティ スケールしにくい(Sticky Sessionが必要) スケールしやすい(ステートレス)
認証時の処理 サーバーがセッションを照合 サーバーはJWTを検証するだけ
ログアウト処理 サーバー側でセッション削除 発行済みトークンは無効化しづらい
セキュリティリスク セッションハイジャックのリスク JWTが漏れると不正アクセスされる

4. AWSでの使い分け

セッションID認証が向いているケース

  • EC2ベースのアプリ(Webアプリなど)
  • 従来のサーバーセッションを使ったシステム
  • ログアウト機能が重要な場合

ALB + EC2 ならセッションID認証が一般的


JWT認証が向いているケース

  • API Gateway + Lambda でサーバーレスアプリを作る
  • モバイルアプリやシングルページアプリ(SPA)
  • マイクロサービスでトークンベース認証をしたい

API Gateway + Lambda の環境では JWT の方が適している


5. まとめ

セッションID認証

  • サーバーでセッションを管理する
  • シンプルだがスケールしにくい
  • EC2ベースのWebアプリ向け

JWT認証

  • クライアントがトークンを管理する(ステートレス)
  • APIやマイクロサービスに適している
  • API Gateway + Lambda での認証向け

結論:どちらを選ぶべきか?

➡️ EC2ベースならセッションID、API GatewayならJWT
AWSではサーバーレス(API Gateway + Lambda)が増えているので、JWTが主流 になりつつある。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?