Skip to content
Agent Identity

IETF · May 2023

OAuth 2.0 Rich Authorization Requests

RFC 9396

T. Lodderstedt, J. Richer, B. Campbell

RFCStableAuthorizationFoundationField guide

An agent that needs 'create a draft invoice for vendor X under $500' cannot express that in scope=invoices.write. RAR is the OAuth-native answer; AAuth R3 is the agent-native answer.

At a glance

Problem
OAuth scopes are flat strings. Fine-grained, structured permissions (this account, that payment, those files) do not fit. RAR adds an authorization_details JSON parameter.
Identity / authn / authz
Authorization granularity. Complements, does not replace, scopes.

Actors

  • Client
  • Authorization server
  • Resource server

01

The gap for agents

An agent that needs 'create a draft invoice for vendor X under $500' cannot say that with scope=invoices.write. RFC 9396 adds authorization_details: a JSON array of typed objects (locations, actions, datatypes, identifier, privileges, …).

AAuth R3 is the cousin that uses vocabularies agents already speak. Inside vanilla OAuth (including MCP if the AS supports it), RAR is the structured-scope tool.

02

Actors and trust boundaries

The AS must understand the type URIs. The RS must enforce the same types. A client that invents fields the RS ignores has a false sense of constraint. Users must be shown a rendering they can actually decide on — otherwise RAR is theatre.

03

Mechanics

authorization_details on authorize and token requests (and in JWT access tokens). Each object has a required type plus type-specific fields. Combine with PAR because the payload is large. A 2026 WG draft (draft-ietf-oauth-rar-metadata-remediation) works on metadata and error remediation.

authorization_detailsfrom spec
Quoted RFC 9396: array of objects with required type plus type-specific fields.

04

Step-by-step flows

Flow 1

Structured grant

  1. 1

    Client builds authorization_details (your type URI, actions, locations, limits).

  2. 2

    Pushes via PAR, user consents to the rendered request.

  3. 3

    Access token carries the granted details (RFC 9068 may include them).

  4. 4

    RS authorizes the specific call against those details, not just a scope string.

05

Identity vs authentication vs authorization

Authorization granularity. Complements scopes. Does not identify the user or the agent instance.

06

How it composes

  • PAR

    Usual transport.

  • JWT access tokens

    RS can read authorization_details without introspection.

  • AAuth R3

    Agent-native analogue on AAuth, not wire-compatible.

  • FAPI 2.0

    Often combined in high-value APIs.

07

What bites agent implementers

  • AS understands, RS does not

    Granting structured details the RS ignores collapses back to a coarse token.

  • Unregistered types

    Define a type URI you control. Do not reuse someone else's type with different fields.

08

Stability — what you can ship

RFC 9396, May 2023. Stable. https://www.rfc-editor.org/rfc/rfc9396.html

Catalog claims (short form)

authorization_details
Array of objects with a required type field plus type-specific fields (locations, actions, datatypes, identifier, privileges, …).

Implementer notes

Define a type URI you control. A 2026 WG draft (draft-ietf-oauth-rar-metadata-remediation) works on metadata and error remediation for RAR. AAuth R3 is a cousin idea using vocabularies agents already speak (OpenAPI, MCP, GraphQL).

Relationship to others

Primary sources

  • RFC 9396https://www.rfc-editor.org/rfc/rfc9396.html