メインコンテンツまでスキップ

OAuth 2.0 / OpenID Connect RFC 学習ガイド

このディレクトリには、OAuth 2.0 と OpenID Connect に関連する RFC の包括的な学習ドキュメントが含まれています。


目次

基礎(OAuth 2.0 Core)

OAuth 2.0 の基本仕様を理解するためのドキュメントです。

RFCドキュメント内容
RFC 6749rfc6749-oauth2-coreOAuth 2.0 認可フレームワーク
RFC 6750rfc6750-bearer-tokenBearer トークンの使用方法
RFC 6819rfc6819-threat-modelOAuth 2.0 脅威モデルとセキュリティ考慮事項

JWT / JOSE(署名・暗号化)

JSON Web Token と関連する署名・暗号化仕様です。

RFCドキュメント内容
RFC 7519rfc7519-jwtJSON Web Token (JWT)
RFC 7515rfc7515-jwsJSON Web Signature (JWS)
RFC 7516rfc7516-jweJSON Web Encryption (JWE)
RFC 7517rfc7517-jwkJSON Web Key (JWK)
RFC 7518rfc7518-jwaJSON Web Algorithms (JWA)

クライアント認証

クライアントが認可サーバーに対して自身を証明する方式です。

RFCドキュメント内容
RFC 7521rfc7521-assertion-frameworkアサーションフレームワーク
RFC 7522rfc7522-saml-assertionSAML 2.0 アサーションプロファイル
RFC 7523rfc7523-jwt-bearerJWT を使ったクライアント認証とグラント

OAuth 2.0 拡張

OAuth 2.0 の機能を拡張する仕様です。

RFCドキュメント内容
RFC 7591rfc7591-dynamic-registration動的クライアント登録
RFC 7592rfc7592-registration-management動的クライアント登録管理
RFC 7636rfc7636-pkcePKCE(Proof Key for Code Exchange)
RFC 7009rfc7009-revocationトークン失効(Revocation)
RFC 7662rfc7662-introspectionトークンイントロスペクション
RFC 8693rfc8693-token-exchangeトークン交換
RFC 8705rfc8705-mtlsOAuth 2.0 Mutual TLS
RFC 8707rfc8707-resource-indicatorsリソースインジケーター
RFC 9126rfc9126-parPAR(Pushed Authorization Requests)
RFC 9207rfc9207-iss-identification認可サーバー識別子
RFC 9396rfc9396-rarRAR(Rich Authorization Requests)
RFC 9449rfc9449-dpopDPoP(Demonstrating Proof of Possession)

OpenID Connect

OAuth 2.0 に Identity レイヤーを追加した ID 連携(Identity Federation)プロトコルです。

仕様ドキュメント内容
OIDC Coreoidc-coreOpenID Connect Core 1.0
OIDC Discoveryoidc-discoveryOpenID Connect Discovery 1.0
OIDC DCRoidc-dynamic-registrationOpenID Connect 動的クライアント登録
OIDC Sessionoidc-sessionセッション管理とログアウト
OIDC Front-Channeloidc-front-channel-logoutFront-Channel Logout
OIDC Back-Channeloidc-back-channel-logoutBack-Channel Logout

セキュリティ

OAuth 2.0 / OIDC のセキュリティに関する仕様とベストプラクティスです。

仕様ドキュメント内容
RFC 9700rfc9700-security-bcpOAuth 2.0 Security Best Current Practice
-redirect-uri-validationredirect_uri 検証の仕様比較
-attack-patterns主要な攻撃パターンと対策
-token-securityトークンセキュリティのベストプラクティス

高度なプロトコル

金融グレードやバックチャネル認証など、高度なユースケース向けの仕様です。

仕様ドキュメント内容
FAPI 1.0fapi1-baselineFAPI 1.0 Baseline Profile
FAPI 1.0fapi1-advancedFAPI 1.0 Advanced Profile
FAPI 2.0fapi2-securityFAPI 2.0 Security Profile
OIDC CIBAoidc-cibaCIBA(Client Initiated Backchannel Authentication)
Grant Mgmtgrant-managementGrant Management for OAuth 2.0

Advanced Identity(身元確認 / Verifiable Credentials)

身元確認と検証可能な証明書に関する高度な仕様です。

仕様ドキュメント内容
OIDC IDAoidc-idaOpenID Connect for Identity Assurance
OID4VCIoid4vciOpenID for Verifiable Credential Issuance
OID4VPoid4vpOpenID for Verifiable Presentations

