| Internet-Draft | OAuth Authority Metadata | October 2026 |
| Zehavi | Expires 14 April 2027 | [Page] |
OAuth metadata advertises supported scopes and authorization details types, but advertised scope values and RAR type identifiers do not themselves describe the authority associated with them.¶
This specification defines authority metadata extensions for OAuth 2.0 Protected Resource Metadata and OAuth 2.0 Authorization Server Metadata.¶
A protected resource can describe the authority it associates with scopes and Rich Authorization Requests (RAR) types, reusable access requirement profiles, and relationships identifying lower-authority alternatives.¶
An authorization server can publish a simpler description of its local authority vocabulary.¶
This metadata can inform authentication and authorization decisions before token issuance and exchange, as well as support authority attenuation.¶
This note is to be removed before publishing as an RFC.¶
Discussion of this document takes place on the Web Authorization Protocol Working Group mailing list (oauth@ietf.org), which is archived at https://mailarchive.ietf.org/arch/browse/oauth/.¶
Source for this draft and an issue tracker can be found at https://github.com/yaron-zehavi/oauth-authority-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 14 April 2027.¶
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 [RFC6749] uses scope values to express requested and granted access.
OAuth 2.0 Rich Authorization Requests (RAR) [RFC9396] provides the authorization_details parameter for structured authorization requests.¶
OAuth 2.0 Authorization Server Metadata [RFC8414] and OAuth 2.0 Protected Resource Metadata [RFC9728] enable discovery of information about authorization servers and protected resources.¶
Supported scope values and RAR types can be advertised using scopes_supported and authorization_details_types_supported, but these are only identifiers, which do not provide a description of their authority: the operations, resources, or effects they authorize.¶
For example, a scope named payments.manage might permit reading, creating, executing, or deleting payment instructions. Its name alone does not establish which operations are permitted.¶
These gaps matter when an authorization server or policy decision point evaluates whether requested authority:¶
is permitted by an existing grant or local policy;¶
aligns with an approved task, purpose, or mission;¶
is broader than necessary;¶
has a lower-authority alternative;¶
requires particular token presentation or authentication properties.¶
This specification defines a common metadata structure to describe the authority of scope values and RAR types.¶
The publication roles are distinct:¶
A protected resource publishes the authority semantics it applies when enforcing access.¶
An authorization server publishes its local understanding of the authority vocabulary it uses when making issuance decisions.¶
Protected resource metadata is resource-bound through the resource attribute defined by [RFC9728].¶
Authorization server metadata describes an issuer-local authority vocabulary. It does not establish how a resource enforces an issued authority.¶
Authorization server authority metadata enables clients, independently operated interfaces, policy services, and administrative tools to discover the issuer's declared interpretation of its scope values and authorization details types. It does not publish issuance policy or predict authorization decisions. An authorization server can maintain the same information privately without publishing this metadata.¶
This specification defines:¶
an authority_metadata parameter for protected resource metadata;¶
an authority_metadata parameter for authorization server metadata;¶
a common authority description model for scopes and RAR types;¶
reusable protected resource access requirement profiles;¶
attenuation relationships;¶
advisory authority ordering through family and rank.¶
This specification does not define:¶
a universal authorization policy language;¶
a universal vocabulary of application actions;¶
a replacement for RAR type definitions or schemas;¶
an authorization server policy decision algorithm;¶
a new OAuth error or remediation protocol;¶
an action approval protocol;¶
a transaction or cross-resource outcome evidence protocol;¶
a general-purpose translation between scopes and RAR objects.¶
The AuthZEN OAuth token issuance profile [AUTHZEN-ISSUANCE] and token exchange binding [AUTHZEN-EXCHANGE] drafts provide mechanisms for policy evaluation in authorization server issuance and exchange flows.¶
This document provides semantic information which can be used in those evaluations. For example, a deployment can resolve a requested scope into an authority description before consulting a policy decision point.¶
This specification does not change those profiles or define an additional AuthZEN request attribute. The transport of resolved metadata to a policy decision point is determined by the applicable profile or deployment.¶
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.¶
The following terms are used:¶
The operations and access a credential or authorization grant permits, including applicable resource and parameter restrictions.¶
Metadata describing the authority represented by an OAuth scope or authorization details type.¶
The authorization server or protected resource publishing an authority metadata document.¶
An authorization server, client, policy decision point, gateway, or other component that consumes authority metadata.¶
A named set of properties a protected resource requires when accepting access carrying a described authority.¶
Replacement or restriction of authority with authority that grants no greater access.¶
A publisher-defined grouping within which authority ranks have a common interpretation.¶
This specification defines the optional attribute authority_metadata for both OAuth Authorization Server Metadata [RFC8414] and OAuth Protected Resource Metadata [RFC9728].¶
The structure depends on the publication context.¶
In protected resource metadata, authority_metadata contains:¶
authorities:REQUIRED. An array of authority entries.¶
access_requirement_profiles:OPTIONAL. An object whose attribute names identify reusable access requirement profiles and whose attribute values describe those profiles.¶
The protected resource context is supplied by the enclosing document's resource attribute. Authority identifiers, profile names, families, and relationship targets are local to that metadata document.¶
Within either publication context:¶
authorities MUST be a JSON array.¶
Each authority entry MUST be a JSON object.¶
A publisher MUST NOT publish more than one entry with the same
combination of kind and value in the same metadata document.¶
An empty authorities array describes no authorities.¶
Omission of an authority entry MUST NOT be interpreted as a statement that the authority is unsupported or unrestricted.¶
This specification permits partial publication. An authority consumer cannot assume that the metadata enumerates every authority accepted or issued by the publisher.¶
The examples use illustrative application vocabularies. They are not standardized action, effect, or risk registries.¶
The following resource accepts a read scope, a management scope that includes read and update access, and a RAR type for document access.¶
{
"resource": "https://documents.example.com",
"authorization_servers": [
"https://as.example.com"
],
"scopes_supported": [
"documents.read",
"documents.manage"
],
"authorization_details_types_supported": ["document-access"],
"authority_metadata": {
"access_requirement_profiles": {
"standard_access": {
"token": {
"max_lifetime": 3600
}
},
"sensitive_access": {
"token": {
"max_age": 300,
"max_lifetime": 600,
"sender_constrained": true
},
"authentication": {
"acr_values": [
"phishing-resistant"
],
"max_age": 300
}
}
},
"authorities": [
{
"id": "documents.read",
"kind": "scope",
"value": "documents.read",
"description": "Read documents accessible to the subject.",
"family": "document_access",
"rank": 10,
"authority": [
{
"resource_type": "document",
"actions": [
"document:read"
],
"effects": [
"data-disclosure"
],
"risk": "low"
}
],
"access_requirement_profile": "standard_access"
},
{
"id": "documents.manage",
"kind": "scope",
"value": "documents.manage",
"description": "Read and update documents accessible to the subject.",
"family": "document_access",
"rank": 20,
"authority": [
{
"resource_type": "document",
"actions": [
"document:read",
"document:update"
],
"effects": [
"data-disclosure",
"state-change"
],
"risk": "medium"
}
],
"access_requirement_profile": "sensitive_access",
"relationships": [
{
"relation": "can_be_attenuated_to",
"target": "documents.read"
}
]
},
{
"id": "document_access.rar",
"kind": "authorization_details_type",
"value": "document-access",
"description": "Access to specified documents under type-specific restrictions.",
"family": "document_access",
"authority": [
{
"resource_type": "document",
"actions": [
"document:read",
"document:update"
],
"effects": [
"data-disclosure",
"state-change"
]
}
],
"access_requirement_profile": "sensitive_access"
}
]
}
}
¶
The RAR entry does not receive a fixed rank in this example because its concrete authority varies with the requested actions and document restrictions.¶
A client requests:¶
resource=https://documents.example.com scope=documents.manage¶
The resource metadata identifies documents.read as an attenuation target.¶
An AS might determine that a read-only task does not need update authority. Its policy may then issue documents.read or decline the request and suggest that the client request documents.read.¶
The metadata identifies the containment relationship. It does not determine which response the AS chooses or establish that read access satisfies the client's task.¶
Access requirement profiles are published only in protected resource metadata.¶
A profile describes properties the resource requires when accepting a token carrying the associated authority. It does not instruct an authorization server to issue a token or grant that authority.¶
access_requirement_profiles is a JSON object keyed by profile name.¶
Each profile can contain:¶
description:OPTIONAL. Human-readable explanatory text.¶
token:OPTIONAL. Token presentation requirements.¶
authentication:OPTIONAL. End-user authentication requirements.¶
Profile names are local, case-sensitive identifiers. They do not imply standardized security levels.¶
For example:¶
{
"access_requirement_profiles": {
"sensitive_access": {
"description": "Requirements for sensitive account access.",
"token": {
"max_age": 300,
"max_lifetime": 600,
"sender_constrained": true
},
"authentication": {
"acr_values": [
"phishing-resistant"
],
"max_age": 300
}
}
}
}
¶
The token object can contain:¶
max_age:OPTIONAL. A positive integer expressing, in seconds, the maximum acceptable elapsed time since the access token was issued.¶
max_lifetime:OPTIONAL. A positive integer expressing, in seconds, the maximum acceptable total lifetime of the access token, from issuance to expiration.¶
sender_constrained:OPTIONAL. A boolean. If true, presentation must satisfy an
applicable sender-constraining mechanism.¶
A boolean value of false means that this profile does not require the property. It does not prohibit the property or override stricter policy.¶
sender_constrained: true means the resource will reject a request using a token that is not sender-constrained or if its associated presentation proof is not successfully validated under the applicable mechanism.¶
This attribute does not select a mechanism. Mechanism selection depends on the token profile, applicable discovery metadata, and deployment agreement.¶
The authentication object can contain:¶
acr_values:OPTIONAL. A non-empty array of acceptable authentication context class reference values.¶
max_age:OPTIONAL. A positive integer expressing, in seconds, the maximum acceptable elapsed time since the relevant end-user authentication event. The resource determines that event's time from validated authentication information associated with the access token, such as an auth_time claim in a validated JWT access token or a trusted token introspection response, as described in [RFC9470].¶
If both attributes are present, both requirements apply.¶
acr_values lists alternatives, not cumulative authentication requirements. The resource accepts an authentication context recognized as satisfying at least one listed value.¶
Authentication freshness is distinct from token freshness. Issuing a new token does not necessarily establish a new authentication event.¶
If an authority entry has no access_requirement_profile, no additional profile is declared for that entry.¶
Resource-wide policy and other applicable requirements still apply.¶
A profile cannot weaken a requirement established by the resource's other enforcement policy.¶
Protected resource authority entries can publish inline relationships.
Each relationship object contains:¶
relation:REQUIRED. A relationship name.¶
target:REQUIRED. The id of another authority entry in the same metadata
document.¶
The containing authority entry is the relationship source. No from attribute is used.
This document defines one relationship:¶
can_be_attenuated_to¶
The target MUST exist, MUST differ from the source, and MUST be in the same metadata document.¶
Both entries MUST declare the same family.¶
The relationship:¶
{
"relation": "can_be_attenuated_to",
"target": "documents.read"
}
¶
asserts that the target represents no greater authority than the source under the protected resource's authority semantics.¶
For relationships between scope entries, this relationship asserts that the target represents no greater authority than the source under the protected resource's applicable semantics and restrictions.¶
Where either entry describes a RAR type, the relationship identifies a candidate attenuation target. It does not establish containment between concrete authorization details objects or between a concrete object and a scope grant. A consumer MUST establish concrete containment using applicable type semantics, parameter restrictions, and policy before substitution.¶
For example, if documents.manage authorizes both reading and modifying documents, it can declare attenuation to a scope that authorizes reading the same documents.¶
Conversely, a payment execution authority does not automatically contain payment preparation or payment status access. Those are different operations. A relationship is valid only if the resource's actual semantics establish the asserted containment.¶
A publisher MUST NOT declare this relationship based solely on rank, risk, or perceived similarity. The relationship does not assert that the target satisfies the client's task, purpose, or Mission.¶
For parameterized authorities such as Rich Authorization Requests (RAR) types, the relationship identifies a potential attenuation target. It does not assert containment between arbitrary instances of the source and target types. Concrete containment requires the applicable type semantics and parameter restrictions.¶
Relationships can identify targets of a different kind.¶
However, identifying a target does not define a transformation of authorization request data.¶
For RAR types, authority comparison may depend on concrete object parameters. An asserted relationship does not authorize dropping, widening, or changing parameter restrictions.¶
A consumer needs applicable type semantics or configured policy to establish a safe concrete transformation. This specification does not define that transformation.¶
If containment cannot be established for the concrete request, the relationship alone is insufficient grounds for replacement.¶
Containment is transitive when the same resource context and compatible semantic restrictions apply.
A consumer is not required to compute a transitive closure, select a target, or perform substitution.
Unrecognized relationship names MUST NOT be interpreted as can_be_attenuated_to.
Consumers traversing relationships SHOULD apply limits to traversal depth and visited entries to avoid unbounded processing.¶
family and rank provide advisory ordering.¶
A consumer can use them to:¶
display authorities in a publisher-defined order;¶
prioritize evaluation of lower-authority candidates;¶
organize authority choices for human review.¶
Ranks can be compared only within the same family and metadata document.¶
Rank MUST NOT be used by itself to establish:¶
authority containment;¶
equivalent authority;¶
safe attenuation;¶
satisfaction of a purpose or Mission;¶
comparable security or risk across publishers.¶
Where an attenuation relationship and ranks are both published, the target rank SHOULD be no greater than the source rank.¶
An AS that fetches metadata in response to a client-supplied resource indicator can be exposed to server-side request forgery.¶
Implementations SHOULD validate destinations, constrain redirects, control access to internal addresses, and apply request size and timeout limits.¶
A publisher can incorrectly describe a scope, type, or containment relationship.¶
An authenticated document proves the document's source, not the correctness of its semantic claims.¶
Consumers should rely only on trusted publishers and understood vocabularies when using metadata for authorization decisions.¶
Authority semantics and access requirements may change.¶
Consumers SHOULD use bounded caching and an appropriate refresh strategy. An old description must not be assumed to remain valid indefinitely.¶
This specification does not define semantic version negotiation or bind a token to a metadata version.¶
A malicious client can select an attacker-controlled resource whose metadata understates the authority represented by a scope or authorization details type, or declares weaker access requirements.¶
If an authorization server applies that metadata outside its resource context, the client might obtain a token usable at another resource under weaker policy.¶
An authorization server MUST bind protected resource authority metadata used in an issuance decision to the protected resource for which that metadata was validated. Protected resource authority metadata MUST be associated with the expected resource identity, not merely with the location from which the document was retrieved.¶
Scope values, authority identifiers, families, and ranks from one resource MUST NOT be used to establish authority semantics for another resource.¶
An authorization server MUST NOT treat resource metadata as authorization to weaken existing grant restrictions, client policy, subject authority, or AS-local minimum security requirements.¶
Omitted or weaker access requirements do not override those requirements.¶
When protected resource authority metadata informs token issuance, the authorization server MUST audience-restrict the resulting token to the resource or resources independently evaluated for that issuance decision, using the mechanisms described in [RFC8707].¶
A protected resource MUST reject an access token that is not intended for that resource.¶
An attacker-controlled resource MUST NOT be able to select an audience mapping that makes its tokens acceptable to another resource.¶
Publication of metadata, including an authorization_servers member naming an AS, does not establish that the publisher is trusted by that AS.¶
Token refresh or exchange that changes the target resource requires evaluation in the new resource context. A previous issuance decision based on another resource's metadata does not establish authority for the new target.¶
An OAuth request can identify more than one protected resource. Each resource's authority metadata and access requirements apply only within that resource's context.¶
An authorization server may issue a token intended for multiple resources, require a revised request, or reject an unsupported combination, subject to the applicable OAuth protocol and local policy.¶
If the authorization server issues one token intended to satisfy the requirements of multiple resources, that token MUST satisfy all applicable requirements. Requirements that cannot be jointly satisfied MUST NOT be resolved by selecting the weaker requirement.¶
This specification does not define a profile-merging algorithm.¶
The authority of several scopes may not equal a simple union of their individual descriptions.¶
A resource can apply combination-dependent semantics, and a token can also carry claims or authorization details that affect enforcement.¶
This specification does not define scope combination semantics. Consumers need applicable resource policy when evaluating combinations.¶
Type-level metadata must not cause a consumer to ignore restrictions in a concrete authorization details object.¶
Unsafe transformations can widen document access, payment destinations, amounts, or other parameter-defined authority.¶
Publishing sender-constraining or freshness requirements does not implement them.¶
Resources remain responsible for enforcement. Issuing a short-lived token does not prove recent authentication.¶
Relationship graphs can contain cycles or excessive numbers of entries.¶
Consumers SHOULD bound graph processing. Rank must not be used as a shortcut for proving containment.¶
Human-readable descriptions can improve disclosure but do not prove comprehension.¶
Descriptions SHOULD be displayed as untrusted text. Consumers MUST NOT execute markup, scripts, or instructions embedded in descriptions.¶
Authority metadata can disclose supported operations, resource types, and authentication expectations.¶
Publishers should consider whether public metadata exposes sensitive operational information.¶
Published profiles SHOULD describe general access requirements rather than user-specific authentication state or individual authorization decisions.¶
This specification requests registration in the "OAuth Protected Resource Metadata" registry established by [RFC9728]:¶
TODO¶
This section is to be removed before publication as an RFC.¶
Evaluate whether sender-constraining mechanism identifiers are needed in access requirement profiles.¶
Evaluate whether additional metadata is needed to associate type-specific semantic definitions with RAR entries.¶
Determine whether future revisions should support parameter-dependent access profiles and attenuation transformations.¶
Determine whether extension registries are needed for authority kinds, relationship names, and access requirement attributes.¶
-00¶
Initial working draft.¶
Defined shared scope and RAR authority descriptions.¶
Defined protected resource access requirement profiles.¶
Defined inline attenuation relationships.¶
Defined advisory family and rank ordering.¶
Defined simpler AS-local authority metadata without a support flag, resource selectors, or authority identifiers.¶
Left attenuation response behavior to AS policy.¶