| Internet-Draft | OAuth Authorization Evidence | March 2026 |
| Liu, et al. | Expires 18 September 2026 | [Page] |
This specification defines JWT claims for including authorization evidence and audit trail information in OAuth 2.0 access tokens. These claims enable cryptographic proof of user consent, supporting accountability, compliance, and dispute resolution in scenarios where autonomous agents act on behalf of users.¶
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 18 September 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.¶
In traditional OAuth 2.0 flows, the Authorization Server records user consent internally, but this information is not typically conveyed to Resource Servers or included in access tokens. For many use cases, this is sufficient. However, emerging scenarios—particularly those involving AI agents acting autonomously on behalf of users—require stronger guarantees about user intent and consent.¶
This specification addresses the need for:¶
This specification defines two JWT claims: evidence for user
confirmation records, and audit_trail for semantic traceability
metadata.¶
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.¶
While this specification is optimized for use with Pushed Authorization Requests (PAR) [RFC9126], the mechanism defined herein is designed to be general-purpose and MAY be used with various OAuth 2.0 authorization flows, including but not limited to:¶
Different authorization flows may have different security considerations when using this specification. Implementations SHOULD carefully evaluate the security implications based on their specific deployment scenario.¶
The evidence claim contains a record of the user's confirmation
action during the authorization process. It is included in access tokens
to provide verifiable proof of user consent.¶
{
"evidence": {
"id": "evidence-abc123",
"user_confirmation": {
"displayed_content": "Add items under $50 to cart",
"user_action": "confirmed_via_button_click",
"timestamp": 1731320595,
"interface_version": "consent-ui-v2.1"
},
"session_context": {
"session_id": "session_xyz789",
"client_instance": "dfp_abc123",
"channel": "mobile-app"
},
"as_signature": "eyJhbGciOiJSUzI1NiIs..."
}
}
| Field | Type | Requirement | Description |
|---|---|---|---|
| id | string | REQUIRED | Unique identifier for this evidence record. |
| user_confirmation | object | REQUIRED | Details of the user's confirmation action. |
| session_context | object | OPTIONAL | Session and device context information. |
| as_signature | string | REQUIRED | AS signature over the confirmation record. |
| Field | Type | Requirement | Description |
|---|---|---|---|
| displayed_content | string | REQUIRED | The text shown to user for confirmation. |
| user_action | string | REQUIRED | How the user confirmed (e.g., button click). |
| timestamp | NumericDate | REQUIRED | When the confirmation occurred. |
| interface_version | string | OPTIONAL | Version of the consent UI used. |
| Field | Type | Requirement | Description |
|---|---|---|---|
| session_id | string | OPTIONAL | OAuth session identifier. |
| client_instance | string | OPTIONAL | Device/client instance fingerprint. |
| channel | string | OPTIONAL | Authorization channel (mobile, web, etc.). |
The as_signature field contains a cryptographic signature from
the Authorization Server over the evidence record. This signature:¶
The signature MUST be computed over the following fields of the
evidence object:¶
The as_signature field itself MUST be excluded from the
signature computation. The signature input MUST be constructed using
JSON Canonicalization Scheme (JCS) as defined in RFC 8785 to ensure
deterministic serialization. The signature format MUST be a detached
JWS (JSON Web Signature) using the AS's signing key.¶
The audit_trail claim provides metadata for semantic traceability,
enabling analysis of how user intent was interpreted and translated into
authorized operations.¶
{
"audit_trail": {
"evidence_ref": "evidence-abc123",
"semantic_expansion_level": "medium",
"interpretation_notes": "Mapped 'cheap' to '$50 limit'",
"proposal_ref": "urn:uuid:proposal-xyz"
}
}
| Field | Type | Requirement | Description |
|---|---|---|---|
| evidence_ref | string | OPTIONAL | Reference to the evidence record by ID. |
| semantic_expansion_level | string | OPTIONAL | Degree of interpretation applied (none, low, medium, high). |
| interpretation_notes | string | OPTIONAL | Human-readable notes about semantic mapping. |
| proposal_ref | URI | OPTIONAL | Reference to the original authorization proposal. |
The semantic_expansion_level field indicates how much the system
interpreted or expanded the user's original intent:¶
The evidence and audit trail claims serve several important purposes:¶
| Purpose | Description |
|---|---|
| Intent Provenance | Records what the user intended, preventing disputes about authorization scope. |
| Action Interpretation | Documents how the system translated intent into operations, showing the reasoning process. |
| Semantic Transparency | Reveals any expansions or defaults applied, enabling users to understand what was authorized. |
| User Confirmation | Provides timestamped proof that the user reviewed and approved the operation. |
| Accountability Support | Enables post-hoc analysis to determine responsibility for erroneous transactions. |
When issuing an access token with evidence, the AS MUST:¶
The AS SHOULD retain evidence records for a configurable period to support:¶
Resource Servers MAY verify the evidence claim by:¶
Resource Servers SHOULD log evidence information for audit purposes, including:¶
The AS signature over user_confirmation is critical for evidence integrity. Implementations MUST:¶
The evidence claim is protected by the access token's signature. However,
the as_signature field provides an additional layer of protection
specifically for the user confirmation record.¶
Evidence records are bound to specific access tokens. The evidence ID and timestamp help detect attempts to reuse evidence across different authorization contexts.¶
The displayed_content field may contain sensitive information about
the user's intent. Implementations SHOULD:¶
Evidence records may be subject to data protection regulations. Implementations MUST:¶
This specification registers the following claims in the "JSON Web Token Claims" registry:¶
The following shows a complete access token with both evidence and audit_trail claims:¶
{
"iss": "https://as.example.com",
"sub": "user_12345",
"aud": "https://api.shop.example",
"exp": 1731369540,
"iat": 1731320700,
"jti": "urn:uuid:token-abc-123",
"act": {
"sub": "spiffe://myassistant.example/agent"
},
"evidence": {
"id": "evidence-abc123",
"user_confirmation": {
"displayed_content": "Add items under $50 to cart during Nov 11 sale",
"user_action": "confirmed_via_button_click",
"timestamp": 1731320595,
"interface_version": "consent-ui-v2.1"
},
"session_context": {
"session_id": "session_xyz789",
"client_instance": "dfp_abc123",
"channel": "mobile-app"
},
"as_signature": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
},
"audit_trail": {
"evidence_ref": "evidence-abc123",
"semantic_expansion_level": "medium",
"interpretation_notes": "User said 'cheap items', mapped to '$50 limit'",
"proposal_ref": "urn:uuid:proposal-xyz"
},
"policy_ref": {
"id": "policy-cart-50",
"endpoint": "https://as.example.com/policies/policy-cart-50"
}
}
The authors would like to thank Brian Campbell for his valuable feedback and insightful discussions during the development of this specification. His contributions helped shape key design decisions.¶