学習パス

初心者(アプリケーション開発者)

OAuth 2.0 を使ったアプリケーション開発を始める方向けのパスです。

  1. rfc6749-oauth2-core - OAuth 2.0 の基本概念と認可フロー
  2. rfc6750-bearer-token - アクセストークンの送信方法
  3. rfc7636-pkce - パブリッククライアントのセキュリティ強化
  4. rfc7519-jwt - JWT の構造と検証方法
  5. oidc-core - OpenID Connect による認証の追加

中級者(セキュリティ強化)

セキュアな実装を目指す開発者向けのパスです。

  1. rfc6819-threat-model - 脅威モデルの理解
  2. rfc9700-security-bcp - セキュリティベストプラクティス
  3. rfc7523-jwt-bearer - JWT を使ったクライアント認証
  4. rfc7662-introspection - トークン検証の実装
  5. rfc9126-par - 認可リクエストのセキュリティ強化
  6. rfc9449-dpop - トークンバインディング

上級者(IDP 実装者 / 金融グレード)

認可サーバーを実装する方、または金融グレードのセキュリティが必要な方向けのパスです。

  1. rfc7521-assertion-framework - アサーションフレームワークの理解
  2. rfc7591-dynamic-registration - 動的クライアント登録の実装
  3. rfc8693-token-exchange - トークン交換の実装
  4. rfc8705-mtls - mTLS によるクライアント認証
  5. fapi1-advanced - FAPI 1.0 Advanced の要件
  6. fapi2-security - FAPI 2.0 の最新要件
  7. rfc9564-ciba - バックチャネル認証の実装

RFC 間の関係図

全体像

┌─────────────────────────────────────────────────────────────────────────────┐
│ OAuth 2.0 基盤 │
│ │
│ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │
│ │ RFC 6749 │ │ RFC 6750 │ │ RFC 6819 │ │
│ │ 認可 │───►│ Bearer │ │ 脅威 │ │
│ │ フレームワーク│ │ Token │ │ モデル │ │
│ └───────┬───────┘ └───────────────┘ └───────────────┘ │
│ │ │
└───────────┼─────────────────────────────────────────────────────────────────┘

│ 拡張・強化

┌───────────────────────────────────────────────────────────────────────────────┐
│ セキュリティ強化 │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ RFC 7636 │ │ RFC 9126 │ │ RFC 9449 │ │ RFC 8705 │ │
│ │ PKCE │ │ PAR │ │ DPoP │ │ mTLS │ │
│ │ │ │ │ │ │ │ │ │
│ │ 認可コード │ │ リクエスト │ │ トークン │ │ 証明書で │ │
│ │ 横取り対策 │ │ 改ざん対策 │ │ バインド │ │ バインド │ │
│ └─────────────┘ └─────────────┘ └──────┬──────┘ └─────────────┘ │
│ │ JWT形式を使用 │
└────────────────────────────────────────────┼──────────────────────────────────┘


┌───────────────────────────────────────────────────────────────────────────────┐
│ JWT / JOSE(トークン形式) │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ RFC 7519 │─────►│ RFC 7515 │─────►│ RFC 7517 │ │
│ │ JWT │ │ JWS │ │ JWK │ │
│ │ │ │ (署名) │ │ (鍵表現) │ │
│ │ トークン │ └─────────────┘ └─────────────┘ │
│ │ フォーマット │ │ ▲ │
│ └──────┬──────┘ ┌─────────────┐ │ │
│ │ │ RFC 7516 │──────────────┘ │
│ │ │ JWE │ │
│ │ │ (暗号化) │ │
│ │ └─────────────┘ │
└──────────┼───────────────────────────────────────────────────────────────────┘

│ JWT を使用

┌───────────────────────────────────────────────────────────────────────────────┐
│ クライアント認証 │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ RFC 7521 │─────►│ RFC 7523 │ │
│ │ Assertion │ │ JWT Bearer │ │
│ │ Framework │ │ │ │
│ │ │ │ private_key │ │
│ │ アサーション │ │ _jwt 等 │ │
│ │ の枠組み │ └─────────────┘ │
│ └─────────────┘ │
│ │
└───────────────────────────────────────────────────────────────────────────────┘

