Skip to content

RFC 対応一覧

本ライブラリがコード中で参照しているすべての規格を、実装パッケージとゲートになるオプション・feature と対応づけて一覧化しています。

ステータスの凡例

full その仕様について本ライブラリが対象とする OP 側 surface を end-to-end で実装しています。
partial OP として必要な部分は実装済みです(設計上スコープ外の任意章は除きます)。
planned 対応予定。まだ着地していません。
out out-of-scope(設計上、本ライブラリの責務ではない)。
refused 意図的に拒否しています(例: alg=none)。

OIDC core / discovery

仕様ステータス場所
OpenID Connect Core 1.0partialresponse_typecode のみ。Aggregated / Distributed claim types §5.6.2 は emit せず、pairwise sub §8.1 は op.WithPairwiseSubject で実装済み。詳細は下の「設計上の対象外」セクション)op/internal/authorizeinternal/tokenendpointinternal/userinfointernal/sector
OpenID Connect Discovery 1.0fullinternal/discovery
OpenID Connect Dynamic Client Registration 1.0partial(主要フロー、sector_identifier_uri の取得、application_type=web / =native ごとの redirect URI 規則、JWKs / pairwise / response_type のクロスチェック、PUT の予約フィールド拒否、post_logout_redirect_uris の往復、5 種の JWE alg/enc encrypted-response メタデータまでを強制。GET /register/{id} の応答からは client_secret を意図的に除外、software_statement も非対応)internal/registrationendpoint
OpenID Connect RP-Initiated Logout 1.0fullinternal/endsession
OpenID Connect Back-Channel Logout 1.0fullinternal/backchannel
OpenID Connect Front-Channel Logout 1.0out(iframe / third-party-cookie 依存の通知方式は意図的に非実装。Back-Channel Logout を使う)
OpenID Connect Session Management 1.0out(サードパーティ cookie 依存のため。Back-Channel を推奨)
OpenID Connect CIBA Core 1.0partial(poll 配信のみ。ping / push は対象外)internal/cibainternal/cibaendpointop.WithCIBA

OAuth 2.0 系 RFC

