Skip to content

RFC compliance matrix

Every standard the library actively cites in its code, mapped to the package that implements it and the option / feature that gates it.

Status legend

full implements the spec end-to-end.
partial implements the parts the OP needs; some optional sections are out of scope by design.
planned in the spec list, not landed yet.
out out-of-scope; structurally not the library's concern.
refused deliberately rejected (e.g. alg=none).

OIDC core / discovery

StandardStatusWhere
OpenID Connect Core 1.0fullop/, internal/authorize, internal/tokenendpoint, internal/userinfo
OpenID Connect Discovery 1.0fullinternal/discovery
OpenID Connect Dynamic Client Registration 1.0partial (core flow, sector_identifier_uri fetch, application_type=web / =native redirect rules, JWKs / pairwise / response-type cross-checks, and PUT reserved-field rejection are enforced; client_secret is intentionally omitted from GET /register/{id} responses, software_statement is not accepted)internal/registrationendpoint
OpenID Connect RP-Initiated Logout 1.0fullinternal/endsession
OpenID Connect Back-Channel Logout 1.0fullinternal/backchannel
OpenID Connect Front-Channel Logout 1.0planned
OpenID Connect Session Management 1.0out (third-party-cookie-dependent; back-channel preferred)

OAuth 2.0 core RFCs

RFCStatusWhere / option
RFC 6749 OAuth 2.0 Frameworkfullop/, internal/authorize, internal/tokenendpoint
RFC 6750 Bearer Token Usagefullinternal/tokens
RFC 6819 Threat Model & Security Considerationsfull (the BCP this library is built around)whole codebase
RFC 7009 Token Revocationfull (gated by feature.Revoke)internal/revokeendpoint
RFC 7521 Assertion Frameworkfullinternal/clientauth
RFC 7523 JWT Bearer Assertions for Client Authfull (private_key_jwt)internal/clientauth
RFC 7591 Dynamic Client Registrationpartial (gated by feature.DynamicRegistration; software_statement is rejected with invalid_software_statement)internal/registrationendpoint
RFC 7592 DCR Managementpartial (read / update / delete; PUT omission resets to server defaults rather than deleting fields, and the response only re-emits client_secret on a none → confidential auth-method upgrade or an explicit rotation request)internal/registrationendpoint
RFC 7636 PKCEfull (only S256; plain refused)internal/pkce
RFC 7662 Token Introspectionfull (gated by feature.Introspect)internal/introspectendpoint
RFC 7800 Confirmation Methods (cnf)fullinternal/dpop, internal/mtls, internal/tokens
RFC 8252 OAuth 2.0 for Native Appsfull (loopback hardening enforced)internal/registrationendpoint, internal/authorize
RFC 8414 Authorization Server Metadatafullinternal/discovery
RFC 8485 Vectors of Trustpartial (consumed via ACR/AAL mapping)op/aal.go, op/acr.go
RFC 8628 Device Authorization Grantplanned (grant.DeviceCode reserved; not yet wired)
RFC 8705 OAuth 2.0 mTLS Client Auth & Cert-Bound Tokensfull (gated by feature.MTLS)internal/mtls
RFC 8707 Resource Indicatorsfullinternal/tokenendpoint
RFC 8725 JWT Best Current Practicesfull (alg allow-list, type checks)internal/jose
RFC 9068 JWT Profile for Access Tokensfullinternal/tokens
RFC 9101 JAR (JWT-Secured Authorization Request)full (gated by feature.JAR)internal/jar
RFC 9126 PAR (Pushed Authorization Requests)full (gated by feature.PAR)internal/parendpoint
RFC 9207 OAuth 2.0 Authorization Server Issuer Identifierfullinternal/authorize (iss parameter on the response)
RFC 9396 Rich Authorization Requests (authorization_details)full (consumed at JAR merge & authorize)internal/jar, internal/authorize
RFC 9449 DPoPfull incl. §8 nonce flow (gated by feature.DPoP)internal/dpop, op.WithDPoPNonceSource
RFC 9470 OAuth 2.0 Step Up Authentication Challengefullop/rule.go (RuleACR)
RFC 9700 OAuth 2.0 Security Best Current Practicefullwhole codebase
RFC 9701 JWT Response for OAuth 2.0 Token Introspectionplanned

JOSE family

RFCStatusWhere
RFC 7515 JWSfullinternal/jose
RFC 7517 JWKfullinternal/jwks
RFC 7518 JWApartial — only RS256, PS256, ES256, EdDSA allowed; HS* and none refusedinternal/jose
RFC 7519 JWTfullinternal/jose
RFC 7638 JWK Thumbprintfull (used by DPoP cnf.jkt)internal/dpop
RFC 8037 Edwards-curve DSA / EdDSAfull (Ed25519; Ed448 not enabled)internal/jose

FAPI family

ProfileStatusSwitch
FAPI 2.0 Baselinefull (continuously regressed; see OFCS)op.WithProfile(profile.FAPI2Baseline)
FAPI 2.0 Message Signingfull (continuously regressed)op.WithProfile(profile.FAPI2MessageSigning)
FAPI 1.0 Advancedout— (use FAPI 2.0)
FAPI-CIBAplanned for v1.xprofile.FAPICIBA (constant exists)
OpenID iGov Highplanned for v2profile.IGovHigh (constant exists)

Other RFCs the library cites

RFCUse
RFC 1918Private-network deny-list for back-channel logout SSRF defense
RFC 3986URI parsing
RFC 4122UUIDv4 generation
RFC 4514DN handling for mTLS subject DN
RFC 4648Base64url encoding
RFC 5280X.509 cert validation
RFC 6238TOTP authenticator
RFC 6265Cookie syntax
RFC 6711Authentication Context Class Reference values registry
RFC 7230 / 7231 / 7232 / 7235HTTP/1.1 (now superseded by RFC 9110)
RFC 7807application/problem+json (selected error paths)
RFC 8176AMR values registry
RFC 8259JSON
RFC 9110HTTP semantics

Verification

The list is grepped from the live source under op/ and internal/. You can audit it yourself:

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

The list above mirrors the output of that command, with the ones that are normative-for-the-library called out and the ones that are incidental references rolled up in "Other".