OAuth 2.0
ユーザーのパスワードを渡さずに、リソースへの限定的なアクセスを許可する認可フレームワーク
認証セキュリティ
OAuth 2.0 とは
OAuth 2.0 は、RFC 6749 で定義された認可フレームワークで、ユーザーのパスワードをサードパーティに渡さずに、リソースへの限定的なアクセスを許可する。「Google でログイン」が代表的な実装。
OAuth の登場人物
OAuth の登場人物を以下にまとめる。
| 役割 | 説明 | 例 |
|---|---|---|
| リソースオーナー | データの所有者 | ユーザー |
| クライアント | アクセスを要求するアプリ | Web アプリ |
| 認可サーバー | トークンを発行 | Cognito, Google |
| リソースサーバー | データを提供する API | API Gateway + Lambda |
認可コードフロー
認可コードフローを図で示す。
1. ユーザー → クライアント: 「ログインしたい」
2. クライアント → 認可サーバー: 認可リクエスト
3. ユーザー → 認可サーバー: ログイン + 同意
4. 認可サーバー → クライアント: 認可コード
5. クライアント → 認可サーバー: 認可コード + クライアントシークレット
6. 認可サーバー → クライアント: アクセストークン + リフレッシュトークン
7. クライアント → リソースサーバー: アクセストークンで API 呼び出し
OAuth vs OIDC
OAuth と OIDC の違いを以下にまとめる。
| 観点 | OAuth 2.0 | OIDC |
|---|---|---|
| 目的 | 認可 (何にアクセスできるか) | 認証 (誰か) + 認可 |
| トークン | アクセストークン | ID トークン + アクセストークン |
| ユーザー情報 | 標準化されていない | ID トークンに含まれる |
グラントタイプ
グラントタイプを以下にまとめる。
| グラント | 用途 |
|---|---|
| Authorization Code | Web アプリ (推奨) |
| Authorization Code + PKCE | SPA, モバイル (推奨) |
| Client Credentials | サーバー間通信 |
| 非推奨 (セキュリティリスク) | |
| 非推奨 |
OAuth 2.0 の理解を深めるには関連書籍が参考になる。
この記事は役に立ちましたか?
関連用語
JWT
JSON Web Token の略で、署名付きの JSON でユーザー情報を安全に伝達するトークン形式
Amazon Cognito
Web・モバイルアプリに認証・認可機能を追加する AWS マネージドサービス
RBAC
ロール (役割) に基づいてアクセス権限を管理する認可モデル
OpenID Connect
OAuth 2.0 の上に構築された認証レイヤーで、ユーザーの身元情報を ID トークンとして提供する
ケイパビリティベースセキュリティ
リソースへのアクセス権を偽造不可能なトークン (ケイパビリティ) として管理するセキュリティモデル
リフレッシュトークン
アクセストークンの有効期限切れ後に、再認証なしで新しいアクセストークンを取得するためのトークン