## What — 競合ではなく、1本のトークンをめぐる3層
OAuth2・Bearer・JWT は選択肢として競合する技術ではなく、**同じ1本のトークンについて別の問いを担当する層**。
| | 担当する層 | 答える問い |
| --- | --- | --- |
| OAuth2 | 入手手続き | どうやって発行してもらう? |
| JWT | 書式 | 中身はどう書いてある? |
| Bearer | 渡し方 | どうやって提示する? |
## How — Authorization ヘッダの1行に3つとも写る
どの層の話かは、リクエストのこの1行で読み分けられる。
```
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIi...
```
- `Bearer` と書いてヘッダに載せる**提示のルール**が Bearer
- `eyJ...` というピリオド3分割の文字列の書式が JWT
- この文字列をアプリが手に入れた経緯(「GitHub でログイン」→ 承認 → 発行)が OAuth2
流れは一直線。OAuth2 で発行してもらったトークン(中身はたいてい JWT 形式)を、Bearer 方式でヘッダに載せて毎回提示する。
## 落とし穴 — セットで出てくるが、相互に必須ではない
- Bearer で運ぶ文字列が JWT とは限らない(中身の読めないランダム文字列を返す API もある)
- JWT は OAuth2 の外でも使う(自前ログイン、サービス間認証)
「GitHub でログイン」の場面では3つが同時に成立するので一体に見えるが、層が違うので個別に入れ替えられる。
> [!success]
> 迷ったら Authorization ヘッダの1行に戻る。渡し方=Bearer、文字列の書式=JWT、その文字列の出どころ=OAuth2。
## 関連
- [[API]] — API まわりの地図
- [[OAuth2]] — 入手手続きの層
- [[Bearer]] — 渡し方の層
- [[JWT]] — 書式の層