| Internet-Draft | agent-trust-profile | September 2026 |
| Azam | Expires 20 March 2027 | [Page] |
Autonomous AI agents act on behalf of people and organizations across system and organizational boundaries. Existing credentials establish that a token is valid; they do not express which agent is acting, for whom, under what delegated authority, within which constraints, and whether that authority is still current. This document profiles existing standards — JWS, OAuth/OIDC, SPIFFE/WIMSE workload identity, DPoP-style proof of possession, OpenID AuthZEN and OpenID Federation — to carry those semantics: agent identity and principal binding, delegation with authority attenuation, capability-based authorization with constraints, request proof of possession, authorization attestations, tamper-evident provenance, revocation, and cross-organization trust. It defines no new cryptography, transport or token format.¶
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 20 March 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.¶
An agent request today typically carries a bearer token. A relying party can conclude "this credential is valid" but not "this specific agent, acting for this principal, holds delegated authority for this action under these limits, and that authority has not been revoked". The profile fills that gap with verifiable objects layered on existing standards. Conformance is defined by executable vectors (Section 12).¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHOULD", "MAY" are to be interpreted as
described in [RFC2119]. All signed objects are compact JWS [RFC7515] with JOSE headers alg, typ
and kid; alg MUST be ES256 or EdDSA. Public keys are JWKs [RFC7517]. Timestamps are ISO 8601
in UTC. Canonicalization for hashing is JCS [RFC8785].¶
| Term | Meaning |
|---|---|
| Agent | Cryptographically identifiable software actor with a stable identifier, lifecycle and credentials |
| Principal | The human, service or organization the agent acts for; always distinct from the agent |
| Organization | The trust domain that operates the agent and signs its delegations and attestations |
| Capability |
{action, resource, constraints?} — a machine-evaluable unit of authority |
| Delegation | A grant of capabilities from an issuer to a subject agent with validity and status |
| Effective authority | The intersection of every grant in the chain, never the union |
| Decision |
ALLOW, DENY or REQUIRE_APPROVAL, derived from evidence rows |
An agent identifier MUST be URI-safe, stable, non-secret and unique within its organization. SPIFFE IDs
[SPIFFE], DIDs, OIDC subjects and organization-specific URIs are acceptable. Lifecycle states are
pending, active, suspended, revoked, retired; only active agents may be authorized.
Credentials bind a public JWK to the agent (kid, not_before, not_after, issuer, status).
Issuer-signed identity tokens ([RFC7519] JWT-SVIDs, IdP JWTs) MAY be presented in the Agent-Credential header
and validated against configured trust anchors (OIDC issuers via discovery JWKS; SPIFFE trust domains via
their bundle endpoint); a valid presented token MAY stand in for a registered key.¶
Every agent SHOULD carry an owner principal. Verifiers MUST report the principal as separate evidence and MUST NOT conflate agent and principal.¶
action is exact; resource is exact or a trailing-* prefix. Constraint keys defined here: max_value
and max_total (numbers), currency (ISO 4217), region (list). A child capability is covered by a
parent when actions are equal, the parent resource contains the child resource, and the child constraints
are tighter (max_value/max_total not greater; region a subset; other keys equal). Delegation MUST
refuse anything wider (exceeds_parent). max_total denotes a lifetime budget across allowed requests.¶
Type agent-trust-delegation+jwt. Claims: iss (organization), sub (subject agent), jti
(delegation id), iat, optional nbf/exp, and atp with v (1), issuer ({type, id}),
capabilities, constraints, effective, parent, parent_hash (base64url SHA-256 of the parent JWS),
depth, task. A chain root MUST be issued by a principal at depth 0; each child MUST be issued by the
parent's subject, reference its parent by jti and parent_hash, increment depth, and satisfy
capabilities ⊆ parent effective with effective = attenuate(parent effective, capabilities). Chains MUST
NOT exceed depth 8.¶
A detached JWS of type agent-trust-proof+jwt in the Agent-Proof header, modelled on DPoP [RFC9449]:
iss (agent), htm, htu (scheme and host lower-cased, no query or fragment), iat, exp, jti,
rh (base64url SHA-256 of the exact request body). Verifiers MUST check the signature against the
credential named by kid, htm, htu, rh, expiry and skew, and SHOULD reject replayed jti values.¶
Each consequential event is a CloudEvents-shaped [CLOUDEVENTS] envelope hash-chained per organization
(prev_hash, hash = SHA-256(JCS(envelope))), signed with the organization key (es256:<kid>:<sig>) or
an HMAC. Stores MUST be append-only. A signed ledger-head checkpoint (agent-trust-ledger-head+jwt)
enables external anchoring.¶
Subjects: agent, credential, delegation, attestation, policy version. Revoking any link of a delegation chain invalidates every descendant at verification time. Short-lived credentials plus an indexed status lookup are RECOMMENDED.¶
Organizations publish an entity configuration (keys, endpoints, authority_hints) and MAY act as anchors
publishing signed subordinate statements (entity-statement+jwt), following the shape of OpenID
Federation [OIDFED]. Trust level 1 recognises an organization; level 2 permits its attested agents to
act under the relying organization's policy. Peer revocation lists are not consulted in this version;
attestation lifetimes bound the exposure.¶
Three levels: Level 1 Verifier (decision vectors), Level 2 Credentials (signed-object vectors), Level 3 Federation. An implementation claims a level only when every vector of that level and all lower levels is reproduced.¶
The model is not trusted: an agent's proposal never carries authority by itself. Replay of request proofs
is bounded by jti tracking and short lifetimes. Attestations are short-lived because peer revocation is
not consulted across organizations. Budget enforcement requires the ledger; snapshot-based verifiers MUST
flag decisions taken without it. Debuggable enclaves MUST NOT yield verified TEE attestations.¶
This document requests registration of the media types application/agent-trust-proof+jwt,
application/agent-trust-delegation+jwt, application/agent-trust-attestation+jwt,
application/agent-trust-approval+jwt and application/agent-trust-ledger-head+jwt in the "Media Types"
registry, and of the HTTP header fields Agent-Proof, Agent-Credential and Agent-Attestation in the
"Hypertext Transfer Protocol (HTTP) Field Name Registry".¶
The profile builds on the work of the IETF WIMSE and OAuth working groups, the OpenID Foundation AuthZEN and Federation working groups, the SPIFFE project, and the Model Context Protocol and Agent-to-Agent communities.¶