OAuth 2.0 (RFC 6749)

The OAuth 2.0 Authorization Framework

OAuth 2.0のロール、エンドポイント、Grant Type、アクセストークンの基本モデルを定義する中核仕様です。

STATUSPublished October 2012FLOWS5 documentedPrimary specification ↗

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

OAuthの登場人物、Grant Type、アクセストークン、scopeの基本を理解したい人向けです。

OAuth 2.0は、あるサービスが持つデータや機能を、ユーザーのパスワードを別のアプリへ教えずに利用させるための認可フレームワークです。たとえば写真サービスが持つ写真へ、印刷アプリからアクセスを許可する場面で使われます。

RFC 6749は、Resource Owner、Client、Authorization Server、Resource Serverという4つの役割を分け、Clientがアクセストークンを受け取るまでの基本ルールを定義しました。重要なのは、OAuthが本人確認そのものではなく『どのClientへ、何を、どこまで許可するか』を扱う点です。

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

01

パスワードを共有しない

ユーザーはAuthorization Serverだけでログインします。Clientはパスワードではなく、限定されたアクセストークンを受け取ります。

02

権限を小さく分ける

scopeを使い、プロフィールの参照やデータの更新など、Clientへ許可する操作を必要な範囲に限定します。

03

役割と通信を分離する

ログイン、トークン発行、API提供を別の役割として整理し、それぞれが何を信頼し検証するかを明確にします。

01Authorization Code02Client Credentials03Refresh Token04Implicit(Legacy)05Password(Legacy)

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

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

  1. 01

    redirect_uriは事前登録した完全一致URLだけを許可します。

  2. 02

    stateで認可リクエストとコールバックを関連付け、CSRFを防ぎます。

  3. 03

    アクセストークンは短時間有効にし、TLSで送信します。

  4. 04

    Implicit GrantとPassword Grantは現在の新規実装では利用せず、Authorization Code + PKCEを選びます。

この仕様に属するフロー

ほかの仕様との関係

RFC 6749がOAuth 2.0の土台です。その後、PKCE、Device Authorization、Token Revocationなどが個別RFCとして追加され、現在の安全な利用方法はOAuth 2.0 Security Best Current PracticeやOAuth 2.1へ整理されています。

OAuth 2.0 Device Authorization (RFC 8628)OAuth 2.0 Device Authorization GrantOAuth 2.1OAuth 2.1 Authorization FrameworkOpenID 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