PKCEを標準にする
公開Client・機密Clientを問わずAuthorization Code FlowへPKCEを組み込み、認可コードの横取りに備えます。
Specification
OAuth 2.0のセキュリティBest Current Practiceを統合し、PKCEを前提に安全な利用方法を整理した現代的な仕様です。
Overview
OAuth 2.1は、OAuth 2.0公開後に蓄積されたセキュリティ上の知見を、実装者が迷いにくい形へ整理する取り組みです。OAuth 2.0をまったく別の仕組みに置き換えるのではなく、安全な選択肢を標準の使い方としてまとめます。
中心となるのはAuthorization Code FlowとPKCEです。認可コードを横取りされてもcode_verifierを持たない攻撃者はトークンへ交換できません。一方、トークンをブラウザへ直接返すImplicit Grantや、Clientがパスワードを預かるPassword Grantは除外されます。
Purpose and responsibilities
公開Client・機密Clientを問わずAuthorization Code FlowへPKCEを組み込み、認可コードの横取りに備えます。
Implicit GrantとPassword Grantを外し、実装者が古い方式を誤って選びにくくします。
完全一致redirect URI、Bearer Tokenの安全な扱い、refresh token保護など、現代の実装で必要な要件をまとめます。
Key concepts
Security considerations
仕様を実装するときは、正常系の通信だけでなく、値のすり替え、再利用、漏えいが起きた場合も考えます。
code_verifierは暗号学的乱数から生成し、S256 code_challengeを使用します。
stateまたは同等の仕組みでClientが開始した処理とコールバックを関連付けます。
redirect_uriは文字列の完全一致で検証し、ワイルドカードを使いません。
refresh tokenはrotationまたはsender-constrained tokenで再利用リスクを抑えます。
Interactive flows
Authorization Code FlowへPKCEを必須要件として組み込み、コード横取り攻撃を防ぐ現代的な認可フローです。
図を再生する →OAuth 2.1 · Interactive flowClient Credentials Flowユーザーを介さず、クライアント自身の権限でサービス間APIへアクセスするM2M向けフローです。
図を再生する →OAuth 2.1 · Interactive flowRefresh Token Flowアクセストークンの期限切れ後、ユーザーを再認証させずに新しいトークンを取得する継続セッションのフローです。
図を再生する →OAuth 2.1 · Interactive flowDevice Authorization GrantテレビやCLIなど入力制約のある端末を、別のブラウザを使って安全に認可するフローです。
図を再生する →Position and relationship
OAuth 2.1はRFC 6749、PKCE、Bearer Tokenの利用方法、OAuth Security BCPなどを前提にしています。OpenID Connectはこの認可フローの上へ本人確認を追加する別仕様であり、OAuth 2.1だけではユーザーが誰かをClientへ伝えません。
Other specifications