「認証情報のやり取りには、JWT(ジョット)を使うのがモダンですね」
エンジニアさんの会話で出た、この可愛らしい響きの言葉。私は「ジョット……? なんだか、ショット(Shot)の親戚かな? お酒でも飲んで景気をつけるのかな?」と、お祭り騒ぎな現場を想像していました。
とりあえず 「ジョットいきましょう!」 と明るく答えてみましたが、相手からは「……いや、データの詰め合わせ(トークン)のことだよ」と教えられ、またしても「空耳パニック」で赤面する羽目に……(笑)。
実は「JWT」は、ネット上で「私は誰で、どんな権利を持っているか」をコンパクトに、かつ安全に持ち運ぶための「魔法のチケット」のことです。今回は、お祭りの 「引換券」 に例えて、その正体を3分でやさしく解説します!
JWTとは? 一言でいうと「中身が偽物じゃないことを証明できる『デジタルの引換券』」
結論から言うと、JWT(JSON Web Token:ジョットと読みます)とは、「情報をJSON(ジェイソン)という形式でまとめ、さらにデジタル署名を付けることで、改ざん(書き換え)ができないようにした小さなデータ(トークン)」 のことです。
お祭りの 「プレミアム飲食券」 に例えてみましょう。
- 普通のメモ:自分で「焼きそば1個無料」と書いた紙。誰でも偽造できてしまう。
- JWT(飲食券):「『この人は焼きそば1個とビール1杯が無料です』という内容が書かれ、裏面に『主催者の本物のハンコ』が押された特別な券」。
この「飲食券(JWT)」を持っていれば、お店の人は裏面のハンコ(署名)を見るだけで、「あ、これは間違いなく主催者が発行した本物だ!」と一瞬で判断でき、あなたにサービスを提供できます。
いちいち「本当にこの人は権利があるの?」と本部に問い合わせる必要がないため、やり取りが非常にスムーズで軽快になるのが、JWTの最大の特徴です。
ビジネスの現場でJWTという言葉が出る場面
Webアプリのログイン維持や、APIの認証シーンで頻繁に登場します。
1. 「ログイン後のアクセスにはJWTを使って、ステートレス(状態を持たない)な設計にしよう」
意味:
「サーバーというお店側で『あの人、今何してたっけ?』といちいち覚えるのをやめて、お客さんに『私はこういう者で、こんな権利があります!』という完璧な引換券(JWT)を常に持ってもらうようにしよう」ということです。
2. 「JWTのペイロード(中身)にユーザーIDを含めておいてね」
意味:
「引換券の表面(中身)に、『会員番号:123番』と書いておいて。そうすれば、誰が券を持ってきたか一目で分かるからね」ということです。
3. 「シークレットキーが漏れると、JWTを偽造されちゃうから厳重に管理して」
意味:
「引換券の裏に押す『主催者の本物のハンコ(署名の鍵)』が盗まれたら、誰でも偽の券を作り放題になっちゃうから、ハンコは絶対に誰にも見せないでね」ということです。
なぜJWTが選ばれるのか?
「普通のIDと何が違うの?」という疑問。効率の良さで比較しました。
| 比較ポイント | 従来のID(セッション) | JWT(トークン) |
|---|---|---|
| サーバーの負担 | 「覚える」 のが大変 | 「見るだけ」 なので楽 |
| スピード | 本部に確認する時間がかかる | その場ですぐ判断できる |
| 拡張性 | 複数の店(サーバー)で共有しにくい | どの店でも券を見せるだけ |
| たとえ話 | 顔なじみの店員さん | 共通のプレミアム引換券 |
「サーバーというお店が、自分でお客さんのことを覚えるのをやめて、お客さんに証明書を持ってもらう」という逆転の発想が、今のネット社会にフィットしているのです。
まとめ
この記事のポイントは次のとおりです。
- JWTは、情報をコンパクトに、安全に運ぶための「魔法のチケット」
- 「デジタル署名」がついているため、中身を書き換えることができない
- サーバーがいちいち「過去の記憶」を辿らなくて済むため、動きが軽快になる
今すぐできる確認方法
IT業界の「身分証」の様子を、少しだけ覗いてみましょう。
- 「jwt.io」: このサイトへ行って、適当なサンプルデータを貼り付けてみてください。中身が3つのパーツ(ヘッダー、中身、署名)に分かれているのが一目で分かります!
- ブラウザのデベロッパーツール: サイトにログインした状態で「Application」→「Local Storage」などを見ると、
eyJhbG...といった長い暗号のような文字がありませんか? それがあなたの「引換券(JWT)」かもしれません。 - 「ジョット」という響き: 会議で「ジョット」と聞こえたら、「あ、あのチケットのことだな」と心の中でニヤリとしてみる。
「JWT」という言葉を知るだけで、Webサービスが「裏側で必死に覚えている」場所から、「洗練されたチケットのやり取り」で動くスマートな空間に見えてきませんか?