Published RFCRFC 6749
The base authorization framework: a client gets an access token from an authorization server and presents it to a resource server.
Relations diagram
flowchart LR
s_oauth2["OAuth 2.0"]
s_oauth21["OAuth 2.1"]
s_pkce["PKCE"]
s_par["Pushed Authorization Requests"]
s_rar["Rich Authorization Requests"]
s_device_grant["Device Authorization Grant"]
s_first_party_apps["OAuth for First-Party Apps"]
s_token_exchange["Token Exchange"]
s_jwt_bearer["JWT Bearer Grant and Client Authentication"]
s_introspection["Token Introspection"]
s_dpop["DPoP"]
s_mtls["Mutual-TLS Client Authentication and Certificate-Bound Tokens"]
s_attestation_client_auth["Attestation-Based Client Authentication"]
s_as_metadata["Authorization Server Metadata"]
s_dcr["Dynamic Client Registration"]
s_openid4vci["OpenID for Verifiable Credential Issuance"]
s_openid4vp["OpenID for Verifiable Presentations"]
s_oidc_core["OpenID Connect Core"]
s_oauth_security_bcp["OAuth 2.0 Security Best Current Practice"]
s_browser_based_apps["OAuth 2.0 for Browser-Based Applications"]
s_native_apps["OAuth 2.0 for Native Apps"]
s_iss_authz_response["Authorization Server Issuer Identification"]
s_jar["JWT-Secured Authorization Request"]
s_refresh_token_expiration["Refresh Token and Authorization Expiration"]
s_revocation["Token Revocation"]
s_aims["AI Identity Management System"]
style s_oauth2 stroke-width:3px
s_oauth21 -->|Would replace| s_oauth2
s_pkce -->|Extends| s_oauth2
s_par -->|Extends| s_oauth2
s_rar -->|Extends| s_oauth2
s_device_grant -->|Extends| s_oauth2
s_first_party_apps -->|Extends| s_oauth2
s_token_exchange -->|Extends| s_oauth2
s_jwt_bearer -->|Extends| s_oauth2
s_introspection -->|Extends| s_oauth2
s_dpop -->|Extends| s_oauth2
s_mtls -->|Extends| s_oauth2
s_attestation_client_auth -->|Extends| s_oauth2
s_as_metadata -->|Extends| s_oauth2
s_dcr -->|Extends| s_oauth2
s_openid4vci -->|Builds on| s_oauth2
s_openid4vp -->|Builds on| s_oauth2
s_oidc_core -->|Builds on| s_oauth2
s_oauth_security_bcp -->|Works with| s_oauth2
s_browser_based_apps -->|Extends| s_oauth2
s_native_apps -->|Extends| s_oauth2
s_iss_authz_response -->|Extends| s_oauth2
s_jar -->|Extends| s_oauth2
s_refresh_token_expiration -->|Extends| s_oauth2
s_revocation -->|Extends| s_oauth2
s_aims -->|Builds on| s_oauth2
Explainer
Documented support
No sourced support entries collected yet. This says nothing about how widely it is used.
Working-group draftdraft-ietf-oauth-v2-1-172026-10-31
Consolidates OAuth 2.0 with its security best practice: PKCE for all code flows, no implicit or password grants, exact redirect URI matching.
- Would replace: OAuth 2.0
- Builds on: PKCE
Relations diagram
flowchart LR
s_oauth21["OAuth 2.1"]
s_oauth2["OAuth 2.0"]
s_pkce["PKCE"]
s_deferred_token_response["Deferred Token Response"]
style s_oauth21 stroke-width:3px
s_oauth21 -->|Would replace| s_oauth2
s_oauth21 -->|Builds on| s_pkce
s_deferred_token_response -->|Extends| s_oauth21
Explainer
Documented support
No sourced support entries collected yet. This says nothing about how widely it is used.
Published RFCRFC 7636
Binds an authorization code to the client that requested it with a one-time secret, so an intercepted code cannot be redeemed.
Relations diagram
flowchart LR
s_pkce["PKCE"]
s_oauth2["OAuth 2.0"]
s_oauth21["OAuth 2.1"]
s_fapi2["FAPI 2.0 Security Profile"]
s_native_apps["OAuth 2.0 for Native Apps"]
style s_pkce stroke-width:3px
s_pkce -->|Extends| s_oauth2
s_oauth21 -->|Builds on| s_pkce
s_fapi2 -->|Builds on| s_pkce
s_native_apps -->|Builds on| s_pkce
Explainer
Documented support
No sourced support entries collected yet. This says nothing about how widely it is used.
Published RFCRFC 9126
The client sends the authorization request to the server over a back channel first and passes only a reference through the browser.
Relations diagram
flowchart LR
s_par["Pushed Authorization Requests"]
s_oauth2["OAuth 2.0"]
s_fapi2["FAPI 2.0 Security Profile"]
s_jar["JWT-Secured Authorization Request"]
style s_par stroke-width:3px
s_par -->|Extends| s_oauth2
s_fapi2 -->|Builds on| s_par
s_jar -->|Works with| s_par
Explainer
Documented support
- PingFederate (Identity provider): Pushed authorization request endpoint source (verified 2026-11-11)
- Keycloak (Identity provider): PAR is listed as a supported server feature source (verified 2026-11-11)
- Spring Authorization Server (Library): Pushed authorization request endpoint source (verified 2026-11-11)
- Duende IdentityServer (Library): RFC 9126 is listed in its supported specifications source (verified 2026-11-11)
Published RFCRFC 9396
Replaces coarse scope strings with structured authorization_details, such as a specific payment with an amount and a recipient.
Relations diagram
flowchart LR
s_rar["Rich Authorization Requests"]
s_oauth2["OAuth 2.0"]
s_rar_metadata_remediation["RAR Metadata and Error Remediation"]
style s_rar stroke-width:3px
s_rar -->|Extends| s_oauth2
s_rar_metadata_remediation -->|Extends| s_rar
Explainer
Documented support
- Auth0 (Identity provider): authorization_details in the authorization code flow with PAR, and in CIBA source (verified 2026-11-11)
- PingFederate (Identity provider): Supports OAuth rich authorization requests source (verified 2026-11-11)
- node-oidc-provider (Library): RFC 9396 is in its list of implemented specs source (verified 2026-11-11)
Published RFCRFC 8628
Lets devices without a browser or keyboard, such as TVs and CLIs, get tokens while the user approves on another device.
Relations diagram
flowchart LR
s_device_grant["Device Authorization Grant"]
s_oauth2["OAuth 2.0"]
s_cross_device_bcp["Security of Cross-Device Flows"]
style s_device_grant stroke-width:3px
s_device_grant -->|Extends| s_oauth2
s_cross_device_bcp -->|Works with| s_device_grant
Explainer
Documented support
- Microsoft Entra ID (Identity provider): Supports the device authorization grant source (verified 2026-11-11)
- Okta (Identity provider): Device Authorization grant on org and custom authorization servers source (verified 2026-11-11)
- Keycloak (Identity provider): Device flow is listed as a supported server feature source (verified 2026-11-11)
- Authlib (Library): Ships a generic implementation of RFC 8628 source (verified 2026-11-11)
WG last call or write-updraft-ietf-oauth-first-party-apps-042026-08-26
A native authorization challenge flow for apps run by the same party as the authorization server, without a browser redirect.
Relations diagram
flowchart LR
s_first_party_apps["OAuth for First-Party Apps"]
s_oauth2["OAuth 2.0"]
style s_first_party_apps stroke-width:3px
s_first_party_apps -->|Extends| s_oauth2
Explainer
Documented support
No sourced support entries collected yet. This says nothing about how widely it is used.
Status unknown
Adds an iss parameter to the authorization response so the client can tell which authorization server answered, a countermeasure to mix-up attacks.
Relations diagram
flowchart LR
s_iss_authz_response["Authorization Server Issuer Identification"]
s_oauth2["OAuth 2.0"]
style s_iss_authz_response stroke-width:3px
s_iss_authz_response -->|Extends| s_oauth2
Open
Documented support
No sourced support entries collected yet. This says nothing about how widely it is used.
Status unknown
Carries the authorization request parameters inside a JWT, signed and optionally encrypted, passed by value or by reference, so the request gains integrity, source authentication and confidentiality.
Relations diagram
flowchart LR
s_jar["JWT-Secured Authorization Request"]
s_oauth2["OAuth 2.0"]
s_jwt["JSON Web Token"]
s_par["Pushed Authorization Requests"]
style s_jar stroke-width:3px
s_jar -->|Extends| s_oauth2
s_jar -->|Builds on| s_jwt
s_jar -->|Works with| s_par
Open
Documented support
No sourced support entries collected yet. This says nothing about how widely it is used.
Status unknown
New token endpoint response parameters that tell the client when the refresh token and the underlying user authorization expire.
Relations diagram
flowchart LR
s_refresh_token_expiration["Refresh Token and Authorization Expiration"]
s_oauth2["OAuth 2.0"]
style s_refresh_token_expiration stroke-width:3px
s_refresh_token_expiration -->|Extends| s_oauth2
Open
Documented support
No sourced support entries collected yet. This says nothing about how widely it is used.
Status unknown
Lets the token endpoint answer with a deferral code and polling interval instead of a token, so any grant can complete asynchronously by polling or callback.
Relations diagram
flowchart LR
s_deferred_token_response["Deferred Token Response"]
s_oauth21["OAuth 2.1"]
style s_deferred_token_response stroke-width:3px
s_deferred_token_response -->|Extends| s_oauth21
Open
Documented support
No sourced support entries collected yet. This says nothing about how widely it is used.
Status unknown
Metadata for discovering the authorization details types a server supports, and a standard way to signal and remediate failures caused by insufficient authorization details.
Relations diagram
flowchart LR
s_rar_metadata_remediation["RAR Metadata and Error Remediation"]
s_rar["Rich Authorization Requests"]
s_as_metadata["Authorization Server Metadata"]
style s_rar_metadata_remediation stroke-width:3px
s_rar_metadata_remediation -->|Extends| s_rar
s_rar_metadata_remediation -->|Works with| s_as_metadata
Open
Documented support
No sourced support entries collected yet. This says nothing about how widely it is used.