| Internet-Draft | OAuth 2.0 RAR Metadata and Error Signali | January 2026 |
| Zehavi | Expires 11 July 2026 | [Page] |
OAuth 2.0 Rich Authorization Requests (RAR), as defined in [RFC9396], enables clients to request fine-grained authorization using structured JSON objects. While RAR [RFC9396] standardizes the exchange and handling of authorization details, it does not define a mechanism for clients to discover how to construct valid authorization details types.¶
This document defines a machine-readable metadata structure for advertising authorization details type documentation and JSON Schema [JSON.Schema] definitions via OAuth Authorization Server Metadata [RFC8414] and OAuth Resource Server Metadata [RFC9728].¶
In addition, this document defines a new OAuth error code, insufficient_authorization_details, enabling resource servers to return actionable authorization details objects to clients.¶
This note is to be removed before publishing as an RFC.¶
The latest revision of this draft can be found at https://yaron-zehavi.github.io/oauth-rich-authorization-requests-metadata/draft-zehavi-oauth-rar-metadata.html. Status information for this document may be found at https://datatracker.ietf.org/doc/draft-zehavi-oauth-rar-metadata/.¶
Discussion of this document takes place on the Web Authorization Protocol Working Group mailing list (mailto:oauth@ietf.org), which is archived at https://mailarchive.ietf.org/arch/browse/oauth/. Subscribe at https://www.ietf.org/mailman/listinfo/oauth/.¶
Source for this draft and an issue tracker can be found at https://github.com/yaron-zehavi/oauth-rich-authorization-requests-metadata.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 11 July 2026.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
OAuth 2.0 Rich Authorization Requests (RAR) [RFC9396] allows OAuth clients to request structured, fine-grained authorization, beyond the coarse-grained access offered by simple scopes. This has enabled advanced authorization models across domains, such as open banking & API marketplaces, and is well positioned for authorizing AI agents to perform state-changing actions.¶
However, RAR [RFC9396] does not specify how a client discovers the structure of supported authorization_detail types and how to construct syntactically valid authorization details.¶
As a result, clients must rely on out-of-band documentation or static ecosystem profiles, limiting interoperability and preventing dynamic client behavior.¶
This document addresses this gap by defining:¶
A metadata structure for authorization details types, containing both human-readable documentation as well as embedded JSON Schema [JSON.Schema] definitions.¶
Discovery through Authorization Server Metadata [RFC8414], as well as via OAuth 2.0 Protected Resource Metadata [RFC9728].¶
A standardized error signaling mechanism, allowing resource servers to return an authorization details object, to be included in a new Auth request, in order to accomplish a specific request.¶
It is up to implementers to decide if their clients MUST learn to construct valid authorization details objects, and if so whether authorization details types metadata should be provided by authorization servers, resource servers or both.¶
This document also outlines a solution pattern relieving clients from having to learn how to construct valid authorization details objects, instead providing clients the required authorization_details objects in resource servers' error responses. Clients then include the provided authorization details objects in subsequent OAuth requests.¶
This latter option is especially useful, as it enables resource servers to include ephemeral, interaction-specific details in the authorization details object, which are part of the resource domain, such as a risk score, risk profile or an internal interaction identifier.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
There are two main proposed flows, either of them or both may be offered in parallel:¶
Client learns to construct valid authorization details objects from authorization details types metadata provided by authorization servers, resource servers or both.¶
Client obtains authorization details object from resource server's error response, providing an actionable authorization details object, whose inclusion in subsequent OAuth requests is required to accomplish a specific request.¶
Fetch authorization_details_types_metadata from the authorization or resource server's metadata endpoints.¶
Locate schema or retrieve schema_uri.¶
Construct authorization details conforming to the schema.¶
If resource server returns error insufficient_authorization_details, use provided authorization_details in subsequent OAuth request, then provide the obtained token to resource server.¶
| Error Code | Description |
|---|---|
| insufficient_authorization_details | The request is missing required authorization details or the provided authorization details are insufficient. The resource server SHOULD include the required authorization_details
|
The metadata attribute authorization_details_types_metadata is defined for OAuth authorization and resource server metadata, as a JSON object mapping authorization details types to documentation, schema, and examples.¶
This section provides non-normative examples of how this specification may be used to support specific use cases.¶
Client uses access token obtained at login to call payment initiation API¶
POST /payments HTTP/1.1
Host: server.example.com
Content-Type: application/json
Authorization: Bearer eyj... (access token from login)
{
"type": "payment_initiation",
"locations": [
"https://server.example.com/payments"
],
"instructedAmount": {
"currency": "EUR",
"amount": "123.50"
},
"creditorName": "Merchant A",
"creditorAccount": {
"bic": "ABCIDEFFXXX",
"iban": "DE02100100109307118603"
}
}
¶
POST /payments HTTP/1.1
Host: server.example.com
Content-Type: application/json
Authorization: Bearer eyj... (payment approval access token)
{
"type": "payment_initiation",
"locations": [
"https://server.example.com/payments"
],
"instructedAmount": {
"currency": "EUR",
"amount": "123.50"
},
"creditorName": "Merchant A",
"creditorAccount": {
"bic": "ABCIDEFFXXX",
"iban": "DE02100100109307118603"
}
}
¶
-00¶
Document creation¶