OAuth 2.1

OAuth 2.1 Authorization Framework

OAuth 2.0のセキュリティBest Current Practiceを統合し、PKCEを前提に安全な利用方法を整理した現代的な仕様です。

STATUSModern OAuth consolidationFLOWS4 documentedPrimary specification ↗

この仕様は、
何を解決するのか。

新しくOAuth ClientやAuthorization Serverを実装し、現在推奨される認可フローを選びたい人向けです。

OAuth 2.1は、OAuth 2.0公開後に蓄積されたセキュリティ上の知見を、実装者が迷いにくい形へ整理する取り組みです。OAuth 2.0をまったく別の仕組みに置き換えるのではなく、安全な選択肢を標準の使い方としてまとめます。

中心となるのはAuthorization Code FlowとPKCEです。認可コードを横取りされてもcode_verifierを持たない攻撃者はトークンへ交換できません。一方、トークンをブラウザへ直接返すImplicit Grantや、Clientがパスワードを預かるPassword Grantは除外されます。

仕様が定める、大切なこと。

01

PKCEを標準にする

公開Client・機密Clientを問わずAuthorization Code FlowへPKCEを組み込み、認可コードの横取りに備えます。

02

危険な選択肢を減らす

Implicit GrantとPassword Grantを外し、実装者が古い方式を誤って選びにくくします。

03

現在の実装慣行を統合する

完全一致redirect URI、Bearer Tokenの安全な扱い、refresh token保護など、現代の実装で必要な要件をまとめます。

01PKCE Required02Exact Redirect URI03No Implicit04No Password Grant05Refresh Rotation

安全に使うための確認事項。

仕様を実装するときは、正常系の通信だけでなく、値のすり替え、再利用、漏えいが起きた場合も考えます。

  1. 01

    code_verifierは暗号学的乱数から生成し、S256 code_challengeを使用します。

  2. 02

    stateまたは同等の仕組みでClientが開始した処理とコールバックを関連付けます。

  3. 03

    redirect_uriは文字列の完全一致で検証し、ワイルドカードを使いません。

  4. 04

    refresh tokenはrotationまたはsender-constrained tokenで再利用リスクを抑えます。

この仕様に属するフロー

ほかの仕様との関係

OAuth 2.1はRFC 6749、PKCE、Bearer Tokenの利用方法、OAuth Security BCPなどを前提にしています。OpenID Connectはこの認可フローの上へ本人確認を追加する別仕様であり、OAuth 2.1だけではユーザーが誰かをClientへ伝えません。

OAuth 2.0 (RFC 6749)The OAuth 2.0 Authorization FrameworkOAuth 2.0 Device Authorization (RFC 8628)OAuth 2.0 Device Authorization GrantOpenID Connect Core 1.0OpenID Connect Core 1.0FIDO2 WebAuthn Level 3Web Authentication: Public Key CredentialsFIDO2 CTAP 2.2Client to Authenticator ProtocolFIDO UAF 1.1Universal Authentication FrameworkFIDO U2F 1.2Universal Second FactorOpenID Connect CIBA Core 1.0Client-Initiated Backchannel AuthenticationOAuth 2.0 PKCE (RFC 7636)Proof Key for Code Exchange by OAuth Public ClientsJSON Web Token (RFC 7519)JSON Web Token (JWT)OAuth 2.0 DPoP (RFC 9449)OAuth 2.0 Demonstrating Proof of PossessionSAML 2.0Security Assertion Markup Language 2.0SCIM 2.0 (RFC 7644)System for Cross-domain Identity Management: Protocol