44
31

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、何が違うの?を一気に整理しよう!

Last updated at Posted at 2025-04-07

エンジニアになって1〜2年目のあなた、「JWT」という言葉を見かけたことはありますか?実はこれ、「ジェイ・ダブリュー・ティー」と読んだり、「ジョット」と読んだりします。「セッション」や「クッキー」、「IDトークン」なんて言葉も出てきて、なんだか混乱しますよね。

この記事では、そんなあなたにJWTをすっきり理解してもらえるよう、分かりやすく、身近な例を交えながら説明していきます。

JWTってそもそも何?

JWTは「JSON Web Token」の略。ざっくり言うと、「ログイン後のユーザー情報を安全にやり取りするための仕組み」です。
JWTのメリットや特徴を知るには、まず「セッション認証」という方法を理解するのが近道です。

認証を実装する2つの方法

認証の方法は、大きく分けて2種類あります。

1. セッション認証(クッキーを使った認証)

セッション認証は、レストランで順番待ちの札をもらうイメージです。お店(サーバー)はその番号にあなたの情報をひも付けて覚えています。順番が来たら、その番号を呼んで案内してくれる。つまり、札(クッキー)は目印にすぎず、本当の情報はすべてお店側(サーバー)が持っています。

  • メリット
    • 情報をサーバーで管理するので安全性が高め
    • ユーザー管理が直感的でシンプル
  • デメリット
    • ユーザー数が増えるとサーバーの負荷が高まる
    • 複数サーバー間でセッション情報を共有しにくい

2. JWT認証(トークンを使った認証)

一方、JWT認証はフードコートでのセルフオーダーに近いです。注文を済ませると、番号が書かれたレシートをもらえます。そのレシートを持っていれば、どのカウンターでも「この人の注文はこれだ」と判断して料理を出してくれる。注文内容(ユーザー情報)はレシート(JWT)に含まれているので、カウンター(サーバー)は記録を持っていなくても問題ないわけです。

  • メリット
    • サーバーの負担が軽くなる(情報をサーバー側で保持しない)
    • 複数サーバーやマイクロサービスとの連携が簡単
  • デメリット
    • トークンを管理したり無効化したりするのが少し難しい
    • クライアント側で保管するため、安全に扱う必要がある

IDトークンとは何が違う?

ところで、「IDトークン」という言葉を聞いたことはありますか?実はIDトークンもJWTの一種で、GoogleやLINEなどのソーシャルログインで使われます。JWTという広いカテゴリの中で、「この人が誰なのか」という情報だけをシンプルに持ったトークン、それがIDトークンです。

JWTはなぜ改ざんされないの?

JWTの最大の特徴は「改ざん防止」です。JWTには「署名(Signature)」という仕組みがあり、これがあなたの情報を守ります。署名はサーバーが秘密の鍵で作った「印鑑」のようなもの。もし誰かが勝手に情報を書き換えたら、この印鑑が合わなくなってしまうので、サーバーがすぐに気付きます。

つまり、署名によって「このトークンは本当にサーバーが作ったものなのか」「内容は改ざんされていないか」を簡単に確かめられるようになっています。

JWTの中身を少しだけ見てみよう

JWTは次の3つのパートに分かれています。

  1. ヘッダー(Header)
    JWTの種類や使っているアルゴリズムを示します。
  2. ペイロード(Payload)
    ユーザーのIDやトークンの有効期限などの情報を持ちます。
  3. 署名(Signature)
    上の2つが正しいことを証明する印鑑のようなものです。

これらは.(ドット)でつながって、一つの文字列になります。

JWTをもっと理解するための便利ツール

JWTの中身を自分で覗いてみたいと思ったら、「Toolpods」という便利なウェブサイトがあります。このサイトでは、JWTを貼り付けるだけで簡単にデコード(中身の確認)ができます。実際にトークンをデコードして、中身を見てみると理解がさらに深まりますよ。ちなみに自作です(宣伝)。

試しに下記のトークンをデコードしてみましょう。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30

JWTデコード by toolpods

JWTの使い方に関する注意点

JWTは便利ですが、扱いに注意も必要です。

  • 絶対にパスワードなどの秘密情報はJWTに入れないこと。
  • トークンの有効期限は短く設定し、安全性を高めることが大切です。

まとめ

認証を実装するときは、「セッション認証」と「JWT認証」それぞれの特徴をよく理解して、状況に最適な方法を選びましょう。JWTは現代的で柔軟な認証方法ですが、その特性を理解して正しく使うことが重要です。

この記事があなたのJWT理解を助けるヒントになれば嬉しいです。ぜひ実際のプロジェクトで役立ててみてくださいね!

44
31
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
44
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?