## 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 の関係の全体図