RFCステータス場所 / オプション
RFC 6749 OAuth 2.0 Frameworkpartial(authorization-code、refresh-token、client-credentials の surface。implicit grant と password grant は意図的に非実装)op/internal/authorizeinternal/tokenendpoint
RFC 6750 Bearer Token Usagepartial(OP 発行 bearer token と、UserInfo / introspection など OP が持つ resource endpoint。一般的な RS challenge 挙動はリソースサーバ側の責務)internal/tokensinternal/userinfointernal/introspectendpoint
RFC 6819 Threat Model & Security Considerationspartial(OP 全体に適用しているセキュリティ指針。独立したプロトコル surface ではない)コードベース全体
RFC 7009 Token Revocationfullfeature.Revoke でゲート)internal/revokeendpoint
RFC 7521 Assertion Frameworkpartialprivate_key_jwt クライアント認証のみ。assertion grant と client_secret_jwt は意図的に非実装)internal/clientauth
RFC 7523 JWT Bearer Assertions for Client Authpartialprivate_key_jwt。JWT bearer authorization grant と client_secret_jwt は非実装で、client_secret_jwt は登録時点で invalid_client_metadata として拒否)internal/clientauth
RFC 7591 Dynamic Client Registrationpartialfeature.DynamicRegistration で制限。software_statementinvalid_software_statement で拒否)internal/registrationendpoint
RFC 7592 DCR Managementpartial(read / update / delete を実装。PUT の省略はフィールド削除ではなくサーバデフォルトへのリセットとして扱い、応答での client_secret 再掲は none → confidential への auth method 昇格、または明示的な rotation 要求のいずれかに限定)internal/registrationendpoint
RFC 7636 PKCEfullS256 のみ。plain は拒否)internal/pkce
RFC 7662 Token Introspectionfullfeature.Introspect でゲート)internal/introspectendpoint
RFC 7800 Confirmation Methods (cnf)fullinternal/dpopinternal/mtlsinternal/tokens
RFC 8252 OAuth 2.0 for Native Appspartial(OP 側の native redirect / loopback 制約を強制。client app 側の挙動は対象外)internal/registrationendpointinternal/authorize
RFC 8414 Authorization Server Metadatafullinternal/discovery
RFC 8485 Vectors of Trustpartial(ACR/AAL マッピング経由で消費)op/aal.goop/acr.go
RFC 8628 Device Authorization Grantfullop.WithDeviceCodeGrant で有効化。slow_down の段階的な延長は LastPolledAt と原子的に永続化、op/devicecodekit が総当たり対策と revoke 用 audit hook を同梱)internal/devicecodeinternal/devicecodeendpointop/devicecodekit
RFC 8693 OAuth 2.0 Token Exchangefullop.RegisterTokenExchange でゲート。actor が subject と異なる場合は act チェーン必須、cnf はリクエストの DPoP / mTLS で再バインド)internal/customgrant/tokenexchange
RFC 8705 OAuth 2.0 mTLS Client Auth & Cert-Bound Tokensfullfeature.MTLS でゲート。mtls_endpoint_aliases を discovery で公開)internal/mtls
RFC 8707 Resource Indicatorspartial(authorize / token / device / CIBA での正規化と client allow-list 検証を実装。v1.x の組み込み grant は多くの経路で単一 resource 値に絞る)internal/resourceindicatorinternal/authorizeinternal/tokenendpointinternal/devicecodeendpointinternal/cibaendpoint
RFC 8725 JWT Best Current Practicesfull(alg allow-list、typ チェック)internal/jose
RFC 9068 JWT Profile for Access Tokensfullinternal/tokens
RFC 9101 JAR (JWT-Secured Authorization Request)fullfeature.JAR でゲート)internal/jar
RFC 9126 PAR (Pushed Authorization Requests)fullfeature.PAR でゲート)internal/parendpoint
RFC 9207 OAuth 2.0 Authorization Server Issuer Identifierfullinternal/authorize(応答に iss パラメータを付与)
RFC 9396 Rich Authorization Requests (authorization_details)fullop.WithAuthorizationDetailTypes で有効化。/authorize/par/token で検証し、grant に永続化し、JWT アクセストークンと introspection に反映し、discovery で公開)internal/authorizationdetailsop/authorization_details.go
RFC 9449 DPoPfull(§8 nonce フロー含む。feature.DPoP でゲート)internal/dpopop.WithDPoPNonceSource
RFC 9470 OAuth 2.0 Step Up Authentication Challengefull(OP は ACR rule で acr_values / max_age の再認証を尊重。op.StepUpChallenge が組み込み側 RS の返す WWW-Authenticate challenge を組み立てる)op/rule.goRuleACR)、op/stepup.go
RFC 9700 OAuth 2.0 Security Best Current Practicepartial(OP 側 BCP posture。リソースサーバ / client 側要件は組み込み側の責務)コードベース全体
RFC 9701 JWT Response for OAuth 2.0 Token Introspectionfull(既定は signed JWT。client の introspection_encrypted_response_alg / _enc メタデータに応じて JWE で wrap)internal/introspectendpointinternal/jose
RFC 9728 OAuth 2.0 Protected Resource Metadatafullop.WithProtectedResources で有効化。/.well-known/oauth-protected-resource で配信し、authorization_servers に issuer を刻む)internal/protectedresourceop/protected_resource.go

IETF ドラフト

ドラフトステータス場所
OAuth 2.0 Grant Managementdraft-ietf-oauth-grant-managementpartialop.WithGrantManagement で有効化。grant_management_action / grant_id を処理し、query / revoke エンドポイントをマウントし、token 応答に grant_id を載せ、discovery で公開。IETF draft 追跡のため v1.0 までに surface が変わり得る)internal/grantmgmtendpointop/grant_management.go

