トークン

トークンは、ログインした証明や権限の情報を小さなデータにまとめ、やりとりの代わりに使う仕組みです。

トークン のアイキャッチ図解
まずは、こう考えるとつかみやすいです。

トークンは、入場済みを証明するリストバンドのようなものです。入口で確認を済ませたら、あとはリストバンドを見せるだけで通れます。

ひとことで言うと

トークンは、ログインや認証の結果をまとめた小さなデータで、「この人は確認済みです」という証明書として使い回せる仕組みです。

ページを移動したりAPIを呼び出したりするたびにパスワードを送るのは非効率で危険です。 そこで一度ログインしたら「認証済みの証明書(トークン)」を発行し、以降のリクエストにはその証明書を添付する形をとります。 WebアプリのログインやAPIアクセスの認証で広く使われています。

たとえ話でもう少し詳しく

トークンは、イベントの入場リストバンドに近いです。

  • 入口でチケットを確認されたら、リストバンドを巻いてもらえる
  • 以降は会場内をどこへ移動してもリストバンドを見せれば通れる
  • リストバンドには有効期限があり、切れたら再度受付へ行く必要がある

Webサービスでも同じです。 IDとパスワードで一度ログインするとサーバーからトークンが発行されます。 以降はAPIリクエストや画面遷移のたびに、そのトークンを添えて送るだけで「この人はログイン済みです」と確認されます。 毎回パスワードを送る必要がなく、トークンだけでやりとりが完結します。

よく出る場面・使いどころ

  • ログイン後のAPIリクエストに「認証済み」であることを証明したいとき
  • スマホアプリとバックエンドサーバーがやりとりするとき
  • 複数のサービスをまたいでログイン状態を維持したいとき(シングルサインオン)
  • 外部サービスに自分の代わりに操作させるとき(OAuthなど)

似た言葉との違い

  • セッション
    • ログイン状態をサーバー側で管理する仕組み
    • トークンは状態をデータとしてクライアント側に持たせるため、サーバーへの問い合わせなしに検証できることが多い
  • APIキー
    • 利用者やアプリを識別する固定の文字列
    • トークンは有効期限や権限の情報を含み、ログイン操作をへて発行される点が異なる
  • Cookie
    • ブラウザに小さなデータを保存する仕組み
    • トークンをCookieに入れて保存することも多く、組み合わせて使われる

実務で気にするポイント

  • トークンには有効期限を設定し、長すぎない期間にする
  • 漏洩に備えて、トークンを盗まれてもすぐ無効化できる仕組みを持つ
  • HTTPSで通信してトークンが盗聴されないようにする
  • JWTなど標準的な形式を使うことで、実装のミスを減らせる

注意: トークンは便利ですが、漏洩すると不正アクセスに使われます。有効期限・失効処理・通信の暗号化をセットで設計し、「発行したら使い捨て」に近い感覚で短命に保つことが大切です。