| Internet-Draft | Signed-Agent-Metadata | November 2026 |
| Vilgalys & Gonzalez | Expires 6 May 2027 | [Page] |
- Workgroup:
- Web Bot Auth
- Internet-Draft:
- draft-vilgalys-webbotauth-signed-agent-metadata-00
- Published:
- Intended Status:
- Standards Track
- Expires:
The Signed-Agent-Metadata HTTP Header Field for Web Bot Auth
Abstract
Web Bot Auth uses HTTP Message Signatures to let automated HTTP clients authenticate their identity to origins via the Signature-Agent header field. When a multi-tenant agent platform signs outbound requests with a shared key, all customer workloads on that platform share a single cryptographic identity. Abusive traffic from one tenant or workload can degrade the reputation of the entire platform and cause origins to block legitimate tenants.¶
This document defines the Signed-Agent-Metadata HTTP header field, an RFC 9651 Dictionary that carries optional, pseudonymous per-request metadata (product, project, and session). By signing Signed-Agent-Metadata inside the Web Bot Auth signature, a platform enables verifiers to evaluate traffic, apply rate limits, and isolate reputation at a narrower scope than the signing origin.¶
Status of This Memo
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 6 May 2027.¶
Copyright Notice
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.¶
1. Introduction
1.1. Problem Statement: Shared Fate on Multi-Tenant Platforms
Web Bot Auth ([I-D.ietf-webbotauth-httpsig-protocol]) allows automated HTTP clients to cryptographically sign requests using HTTP Message Signatures ([RFC9421]) and advertise their key discovery URI in the Signature-Agent header field.¶
This model maps cleanly when a single organization operates a single crawler or bot with robust abuse controls. However, cloud browser providers, hosted AI agent platforms, and enterprise gateways run thousands of independent customer workloads behind shared egress infrastructure. Consider a fictional Acme Corp (platform.acme.com), which has pivoted from mail-order industrial products into hosting cloud AI agents. When Acme signs outbound requests with its platform domain key, all traffic from its customers shares one Signature-Agent identity:¶
This creates a shared-fate problem for both platforms and verifiers (origins, CDNs, and security services). Suppose one tenant runs an aggressive scraping workload against shopping.com, while hundreds of other tenants run benign research and shopping agents on the same platform. The verifier at shopping.com observes malicious traffic authenticated only by platform.acme.com. Without sub-identifiers, the verifier must choose between two poor outcomes:¶
-
Penalize the entire platform: Apply rate limits, challenges, or blocks to all requests from
platform.acme.com, which disrupts legitimate tenants sharing the platform.¶ -
Permit platform-level abuse: Allow traffic from
platform.acme.comto bypass controls, which leavesshopping.comexposed to the abusive tenant.¶
Platforms and verifiers need a lightweight mechanism to disambiguate sub-identities and convey per-request operational metadata under a shared Signature-Agent key without exposing personally identifiable information (PII) on the wire.¶
1.2. Relationship to Web Bot Auth and Signature Agent Cards
The Web Bot Auth ecosystem separates cryptographic key discovery, static agent description, and dynamic per-request metadata:¶
-
Base Protocol ([I-D.ietf-webbotauth-httpsig-protocol]): Defines how an automated client signs HTTP requests and points verifiers to its public keys via
Signature-Agent.¶ -
Signature Agent Card ([I-D.meunier-webbotauth-registry]): Defines a hosted JSON metadata document where an agent operator advertises static, operator-level properties, including
client_name,contacts, and aweb_bot_authobject (purpose,trigger,rate-expectation,rfc9309-product-token, andrfc9309-compliance).¶ -
Per-Request Metadata (
Signed-Agent-Metadata, this document): Defines an in-band HTTP header field that carries dynamic, pseudonymous sub-identifiers (product,project,session) covered by the per-request HTTP Message Signature.¶
Signed-Agent-Metadata (SAM) is additive to the Signature Agent Card. Static properties that describe the agent as a whole (such as purpose or trigger) belong in the hosted Signature Agent Card and are intentionally omitted from Signed-Agent-Metadata to avoid redundancy. Similarly, if an operator already publishes a separate Signature-Agent URI and Signature Agent Card for each product, the operator does not need to include the product member in Signed-Agent-Metadata.¶
2. Conventions and Definitions
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.¶
This document uses the following terms:¶
-
Platform: An entity that operates agent execution infrastructure and signs outbound HTTP requests with its
Signature-Agentkey on behalf of multiple products, customer projects, customers, or sessions/workflows.¶ - Tenant: A customer organization, developer account, or billing workspace that deploys or runs automated workloads on a Platform.¶
-
Verifier: An HTTP origin server, reverse proxy, Content Delivery Network (CDN), or security provider that validates the HTTP Message Signature and evaluates the
Signed-Agent-Metadataheader field.¶ -
Effective Identity: The hierarchical tuple formed by the verified
Signature-AgentURI and the signedSigned-Agent-Metadataidentifier members present on a request, ordered from broadest to narrowest scope:(Signature-Agent, product, project, session).¶
3. The Signed-Agent-Metadata Header Field
3.1. Syntax
The Signed-Agent-Metadata HTTP header field is a Dictionary Structured Field as defined in Section 3.2 of [RFC9651]. Its ABNF syntax follows the sf-dictionary production rule:¶
Signed-Agent-Metadata = sf-dictionary¶
Each dictionary member key is a lowercase token (key in [RFC9651]). Each member value defined in this specification MUST be a String (sf-string in [RFC9651]). Parameters on dictionary members are not defined by this specification and MUST be ignored by verifiers.¶
An example Signed-Agent-Metadata header field with all three members present:¶
3.2. Dictionary Members
Sending the Signed-Agent-Metadata header field is OPTIONAL, and all dictionary members within it are OPTIONAL. A platform MAY include any subset of members that fits its architecture and tenancy model to reduce shared-fate penalties across its workloads.¶
| Member Key | Type | Description | Example |
|---|---|---|---|
product
|
sf-string
|
Identifier or application name of the agent software or service under the signing platform. |
product="Acme-Labs"
|
project
|
sf-string
|
Opaque identifier for the tenant account, workspace, or billing project on the host platform. |
project="prj_9012"
|
session
|
sf-string
|
Ephemeral, opaque identifier for a single bounded task execution, workflow run, or isolated browser context lifecycle. |
session="run_3a2b1c"
|
Verifiers MUST ignore unrecognized member keys in the Signed-Agent-Metadata dictionary to allow backward-compatible extensions.¶
3.3. Hierarchical Scoping and Chaining
Identifiers carried in Signed-Agent-Metadata are scoped namespaces, not globally unique identifiers. They form a strict hierarchy under the signing Signature-Agent:¶
Signature-Agent (Tier 0: Platform / Signing Origin)
+-- product (Tier 1: Application / Product)
+-- project (Tier 2: Tenant / Workspace)
+-- session (Tier 3: Task / Session)
¶
When evaluating Signed-Agent-Metadata, verifiers MUST apply the following scoping rules:¶
-
Chained Tuple Evaluation: A narrower identifier MUST always be evaluated within the namespace of the verified
Signature-Agentand all broaderSigned-Agent-Metadataidentifier members present in the request. For example,session="sess_1"underproject="prj_a"andsession="sess_1"underproject="prj_b"MUST be treated as distinct sessions.¶ -
Omitted Intermediate Tiers: If a platform omits an intermediate member (for example, sending
productandsessionwithoutproject), the scoping chain consists of the present members in their defined hierarchical order:(Signature-Agent, product, session).¶
3.4. Identifier Generation, Stability, and Origin Scoping
To make Signed-Agent-Metadata effective for isolating noisy neighbors and avoiding shared-fate penalties, platforms SHOULD follow these generation practices:¶
-
Platform Attestation and Tenant Isolation: The platform SHOULD populate
Signed-Agent-Metadatamembers from authenticated platform state rather than allowing tenant workloads to supply arbitrary unverified values forproject(or forproductif shared across tenants). If a platform passes through tenant-suppliedsessionidentifiers, the platform SHOULD also include an authenticatedprojectmember (or namespace thesessionidentifier per tenant) so that one tenant cannot collide with or spoof identifiers belonging to another tenant.¶ -
Identifier Stability:¶
-
productandprojectvalues SHOULD remain stable across requests and across signing key rotations for the lifetime of the product or tenant workspace. Generating a new randomprojectvalue on every HTTP request prevents reputation accrual and reduces the utility of the field.¶ -
sessionvalues SHOULD remain constant across HTTP requests belonging to a single bounded task execution, workflow run, or browser context lifecycle, and SHOULD change when a new task or session starts. If a platform rotatessessionon every request, verifiers cannot link requests within a task and will evaluate traffic at a broader tier.¶
-
-
Origin Scoping for
session: To prevent unrelated websites from correlating a session across origins, platforms SHOULD derivesessionvalues per target origin (or per registrable domain). For example, a platform can compute an origin-scoped identifier using a keyed hash over the internal session identifier and the target authority:¶
session_token = base64url(
HMAC_SHA256(
platform_secret,
internal_session_id + ":" + target_origin
)
)
¶
With origin scoping, a verifier at https://shopping.com observes a consistent session identifier across requests to its own origin, while https://content.org and https://news.net observe different, uncorrelated values.¶
4. Signing and Verification
4.1. Signing Requests
When a platform chooses to send Signed-Agent-Metadata on a signed Web Bot Auth request ([I-D.ietf-webbotauth-httpsig-protocol]), it binds the header field to the HTTP request so verifiers can authenticate it:¶
-
Construct the Header: The platform sets the
Signed-Agent-Metadataheader field with the applicable dictionary members.¶ -
Include in
Signature-Input: The platform adds"signed-agent-metadata"to the list of covered components in theSignature-Inputheader field alongside"@authority"and"signature-agent".¶ - Compute the Signature: The platform computes the HTTP Message Signature over the signature base as specified in [RFC9421].¶
4.2. Verifier Processing
When receiving an HTTP request containing Signed-Agent-Metadata, a verifier performs the following steps:¶
-
Verify Signature Coverage: Check that the
Signature-Inputheader field for the Web Bot Auth signature (tag="web-bot-auth") includes"signed-agent-metadata"in its covered component list. If"signed-agent-metadata"is not covered by the signature, the verifier MUST ignore theSigned-Agent-Metadataheader field.¶ -
Validate the Signature: Verify the HTTP Message Signature using the public key discovered via
Signature-Agent, as specified in [I-D.ietf-webbotauth-httpsig-protocol]. If signature verification fails, the verifier MUST NOT trust theSigned-Agent-Metadataheader field.¶ -
Parse and Scope: Parse
Signed-Agent-Metadataas an [RFC9651] Dictionary. If parsing fails, ignore the header field. Otherwise, extract the recognized string members (product,project,session) and construct the Effective Identity tuple scoped under the verifiedSignature-Agent.¶
4.3. Complete HTTP Request Example
The following example shows an HTTP GET request to www.shopping.com, signed by Acme's agent platform (https://platform.acme.com) on behalf of its Acme-Research product, including product, project, and session in Signed-Agent-Metadata (lines folded for readability):¶
5. Verifier Considerations (Non-Normative)
This section describes how verifiers (including origin servers such as shopping.com, content.org, and news.net, as well as WAFs, CDNs, and bot management services) can use Signed-Agent-Metadata to manage traffic policy and reputation.¶
5.1. Reputation Isolation and Fallback
Verifiers can maintain reputation and rate-limiting state at each level of the Effective Identity tuple:¶
-
Targeted Enforcement: If a single session (
session="sess_3a2b1c") underproject="prj_104"exhibits abusive behavior onshopping.com(such as hoarding rocket-powered roller skates or aggressive price scraping), the verifier can rate-limit, challenge, or block that specificsession. Other sessions underprj_104and other projects onplatform.acme.comkeep their normal standing.¶ -
Hierarchical Rollup: If a tenant rotates
sessionidentifiers rapidly to evade per-session limits oncontent.org, the verifier can aggregate anomaly signals at the parentprojecttier (project="prj_104") and restrict the entire project without penalizing the rest ofplatform.acme.com.¶ -
Graceful Fallback: If a platform signs only
product="Acme-Labs"andproject="prj_104", the verifier evaluates traffic at the project tier. If a request has no signedSigned-Agent-Metadataheader, the verifier falls back to Tier 0 (evaluating all traffic under theplatform.acme.comSignature-AgentURI).¶
5.2. Abuse Reporting to Platform Operators
When a platform publishes contact endpoints in its Signature Agent Card (contacts in [I-D.meunier-webbotauth-registry]), a verifier that detects severe abuse can report the incident to the platform by providing:¶
- The
Signature-AgentURI andkeyid¶ - The exact signed
Signed-Agent-Metadataheader value¶ - The target origin (
@authority) and request timestamp (created)¶
Because the platform generated the pseudonymous project and session identifiers (or derived session via HMAC with the target origin), the platform can map the reported tuple back to the responsible internal tenant account and take corrective action.¶
6. Security Considerations
6.1. Unsigned or Stripped Headers
An attacker or intermediary could inject a forged Signed-Agent-Metadata header onto an unsigned request or append Signed-Agent-Metadata to a request whose Signature-Input does not cover "signed-agent-metadata". As required in Section 4.2, verifiers MUST ignore Signed-Agent-Metadata unless "signed-agent-metadata" is included in the verified Signature-Input component list.¶
An intermediary could also strip Signed-Agent-Metadata only if "signed-agent-metadata" was not included in Signature-Input. Once "signed-agent-metadata" is listed in Signature-Input, removing or modifying the header invalidates the HTTP Message Signature.¶
6.2. Cross-Tenant Identifier Spoofing
If a multi-tenant platform allows customer code to set raw Signed-Agent-Metadata headers directly before the platform's signing proxy signs the outbound request, a malicious customer could set product or project values belonging to another customer. For example, a tenant operating product="Acme-Crimes" could claim product="Acme-Research", project="prj_104" on requests to news.net, either to inherit a trusted customer's reputation or to send abusive traffic that degrades a competitor's standing.¶
To protect its own tenants from cross-tenant spoofing, the signing platform SHOULD overwrite, namespace, or validate Signed-Agent-Metadata at its signing boundary using authenticated tenant metadata (Section 3.4).¶
6.3. Sybil Attacks and Identifier Churn
A malicious tenant may attempt to reset a poor reputation by cycling through newly created session or project identifiers on every request. Verifiers SHOULD treat newly observed identifiers as having neutral (unestablished) standing rather than high trust, and SHOULD track the rate of new sub-identifiers created under each parent project, product, or Signature-Agent. High sub-identifier churn under a parent tier is itself a signal to apply policy at the parent tier.¶
7. Privacy Considerations
7.1. Prohibition of Personally Identifiable Information
Signed-Agent-Metadata is transmitted in cleartext HTTP headers to origin servers and intermediaries. Platforms MUST NOT place personally identifiable information (PII)—such as email addresses, legal names, usernames, phone numbers, IP addresses, or billing account names—into project or session. All values for these fields MUST be opaque tokens, UUIDs, or cryptographic hashes.¶
7.2. Cross-Origin Correlation
As documented in the Privacy Considerations of [I-D.ietf-webbotauth-httpsig-protocol], persistent identifiers in signed HTTP requests allow visited origins to correlate client activity across websites.¶
In Signed-Agent-Metadata, product and project identify commercial software or tenant workspaces, whereas session represents an individual task or browsing context. Scoping session identifiers to the target origin (Section 3.4) prevents two collaborating origins from linking a session's activity across sites, while still giving each origin a stable handle for local rate limiting and abuse defense.¶
8. IANA Considerations
8.1. HTTP Field Name Registration
IANA is requested to register the following entry in the "Hypertext Transfer Protocol (HTTP) Field Name Registry" defined in [RFC9110]:¶
9. Open Questions for the Working Group
The authors welcome Working Group feedback on the following topics at IETF 127:¶
-
Header Field Naming and Future Metadata: This draft proposes
Signed-Agent-Metadata(SAM) to indicate that the header field must be covered by the request signature and can accommodate both sub-identifiers (product,project,session) and future per-request metadata (such as session start timestamps or account tenure). Should the Working Group keepSigned-Agent-Metadata, or prefer an alternative such asAgent-Metadata,Signature-Agent-Metadata,Signature-Agent-IDs,Signature-Agent-Scope, orAgent-Context?¶ -
Intermediate Identifier Between
projectandsession: Is a fourth identifier needed betweenproject(the customer tenant or workspace) andsession(a single task run) to represent a specific deployed agent, sub-tenant, or credential without introducing a human-leveluseridentifier? If so, what term best fits that tier (for example,resource,label,workload, orparent)?¶ -
Alignment with the Signature Agent Card Registry: [I-D.meunier-webbotauth-registry] establishes an IANA registry for
web_bot_authmetadata parameters. Should theSigned-Agent-Metadatadictionary keys be registered in a sub-registry or shared registry, and should a Signature Agent Card be able to declare whichSigned-Agent-Metadatakeys the platform signs?¶ - Origin Scoping vs. Cross-Origin Security Providers: Origin-scoped identifiers protect cross-site privacy, whereas security providers operating across multiple origins can reduce cold-start challenges when a pseudonymous identifier is consistent across protected origins. Should the specification define an explicit parameter or convention indicating whether identifiers are origin-scoped or platform-scoped?¶
10. References
10.1. Normative References
- [I-D.ietf-webbotauth-httpsig-protocol]
- Meunier, T. and S. Major, "HTTP Message Signatures for automated traffic", Work in Progress, Internet-Draft, draft-ietf-webbotauth-httpsig-protocol-01, , <https://datatracker.ietf.org/doc/html/draft-ietf-webbotauth-httpsig-protocol-01>.
- [RFC2119]
- Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/info/rfc2119>.
- [RFC8174]
- Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <https://www.rfc-editor.org/info/rfc8174>.
- [RFC9110]
- Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., "HTTP Semantics", STD 97, RFC 9110, DOI 10.17487/RFC9110, , <https://www.rfc-editor.org/info/rfc9110>.
- [RFC9421]
- Backman, A., Ed., Richer, J., Ed., and M. Sporny, "HTTP Message Signatures", RFC 9421, DOI 10.17487/RFC9421, , <https://www.rfc-editor.org/info/rfc9421>.
- [RFC9651]
- Nottingham, M. and P. Kamp, "Structured Field Values for HTTP", RFC 9651, DOI 10.17487/RFC9651, , <https://www.rfc-editor.org/info/rfc9651>.
10.2. Informative References
- [I-D.meunier-webbotauth-registry]
- Guerreiro, M., Kirazci, U., and T. Meunier, "Registry and Signature Agent card for Web bot auth", Work in Progress, Internet-Draft, draft-meunier-webbotauth-registry-04, , <https://datatracker.ietf.org/doc/html/draft-meunier-webbotauth-registry-04>.
- [RFC9576]
- Davidson, A., Iyengar, J., and C. A. Wood, "The Privacy Pass Architecture", RFC 9576, DOI 10.17487/RFC9576, , <https://www.rfc-editor.org/info/rfc9576>.