## What — ログインと引き換えに発行される通行証
Bearer トークンの実体は、**ログイン成功と引き換えにサーバーが発行する、期限付きのただの長い文字列**。
毎回 ID・パスワードを送る代わりに、この文字列をヘッダに載せて「さっきログインした本人です」と示す。
流れは3ステップで固定。
1. ログインする(ID・パスワードを送るのはこの1回だけ)
2. サーバーがトークンを発行して返す(例:`eyJhbGci...`。有効期限つき)
3. 以降のリクエストは毎回ヘッダに載せる。期限が切れたら取り直す
```bash
curl -H "Authorization: Bearer eyJhbGci..." https://api.github.com/user
```
Bearer は「持参人」の意味で、サーバー側のルールは **「この文字列を持ってきた人を本人とみなす」**。
持ち主かどうかの照合はしない。
盗まれるとそのまま成りすまされるので、通信は必ず HTTPS にする。
有効期限が数分〜数時間と短いのも、盗まれたときの被害を期限までで打ち切るため。
## APIキーとの使い分け
前提:**どちらで名乗るかは叩く側が選ぶのではなく、API 側がドキュメント(Authentication 節)で指定している**。
自分で選ぶ場面が来るのは、API を作る側になったとき。
読み分けの軸は「**発行の引き金がログインかどうか**」。
| | APIキー | Bearer トークン |
| ------- | --------------------------- | -------------------- |
| 発行される場面 | 開発者が管理画面で1回発行 | ユーザーがログインするたび自動発行 |
| 誰の身分証か | アプリ・スクリプト | ログインした本人 |
| 期限 | 基本なし(漏れたら手で失効) | 数分〜数時間で自動失効 |
| 典型例 | YouTube Data API・OpenAI API | 「GitHub でログイン」した後の操作 |
cron やスクリプトが人間不在で黙々と叩くなら APIキー、ログインしたユーザー本人として操作するなら Bearer、と場面で読み分ける。
## 落とし穴 — 401 と 403 で打つ手が違う
- **401** — トークンを出していない・期限切れ・書式ミス → **取り直す**
- **403** — トークンは有効だが、その操作の権限がない → **権限(scope)を見直す**
## 関連
- [[API]] — API まわりの地図
- [[JWT]] — トークン文字列の中身の書式
- [[curl]] — `-H` でヘッダを付ける方法
- [[認証トークンの3層]] — OAuth2・Bearer・JWT の関係の全体図