imu-note
いむたろ
いむたろ
@imutaroh
新卒エンジニア / データ基盤 × AI

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