JOSE 系

RFCステータス場所
RFC 7515 JWSpartial(JWT / JAR / JARM / DPoP / client assertion で使う compact JWS surface。general JSON serialization は公開しない)internal/jose
RFC 7516 JWEpartial — 閉じた許可リスト(RSA-OAEP-256 / ECDH-ES{,+A128KW,+A256KW} × A{128,256}GCM)。inbound JWE request_object(JAR / PAR §6.1)、outbound JWE id_token、JWT-shape userinfo、JARM authorization 応答、RFC 9701 introspection 応答を実装済み。RSA1_5refused(CVE-2017-11424 padding oracle)。RSA-OAEP-384/512dir、対称鍵のみの A*KW は v2+ で対応internal/joseop.WithEncryptionKeyset
RFC 7517 JWKpartial(対応済み非対称鍵種の JWK Set 公開と client JWKS 消費。署名用途の対称 oct 鍵は受理しない)internal/jwks
RFC 7518 JWApartial — 発行は ES256 のみ。検証は RS256PS256ES256EdDSA を受理。HS*nonerefusedinternal/jose
RFC 7519 JWTpartial(OIDC / OAuth 拡張で使う signed / encrypted JWT surface。unsecured JWT は拒否)internal/jose
RFC 7638 JWK Thumbprintfull(DPoP cnf.jkt で使用)internal/dpop
RFC 8037 Edwards-curve DSA / EdDSApartial(Ed25519。Ed448 は無効)internal/jose

FAPI 系

プロファイルステータス切り替え
FAPI 2.0 Baselinefull(継続回帰検査。OFCS 参照)op.WithProfile(profile.FAPI2Baseline)
FAPI 2.0 Message Signingfull(継続回帰検査)op.WithProfile(profile.FAPI2MessageSigning)
FAPI 1.0 Advancedout—(FAPI 2.0 を使用)
FAPI-CIBAfull(poll mode。JAR + DPoP|MTLS 必須、アクセストークン TTL 10 分上限、FAPI 2.0 client-auth セット、requested_expiry ≤ 600 秒、JAR iss / aud / exp / nbf 必須、request-object 寿命 ≤ 60 分(FAPI 2.0 Message Signing §5.6)、アクセストークン revocation 必須)op.WithProfile(profile.FAPICIBA)
OpenID iGov Highplanned(v2)profile.IGovHigh(定数あり。ランタイム制約が未着地のため、現状で op.WithProfile(profile.IGovHigh) を渡すと op.New が拒否)

その他、ライブラリが参照する RFC

RFC用途
RFC 1918Back-Channel Logout SSRF 防御のプライベートネットワーク拒否リスト
RFC 2606テスト / 例で使う予約済み example domain
RFC 3986URI パース
RFC 4122UUIDv4 生成
RFC 4226TOTP authenticator が使う HOTP の土台
RFC 4514mTLS subject DN の DN 処理
RFC 4648Base64url エンコーディング
RFC 5280X.509 証明書検証
RFC 5321Email OTP 入力に対する SMTP アドレス長の上限
RFC 6238TOTP authenticator
RFC 6265Cookie 構文
RFC 6711Authentication Context Class Reference 値レジストリ
RFC 7230 / 7231 / 7232 / 7235HTTP/1.1(現在は RFC 9110 が後継)
RFC 7239trusted proxy 処理での Forwarded header パース
RFC 7807application/problem+json(一部のエラー経路)
RFC 8017JOSE 経由で参照する RSA-PSS / RSA-OAEP アルゴリズム
RFC 8141PAR request_uri 値の URN 処理
RFC 8176AMR 値レジストリ
RFC 8259JSON
RFC 9110HTTP セマンティクス

設計上の対象外

