トークンとは?IDとの違いを「部屋と鍵」でわかりやすく解説

IT資格

「トークン」という言葉、よく見かけるけど何のことかよくわからない——そんな声をよく聞きます。実はWebアプリやAPIの設計を理解するうえで、トークンと固有IDの違いを押さえるだけで、セキュリティの考え方がぐっと整理されます。

この記事では、専門用語をなるべく使わずに「部屋と鍵」のたとえを使いながら解説します。IT資格の学習中の方や、Webシステムの仕組みを初めて学ぶ方に向けた内容です。


まず結論:IDとトークンは「何に使うか」が違う

細かい説明の前に、一言でまとめます。

  • 固有ID:データベースの中でその人を識別するための番号
  • トークン:その人に一時的に渡す「入場券」や「鍵」

もう少し言い換えると——

  • ID は「誰のデータかを内部で特定するためのもの」
  • トークン は「そのデータを見てよいかを外部から確認するためのもの」

この2つは役割がまったく別です。以下で順番に説明します。

トークンとIDの違いを示す図解:候補者がトークン検証APIを経由してSalesforceのデータを参照する仕組み
トークンを使った情報参照の流れ。IDを直接URLに含めずトークン経由で参照することで安全性が高まる。

固有IDとは?――社内の台帳番号のようなもの

固有IDとは、システムの内部でデータを識別するための番号です。

たとえば、ある採用管理システムでは、候補者Aさんに以下のようなIDが付いているとします。

  • 候補者ID:CAND-001
  • システム内部ID:003xxxxxxxxxxxx

これは、住所録でいえば「〇〇市〇〇町〇番地」のようなものです。システムが「このデータはAさんのものだ」と識別するために使います。身近なたとえだと、こうした番号に近いです。

  • 社員番号
  • 顧客番号
  • 伝票番号
  • 部屋番号

つまり、内部で整理するためのラベルです。ただし、IDは「内部で使う番号」であって、外部(URLなど)にそのまま出してはいけないのが基本の考え方です。その理由は後で説明します。

トークンとは?――期限付きの「入場キー」

トークンは、もっとシンプルに言えば「この人に今だけ渡す安全な鍵」です。たとえば、候補者Aさんにメールで送るURLがこうだとします。

https://example.com/status?t=abX93kLmPq8Rz...

この t=... の部分、長いランダムな文字列がトークンです。トークンには以下の性質があります。

  • Aさん専用に発行されている
  • 一定期間だけ有効(期限が切れると使えなくなる)
  • 推測しにくい(十分に長いランダム文字列)
  • 必要なら失効させられる

身近なたとえだと、こういったものに近いです。

  • ホテルのカードキー
  • 当日限定のイベント入場QR
  • 宅配の受け取り認証コード

「IDとトークンの違い」を家でたとえると

この違いをいちばんわかりやすく説明できるたとえが、部屋と鍵です。

固有ID = 部屋番号

マンションの部屋番号を思い浮かべてください。部屋番号は「どの部屋か」を特定するための番号です。でも、部屋番号を知っているだけでは入れませんし、知っていれば誰でも入れてしまうような設計は危険です。

トークン = その部屋を開けるカードキー

一方でカードキーは、今日だけ使える・この人だけ使える・期限が切れたら無効になる・紛失・不正使用が疑われたらすぐ止められる、という性質を持っています。

役割
固有IDどの部屋か(識別)
トークンその部屋に入ってよい証明(認証)

なぜIDだけではダメなのか?

「IDがわかれば本人を特定できるのだから、URLにIDを入れれば十分では?」と思うかもしれません。しかしこれには大きなリスクがあります。たとえば、こういうURLを設計したとします。

  • AさんのURL:https://example.com/status?id=111
  • BさんのURL:https://example.com/status?id=112

このとき、もし誰かが 111112 に書き換えてアクセスしたら、Bさんの情報が見えてしまいます。IDは連番になっていることが多く、推測・総当たりがしやすいという弱点があります。

