ひとことで言うと
トークンは、ログインや認証の結果をまとめた小さなデータで、「この人は確認済みです」という証明書として使い回せる仕組みです。
ページを移動したりAPIを呼び出したりするたびにパスワードを送るのは非効率で危険です。 そこで一度ログインしたら「認証済みの証明書(トークン)」を発行し、以降のリクエストにはその証明書を添付する形をとります。 WebアプリのログインやAPIアクセスの認証で広く使われています。
たとえ話でもう少し詳しく
トークンは、イベントの入場リストバンドに近いです。
- 入口でチケットを確認されたら、リストバンドを巻いてもらえる
- 以降は会場内をどこへ移動してもリストバンドを見せれば通れる
- リストバンドには有効期限があり、切れたら再度受付へ行く必要がある
Webサービスでも同じです。 IDとパスワードで一度ログインするとサーバーからトークンが発行されます。 以降はAPIリクエストや画面遷移のたびに、そのトークンを添えて送るだけで「この人はログイン済みです」と確認されます。 毎回パスワードを送る必要がなく、トークンだけでやりとりが完結します。
よく出る場面・使いどころ
- ログイン後のAPIリクエストに「認証済み」であることを証明したいとき
- スマホアプリとバックエンドサーバーがやりとりするとき
- 複数のサービスをまたいでログイン状態を維持したいとき(シングルサインオン)
- 外部サービスに自分の代わりに操作させるとき(OAuthなど)
似た言葉との違い
- セッション
- ログイン状態をサーバー側で管理する仕組み
- トークンは状態をデータとしてクライアント側に持たせるため、サーバーへの問い合わせなしに検証できることが多い
- APIキー
- 利用者やアプリを識別する固定の文字列
- トークンは有効期限や権限の情報を含み、ログイン操作をへて発行される点が異なる
- Cookie
- ブラウザに小さなデータを保存する仕組み
- トークンをCookieに入れて保存することも多く、組み合わせて使われる
実務で気にするポイント
- トークンには有効期限を設定し、長すぎない期間にする
- 漏洩に備えて、トークンを盗まれてもすぐ無効化できる仕組みを持つ
- HTTPSで通信してトークンが盗聴されないようにする
- JWTなど標準的な形式を使うことで、実装のミスを減らせる
注意: トークンは便利ですが、漏洩すると不正アクセスに使われます。有効期限・失効処理・通信の暗号化をセットで設計し、「発行したら使い捨て」に近い感覚で短命に保つことが大切です。