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 Grant→OAuth 2.1OAuth 2.1 Authorization Framework→OpenID Connect Core 1.0OpenID Connect Core 1.0→FIDO2 WebAuthn Level 3Web Authentication: Public Key Credentials→FIDO2 CTAP 2.2Client to Authenticator Protocol→FIDO UAF 1.1Universal Authentication Framework→FIDO U2F 1.2Universal Second Factor→OpenID Connect CIBA Core 1.0Client-Initiated Backchannel Authentication→OAuth 2.0 PKCE (RFC 7636)Proof Key for Code Exchange by OAuth Public Clients→JSON Web Token (RFC 7519)JSON Web Token (JWT)→OAuth 2.0 DPoP (RFC 9449)OAuth 2.0 Demonstrating Proof of Possession→SAML 2.0Security Assertion Markup Language 2.0→SCIM 2.0 (RFC 7644)System for Cross-domain Identity Management: Protocol→