その他のOAuth 2.0フロータイプ(PKCE, Client Credentials, Implicit など)
概要
OAuth 2.0には、Authorization Code Flow以外にも多様な認可フローが存在します。
サービスやクライアントの種類、セキュリティ要件に応じて適切なフローを選択することが重要です。
1. PKCE(Proof Key for Code Exchange)
特徴
- 「認可コードグラント」をスマートフォンアプリなどの“パブリッククライアント”でも安全に使うための拡張
- クライアントシークレットを持たない環境でも、コード横取り攻撃を防止
フロー概要
- クライアントが「code_verifier(ランダム文字列)」を生成し、「code_challenge(ハッシュ値)」として認可リクエストに含める
- 認可サーバーはcode_challengeを記録
- トークン取得時、code_verifierを送信し、認可サーバーが一致を確認
- 一致した場合のみアクセストークン発行
利用シーン
- スマホアプリやSPA(Single Page Application)など、クライアントシークレットを安全に保持できないケース
2. Client Credentials Flow(クライアントクレデンシャルズ)
特徴
- サービスやAPI同士の連携で「ユーザー本人」の関与が不要なケース
- クライアント自身の権限でトークン取得
フロー概要
- クライアントが認可サーバーに自身のIDとシークレットを送信
- 認可サーバーがアクセストークンを発行
- クライアントはトークンでAPIを利用
利用シーン
- バックエンドサービス間連携
- バッチ処理、サーバーtoサーバーAPI連携
3. Implicit Flow(インプリシットフロー)※非推奨
特徴
- ブラウザ上のJavaScriptアプリ(SPA)など、即座にトークンが必要な場合に利用されてきた
- トークンが直接フロントに返却される
フロー概要
- クライアントが認可リクエストを送信
- 認可サーバーがアクセストークンを「即座に」redirect_uriへ返却
注意点
- トークンがURLフラグメントで渡るため、盗聴・漏洩リスクが高い
- PKCE対応のAuthorization Code Flowが推奨され、現在は非推奨
4. Resource Owner Password Credentials Flow(ROPC)
特徴
- クライアントがユーザーのID・パスワードを直接受け取り、トークン取得
- 今はセキュリティ上の理由から、原則非推奨
利用シーン
- レガシーなシステムとの連携など、どうしても必要な場合のみ
5. Device Authorization Flow(デバイス認可フロー)
特徴
- スマートテレビやIoTデバイスなど、キーボード入力が難しい機器向け
- 別の端末(PCやスマホ)で認証・認可を行う
フロー概要
- デバイスがユーザーに「コード」や「URL」を表示
- ユーザーがPCやスマホで認証・同意
- デバイスにトークンが返却される
まとめ
- OAuth 2.0は多様なフロータイプを持ち、利用シーンやセキュリティ要件に応じて選択できる
- 現在は「PKCE付きAuthorization Code Flow」がWeb・モバイルの標準
- ImplicitやROPCは非推奨。新規実装では避けることが推奨される
適切なフロー選択が、セキュアで便利なID連携の基盤となります。
仕様やセキュリティ動向も常にアップデートしていきましょう!