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

What — 解いているのは「パスワードを渡さずに代理を頼む」

OAuth2 は、渡す物を権限と期限を限定したトークンに置き換える手続きの規格。ホテルに車を預けるとき渡すのは、トランクが開かないバレーキーであってキーホルダーごとではない。

How — 登場人物3者、流れは3ステップ

① ユーザーが承認する
   アプリが GitHub の画面へ飛ばす →「このアプリにリポジトリ読み取りを許可しますか?」
   ★ パスワードを入力するのは GitHub の画面。アプリは見ていない
        ↓ 承認の証拠(認可コード)を持って
② GitHub がトークンを発行する
   「読み取りだけ・1時間有効」のアクセストークンをアプリに渡す
        ↓ そのトークンを持って
③ アプリが API を叩く
   Authorization: Bearer <トークン>   ← ここから先は Bearer の話

キモは①。パスワードを入力する画面が GitHub 自身であって、アプリではない。「GitHub でログイン」「Google でログイン」ボタンの裏側は毎回この手続き。

③ を見ればわかるとおり、OAuth2 のゴールは Bearer で渡せるトークンを手に入れること。3つが同時に成立するのはこのため。

落とし穴 — 認可であって認証ではない

名前に Auth と付くが、OAuth2 が決めているのは「何をしていいか(認可)」の委譲手続きで、「あなたが誰か(認証)」ではない。

「Google でログイン」が本人確認として成立しているのは、上に OpenID Connect という別の規格が乗っているから。OAuth2 単体では本人確認にならない。

関連