OAuth 2.0
ユーザーのパスワードを渡さずに、リソースへの限定的なアクセスを許可する認可フレームワーク
認証セキュリティ
OAuth 2.0 とは
OAuth 2.0 は、RFC 6749 で定義された認可フレームワークで、ユーザーのパスワードをサードパーティに渡さずに、リソースへの限定的なアクセスを許可する。「Google でログイン」が代表的な実装。
OAuth の登場人物
| 役割 | 説明 | 例 |
|---|---|---|
| リソースオーナー | データの所有者 | ユーザー |
| クライアント | アクセスを要求するアプリ | Web アプリ |
| 認可サーバー | トークンを発行 | Cognito, Google |
| リソースサーバー | データを提供する API | API Gateway + Lambda |
認可コードフロー
1. ユーザー → クライアント: 「ログインしたい」
2. クライアント → 認可サーバー: 認可リクエスト
3. ユーザー → 認可サーバー: ログイン + 同意
4. 認可サーバー → クライアント: 認可コード
5. クライアント → 認可サーバー: 認可コード + クライアントシークレット
6. 認可サーバー → クライアント: アクセストークン + リフレッシュトークン
7. クライアント → リソースサーバー: アクセストークンで API 呼び出し
OAuth vs OIDC
| 観点 | OAuth 2.0 | OIDC |
|---|---|---|
| 目的 | 認可 (何にアクセスできるか) | 認証 (誰か) + 認可 |
| トークン | アクセストークン | ID トークン + アクセストークン |
| ユーザー情報 | 標準化されていない | ID トークンに含まれる |
グラントタイプ
| グラント | 用途 |
|---|---|
| Authorization Code | Web アプリ (推奨) |
| Authorization Code + PKCE | SPA, モバイル (推奨) |
| Client Credentials | サーバー間通信 |
| 非推奨 (セキュリティリスク) | |
| 非推奨 |
OAuth 2.0 の理解を深めるには関連書籍が参考になる。