## 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]] — 書式の層