## 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 単体では本人確認にならない。 ## 関連 - [[API]] — API まわりの地図 - [[Bearer]] — 手に入れたトークンをどう提示するか - [[認証トークンの3層]] — OAuth2・Bearer・JWT の関係の全体図