Workers: 8 parallel web searches + 4 document fetches Waves: 2 (initial saturation + targeted section extraction) Sources: 6 primary (RFC 8414, draft-ietf-oauth-v2-1-15, RFC 9700, RFC 9126, RFC 8705, RFC 7662) Verifications: Cross-referenced across RFC 8414 txt, OAuth 2.1 draft HTML/txt/markdown, RFC 9700 txt
OAuth 2.1 (draft-ietf-oauth-v2-1-15, March 2026) consolidates RFC 6749, RFC 6750, RFC 8252, RFC 9700, and browser-based-app best practices into a single standards-track specification. It makes previously optional security extensions—especially PKCE—mandatory, removes insecure grant types (Implicit, Resource Owner Password Credentials), and mandates exact redirect URI matching. RFC 8414 defines the authorization server metadata format and registry; OAuth 2.1 references it as the discovery mechanism but does not redefine its fields. RFC 9700 (Security BCP) provides the threat model and mitigation requirements that OAuth 2.1 normatively incorporates.
Per RFC 8414, the following metadata values are REQUIRED in the oauth-authorization-server metadata response:
issuer — The authorization server's issuer identifier. MUST be an https URL with no query or fragment components. MUST exactly match the URL used to fetch the metadata (Section 3.3).authorization_endpoint — URL of the authorization endpoint. REQUIRED unless no grant types are supported that use the authorization endpoint.token_endpoint — URL of the token endpoint. REQUIRED unless only the implicit grant type is supported.response_types_supported — JSON array of supported OAuth 2.0 response_type values (e.g., ["code"]).The following are not strictly REQUIRED by RFC 8414 but are strongly RECOMMENDED for a secure OAuth 2.1 deployment:
scopes_supported — RECOMMENDED. JSON array of supported scope values.jwks_uri — OPTIONAL but highly RECOMMENDED. URL of the JWK Set document (MUST use https). Required for clients to validate server signatures and for asymmetric client auth.code_challenge_methods_supported — OPTIONAL in RFC 8414, but OAuth 2.1 makes PKCE mandatory. Therefore, publishing this field (containing at least ["S256"]) is RECOMMENDED so clients can detect PKCE support (RFC 9700 Section 2.1.1; OAuth 2.1 Section 4.1.1).grant_types_supported — OPTIONAL (defaults to ["authorization_code", "implicit"]). In OAuth 2.1, should reflect only supported grants (e.g., ["authorization_code", "client_credentials", "refresh_token"]). Note: OAuth 2.1 removes implicit, so the default is misleading for pure 2.1 servers.token_endpoint_auth_methods_supported — OPTIONAL (defaults to ["client_secret_basic"]). For highest security, servers SHOULD advertise asymmetric methods such as private_key_jwt and tls_client_auth (RFC 9700 Section 2.5).token_endpoint_auth_signing_alg_values_supported — OPTIONAL, but MUST be present if private_key_jwt or client_secret_jwt is advertised. SHOULD support RS256; none MUST NOT be used.revocation_endpoint / revocation_endpoint_auth_methods_supported / revocation_endpoint_auth_signing_alg_values_supported — OPTIONAL. If revocation is supported, auth method metadata follows the same rules as the token endpoint.introspection_endpoint / introspection_endpoint_auth_methods_supported / introspection_endpoint_auth_signing_alg_values_supported — OPTIONAL. RFC 9701 (JWT Response for Token Introspection) and RFC 7662 require authenticated callers; metadata should reflect supported auth methods.pushed_authorization_request_endpoint — Defined by RFC 9126 (PAR). RECOMMENDED for highest security to prevent request tampering and large-URI issues.require_pushed_authorization_requests — Boolean (RFC 9126). If true, the AS accepts authorization request data only via PAR.code_challenge and code_verifier (OAuth 2.1 Section 4.1.1).S256 is Mandatory To Implement (MTI) on the server. Clients capable of using S256 MUST use it. plain is permitted only if the client cannot support S256 for technical reasons and knows the server supports plain (via metadata or out-of-band).code_verifier must be accepted only if code_challenge was present in the authorization request (RFC 9700 Section 2.1.1; OAuth 2.1 Section 7.5).response_type=token) is omitted from OAuth 2.1 (Section 10.1). Servers should not support it; clients must not use it.redirect_uri parameter in the token request is now REQUIRED if the redirect_uri was included in the authorization request (OAuth 2.1 Section 10.2). This closes a loophole where attackers could swap redirect URIs during code exchange.https) except native-app loopback redirects (OAuth 2.1 Section 1.5).tls_client_auth) — RFC 8705private_key_jwt) — RFC 7521 / RFC 7523iss parameter in the authorization response (RFC 9207) SHOULD be used (RFC 9700 Section 2.1; OAuth 2.1 Section 7.15).| Endpoint | Specification | Client Auth Method | Notes |
|---|---|---|---|
| Authorization Endpoint | OAuth 2.1 Section 3.1 | None (user-agent facing) | MUST NOT support CORS. MUST use exact redirect URI matching. |
| Token Endpoint | OAuth 2.1 Section 3.2 | client_secret_basic (default), client_secret_post, private_key_jwt, tls_client_auth, none for public clients |
Asymmetric auth RECOMMENDED. |
| Token Introspection | RFC 7662 | Any token-endpoint auth method, or a dedicated RS access token | RFC 9701 mandates authenticated callers; MUST NOT allow unauthenticated introspection. |
| Token Revocation | RFC 7009 | Same as token endpoint (client_secret_basic default) |
|
| Pushed Authorization Request (PAR) | RFC 9126 | Same as token endpoint | RECOMMENDED. Returns request_uri used at authorization endpoint. |
| Device Authorization | RFC 8628 | Client auth at device endpoint | For input-constrained devices. |
| Dynamic Client Registration | RFC 7591 | Varies (often initial access token or reg access token) | |
| JWKS URI | RFC 8414 | None (public keys) | Used by clients to fetch AS signing keys. |
| Feature | OAuth 2.0 (RFC 6749) | OAuth 2.1 (draft-15) |
|---|---|---|
| PKCE | Optional (RFC 7636 extension) | Mandatory for all authorization code flows |
| Implicit Grant | Supported | Removed / Omitted |
| Password Grant (ROPC) | Supported | Removed / Omitted |
| Redirect URI Matching | Flexible (prefix, wildcard, pattern matching common) | Exact string matching required (except localhost port) |
| Redirect URI in Token Request | Not required | Required if present in auth request |
| Bearer Token in Query String | Allowed | Prohibited |
| Refresh Tokens (Public Clients) | No special constraints | Must be sender-constrained or rotated |
| Client Types | Complex definitions (confidential/public based on ability to maintain cred secrecy) | Simplified: based on whether client has credentials |
| S256 | Optional PKCE method | Mandatory To Implement |