Webセキュリティの世界では、これを「Insecure Direct Object Reference(安全でないオブジェクト参照)」と呼び、典型的な脆弱性として広く知られています(OWASPの認証に関するガイドラインでも言及されています)。トークンはランダムな長い文字列のため、推測がほぼ不可能です。

トークンの使い方:ステップで見ると

実際にシステムでトークンがどう使われるか、採用管理システムを例に流れを見てみましょう。

Step 1 — システムの中に候補者Aさんのデータがある。内部では候補者IDが CAND-001 として管理されている。

Step 2 — システムが、Aさん専用のランダムなトークンを発行する(例:abX93kLmPq8Rz...)。

Step 3 — システムは裏側でこの対応関係を保存しておく。

項目
トークンabX93kLmPq8Rz...
紐づく候補者IDCAND-001
有効期限2026-07-10 23:59
状態有効

Step 4〜7 — Aさんにリンクを送り、アクセスが来たらトークンの正当性を確認してから CAND-001 のデータだけを表示する。

つまり候補者は、IDを直接指定して情報を見るのではなく、トークンを通じて”本人専用の表示”を出してもらっているわけです。

「1つの画面で全員分を表示できる」仕組み

候補者が1000人いても、1000枚のHTMLページを作る必要はありません。共通の画面テンプレートが1つあるだけで、URLについているトークンを見て、AさんならAさんのデータ、BさんならBさんのデータを動的に差し込んで表示します。

映画館の電子チケットに似ています。入場画面は1つですが、QRコードを読み取るとその人の座席や回が判定される。「共通画面+トークン+個別データ」という構造です。

トークンが安全な理由

トークンが安全とされる理由は、以下の性質を持てるからです。

  • 十分長いランダム文字列で推測がほぼ不可能
  • 有効期限があり、万が一漏れても時間が経てば使えなくなる
  • 失効できるので不正使用の疑いがあればすぐ止められる
  • 使った履歴を残せる

トークンの有効期間:設計次第で変わる

トークンの有効期間はシステム設計によります。よく使われるパターンは2つです。

パターンA:一定期間有効(24時間・72時間・7日間など)——再アクセスでも同じリンクが使えるため、ユーザーの利便性が高いです。

パターンB:使ったら失効(1回だけ有効)——セキュリティは高いですが、候補者が再度確認したいときに不便になります。

候補者向けの進捗確認のような用途では、パターンAの「短期間有効のリンク」が使いやすいと編集部では考えています。

トークンが漏れたら?追加の防御策

  • トークンの有効期限を短く設定する
  • 一定回数以上アクセスがあったら自動失効させる
  • 再送信時に古いリンクを無効化する
  • アクセスログを残す(OWASP Logging Cheat Sheet参照)

まとめ:3行で理解するトークンとID

  • 固有ID = 社内の台帳でその人を探すための番号(外部に見せるものではない)
  • トークン = その人だけに渡す、期限付きの閲覧パス(推測困難・失効可能)
  • 共通画面 = 実際には1つのページで、トークンに応じて中身を動的に変えている

IDとトークンの役割を分けることで、「推測されにくく、万が一漏れても被害を限定できる」設計になります。Webセキュリティの基本として、ぜひ覚えておいてください。


よくある質問

Q. トークンとセッションIDは同じですか?
A. 似ていますが、使われる文脈が異なります。セッションIDはログイン中のブラウザセッションを管理するためのもので、トークン(特にJWTなど)は認証情報そのものを含む場合もあります。どちらも「ランダムで推測しにくい文字列」という設計思想は共通です。

Q. JWTというのはトークンの一種ですか?
A. はい。JWT(JSON Web Token)は署名付きのトークン形式の一つです。ユーザーIDや権限情報などをトークン自体に含められるため、サーバー側でDBを参照せずに検証できるメリットがあります。

Q. APIキーとトークンの違いは何ですか?
A. APIキーは主に「どのアプリケーションからのリクエストか」を識別するために使います。トークンは「どのユーザーのリクエストか」を識別する目的で使われることが多いです。

コメント

タイトルとURLをコピーしました