┌───────────────────────────────────────────────────────────────────────────────┐
│ OpenID Connect │
│ (OAuth 2.0 + Identity レイヤー = ID連携) │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ OIDC Core │ │ Discovery │ │ DCR │ │
│ │ │ │ │ │ │ │
│ │ IdPが認証した│ │ 設定の │ │ 動的 │ │
│ │ ユーザー情報 │ │ 自動検出 │ │ クライアント│ │
│ │ をRPに提供 │ └─────────────┘ │ 登録 │ │
│ └─────────────┘ └─────────────┘ │
│ ▲ │
│ │ OAuth 2.0 に Identity 情報の表現方法を追加 │
│ │ │
└─────────┼─────────────────────────────────────────────────────────────────────┘

│ プロファイルとして組み合わせ

┌───────────────────────────────────────────────────────────────────────────────┐
│ FAPI(金融グレード) │
│ │
│ PKCE + PAR + JWT認証 + DPoP + OIDC を組み合わせたルール集 │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ FAPI 1.0 │ │ FAPI 1.0 │ │ FAPI 2.0 │ │
│ │ Baseline │─────►│ Advanced │─────►│ Security │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└───────────────────────────────────────────────────────────────────────────────┘

関係性の解説

上の図の矢印が「なぜそう繋がっているのか」を解説します。

基盤層(すべての出発点)

関係解説
RFC 6749 → RFC 6750OAuth 2.0 が発行するアクセストークンを「どう送るか」を Bearer Token 仕様が定義。Authorization: Bearer xxx のルール。
RFC 6749 → RFC 6819OAuth 2.0 の脅威モデルとセキュリティ考慮事項。実装時に「何を守るべきか」の指針。

JWT / JOSE(トークンの「形式」を定義)

関係解説
JWT → JWSJWT の署名は JWS 形式を使用。header.payload.signature の構造は JWS 由来。
JWT → JWEJWT の暗号化は JWE 形式を使用。ペイロードを暗号化したい場合に使う。
JWS/JWE → JWK署名・暗号化に使う鍵の表現形式。公開鍵を JSON で表現する方法を定義。

セキュリティ強化(OAuth 2.0 の弱点を補う)

関係解説
RFC 6749 → PKCEAuthorization Code 横取り攻撃への対策。認可コードを盗まれても使えなくする。
RFC 6749 → PAR認可リクエストをバックチャネルで送信。リクエスト内容の改ざん・漏洩を防ぐ。
RFC 6749 → DPoPBearer トークンの「盗んだら使える」問題を解決。トークンを特定の鍵にバインド。
RFC 6749 → mTLSクライアント証明書でクライアントを認証 + トークンを証明書にバインド。

クライアント認証(「私は正規のクライアント」を証明)

関係解説
RFC 6749 → RFC 7521OAuth 2.0 にアサーション(署名付き証明)の概念を導入するフレームワーク。
RFC 7521 → RFC 7523アサーションとして JWT を使用。private_key_jwtclient_secret_jwt の基盤。

OpenID Connect(ID 連携プロトコル)

関係解説
OAuth 2.0 → OIDCOIDC は OAuth 2.0 の上に Identity レイヤーを追加。OAuth 2.0 単体では「誰が認可したか」の情報を標準化していない。
JWT → OIDCID Token は JWT 形式。IdP が認証したユーザーの情報(誰が・いつ・どこで認証されたか)を署名付きで RP に提供。

補足: 「OIDC は認証」という説明は誤解を招きやすい。正確には「OIDC は IdP が認証したユーザーの情報を RP に提供するための ID 連携(Identity Federation)プロトコル」。認証を行うのは IdP であり、RP はその結果を受け取って身元確認や当人認証に利用する。

FAPI(金融グレードのプロファイル)

関係解説
各仕様 → FAPIFAPI は「OAuth 2.0 + OIDC + 各種拡張」の組み合わせ方を規定。どの仕様を使うか、どう設定するかのルール集。

どこから読むべきか?

あなたの目的は?

├─► 「アプリを作りたい」
│ │
│ └─► ① RFC 6749(基本フロー)
│ ↓
│ ② RFC 7636(PKCE)
│ ↓
│ ③ RFC 6750(トークンの使い方)

├─► 「IdP を作りたい」
│ │
│ └─► ① RFC 6749(基本フロー)
│ ↓
│ ② RFC 7519(JWT)
│ ↓
│ ③ RFC 7523(クライアント認証)
│ ↓
│ ④ RFC 7662(イントロスペクション)

└─► 「FAPI 対応したい」

└─► RFC 9126(PAR)
RFC 9449(DPoP)
RFC 7523(JWT認証)
を重点的に

関連リソース

公式仕様

実装ライブラリ

テストツール

参考書籍・記事