OIDC Core や周辺 OAuth 仕様には登場するものの、本ライブラリでは意図的に実装していない項目があります。隣接リポジトリの test/scenarios/catalog/<feature>.yamlstatus: out-of-scope 行として記録され、ほかのテストと同じ場所で棚卸しできるようになっています。

  • response_typecode のみ。 Implicit(id_tokenid_token token)、hybrid(code id_token ほか)、response_type=none はいずれも発行しません。RFC 9700 §1.4 が implicit grant を非推奨化しており、FAPI 2.0 は code を必須としています。Discovery も response_types_supported: ["code"] だけを広告します。
  • fragment response mode は配信路として実装していません。 code のみの発行では URL fragment に入れるものがないためです。queryform_post は両方とも実装されています(form_post は OIDC Core Form Post Response Mode 1.0 に従って自動送信 HTML フォームを返します)。feature.JARM を有効にすると 4 種の *.jwt バリアントも有効になります。Discovery は既定で response_modes_supported: ["query", "form_post"] を広告し、JARM 有効時には *.jwt モードを追加で広告します。
  • Aggregated / Distributed claim types(OIDC Core §5.6.2)は emit しません。 Normal claim のみを出力します。_claim_names / _claim_sources といったキーはトークンにも UserInfo 応答にも一切登場しません。
  • client_secret_jwt は登録時点で拒否します。 代わりに private_key_jwt を使ってください。HMAC 共有秘密 JWT プロファイルは invalid_client_metadata: token_endpoint_auth_method client_secret_jwt is not supported で拒否されます。
  • JWE alg / enc の許可リストは閉じています。 既定値は RSA-OAEP-256 + ECDH-ES{,+A128KW,+A256KW}(key-wrap)と A{128,256}GCM(content)です。WithSupportedEncryptionAlgs狭める だけで、広げることはできません。RSA1_5 は永続的に拒否(CVE-2017-11424)。RSA-OAEP-384 / RSA-OAEP-512dir、対称鍵のみの A*KW は v2+ で対応します。
  • CIBA の push / ping 配信モードは未実装。 Discovery は backchannel_token_delivery_modes_supported: ["poll"] のみを広告するので、クライアント側からこの 2 モードを交渉することはできません。
  • Custom-grant ハンドラはリフレッシュトークン値を渡せません。 リフレッシュトークンを発行したいハンドラは CustomGrantResponse.IssueRefreshToken を立てます。OP が自分の RefreshTokenStore で資格情報を生成・永続化するため、親子関係、ローテーション、再利用時の連鎖失効、DPoP / mTLS バインディングが保たれます。クライアントが refresh_token grant に登録されていない場合でもアクセストークン応答は成功し、リフレッシュトークンだけが省略され、custom_grant.refresh_dropped が記録されます。

範囲外(意図的)

OAuth / OIDC 圏のすべての RFC が OP の責務というわけではありません。以下は意図的に対応していない仕様で、リソースサーバ・クライアント SDK・その他のレイヤが受け持つべき領域です。

仕様対応状況備考
RFC 9421 — HTTP Message Signaturesoutリソースサーバ(API 保護)側の関心事であり、OP の責務ではありません。OP 側の対応する仕組みは、認可リクエスト署名に JAR (RFC 9101)、認可レスポンス署名に JARM、/token/userinfo の所持証明に DPoP (RFC 9449) です。RS 側の HTTP 署名は組み込み側で実装してください。

検証方法

この一覧は最新のソース(op/internal/)を grep して作成しています。手元で再現できます。

sh
git clone https://github.com/libraz/go-oidc-provider.git
cd go-oidc-provider
grep -rhoE 'RFC [0-9]+' op/ internal/ | sort -u

上の表は、そのコマンドの出力結果をベースにしつつ、ライブラリにとって規範的(normative)なものは強調表示し、周辺的(incidental)なものは「その他」にまとめたものです。