トークン(Token)とは、本人であることや、何をしてよいかを示すために発行される、期限つきの引換券のような文字列のことです。一度本人確認を済ませた相手に渡され、それ以降のやり取りではパスワードの代わりにこの文字列を提示します。
現実世界に例えると、トークンは遊園地の入口で腕に巻いてもらうリストバンドです。入口で一度だけ本人と支払いを確認し、あとは各アトラクションでバンドを見せるだけで通れます。係員はいちいち身元を調べ直しません。期限が切れれば、そのバンドはただの紙切れになります。
パスワードとの違い
| 項目 | パスワード | トークン |
|---|---|---|
| 作る人 | 利用者が決める | システムが自動で発行する |
| 有効期間 | 変更するまで有効 | 数分〜数時間で切れる |
| 使える範囲 | そのアカウント全体 | 発行時に決めた範囲だけ |
| 漏れたとき | 被害が長く続く | 失効させれば止められる |
この表のとおり、トークンは「短い期間だけ、限られた範囲で使える一時的な鍵」です。パスワードを毎回やり取りする方式に比べ、盗まれたときの被害を小さく抑えられます。
発行から利用までの流れ
手順はおおむね共通しています。まず利用者がIDとパスワードなどで本人確認を受け、成功するとサーバーがトークンを発行して手渡します。以後、利用者側のアプリはリクエストのたびにそのトークンを添えて送り、サーバーは中身を確かめてから応答します。パスワードが行き来するのは最初の一回だけになる、という点が大切です。
有効期限が短いのはわざと
不便に見える仕様には理由があります。トークンは盗まれる可能性を前提に設計されており、有効期限を短くすることで、盗まれても使える時間を限定しています。数分から数時間で切れるものが多く、切れたあとは同じ文字列を送っても拒否されます。パスワードのように「変更するまでずっと有効」ではないため、後始末がしやすいのです。
2種類を組み合わせて使う
期限が短いと、頻繁にログインし直すことになります。それを避ける工夫がアクセストークンとリフレッシュトークンの組み合わせです。実際の通信に使う前者は短命にしておき、期限が切れたら後者を使って新しいものを黙って取り直します。利用者から見れば、ログインしたままの状態が自然に続いているように感じられます。
APIの利用に欠かせない
プログラムどうしのやり取りでも主役です。他社のサービスの機能を呼び出すとき、呼び出す側はトークンを添えて、自分に権限があることを示します。このとき「読み取りだけ」「特定のフォルダだけ」といった範囲を発行時に指定できるため、必要以上の権限を渡さずに済みます。外部サービスとの連携で、アカウントごと預けなくてよいのはこの仕組みのおかげです。
中身を読める形式もある
すべてが意味のない文字列とはかぎりません。JWTと呼ばれる形式では、利用者のIDや有効期限といった情報がトークン自体に書き込まれています。サーバーはデータベースに問い合わせなくても中身を確認でき、処理が軽くなります。ただし読める形で入っているため、パスワードのような秘密の情報を入れてはいけません。
盗まれたときの危険と備え
注意すべき点もあります。トークンを持っている相手は本人として扱われるため、盗まれればそのまま成りすましが成立します。通信を暗号化する、保存場所をブラウザの安全な領域にする、不審な操作があれば失効させる、といった対策が欠かせません。「短い期限」も、被害を長引かせないための備えのひとつです。
別の意味で使われることもある
同じ言葉が違う場面でも登場します。銀行のインターネットバンキングで配られる、使い捨ての数字を表示する小型機器も「ハードウェアトークン」と呼ばれます。また生成AIの分野では、文章を処理する際の細かな単位をトークンと呼び、料金や上限の計算に使われます。文脈によって指すものが変わる言葉です。
あわせて知っておきたい用語
- APIキー:
プログラムから機能を呼び出すときに使う、識別用の文字列です。 - セッション:
ログインしてから離れるまでの、一続きのやり取りを指します。 - OAuth:
パスワードを渡さずに、他サービスへ権限を委ねる仕組みです。 - ワンタイムパスワード:
一度きりしか使えない、使い捨ての確認用の数字です。

コメント