<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.4.7) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-kavian-aep-did-web-identity-method-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="AEP did:web">The did:web Identity Method for the Agent Enrollment Protocol</title>

    <author initials="N." surname="Kavian" fullname="N. Kavian">
      <organization>Jarwin, Inc. (InFlow)</organization>
      <address>
        <email>nas@inflowpay.ai</email>
      </address>
    </author>

    <date year="2026" month="June" day="28"/>

    
    
    

    <abstract>


<?line 41?>

<t>This document defines the <spanx style="verb">did:web</spanx> identity method for the Agent Enrollment Protocol (AEP). The method lets an AEP Service verify Agent client assertion JWTs by resolving an Agent <spanx style="verb">did:web</spanx> identifier to a DID document published over HTTPS.</t>



    </abstract>



  </front>

  <middle>


<?line 45?>

<section anchor="introduction"><name>Introduction</name>

<t>The Agent Enrollment Protocol (AEP) defines an identity-method substrate for authenticated commands <xref target="AEP-CORE"/>. AEP Services advertise enabled identity methods in the Inspect document's <spanx style="verb">identity.methods</spanx> array.</t>

<t>This document defines the <spanx style="verb">did:web</spanx> identity method. A Service that enables this identity method accepts Agent identifiers using the <spanx style="verb">did:web</spanx> DID method <xref target="DID-WEB"/> and resolves verification material from the corresponding HTTPS origin.</t>

</section>
<section anchor="requirements-language"><name>Requirements Language</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

</section>
<section anchor="identity-method"><name>Identity Method</name>

<t>The identity method identifier is:</t>

<figure><sourcecode type="text"><![CDATA[
did:web
]]></sourcecode></figure>

<t>A Service that enables this identity method lists <spanx style="verb">did:web</spanx> in the Inspect document:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "identity": {
    "methods": ["did:web"]
  }
}
]]></sourcecode></figure>

<t>Services that do not enable this identity method <bcp14>MUST NOT</bcp14> list <spanx style="verb">did:web</spanx> in <spanx style="verb">identity.methods</spanx>.</t>

</section>
<section anchor="agent-identifiers"><name>Agent Identifiers</name>

<t>An Agent using this identity method identifies itself with a <spanx style="verb">did:web</spanx> URI.</t>

<t>The Agent DID appears in the client assertion JWT <spanx style="verb">iss</spanx> and <spanx style="verb">sub</spanx> claims. The JOSE <spanx style="verb">kid</spanx> header contains the Agent DID and <bcp14>MAY</bcp14> include a fragment selecting a verification method in the resolved DID document.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "alg": "EdDSA",
  "typ": "JWT",
  "kid": "did:web:agent.example.com:agents:123#key-1"
}
]]></sourcecode></figure>

<figure><sourcecode type="json"><![CDATA[
{
  "iss": "did:web:agent.example.com:agents:123",
  "sub": "did:web:agent.example.com:agents:123"
}
]]></sourcecode></figure>

<t>The DID portion of <spanx style="verb">kid</spanx> <bcp14>MUST</bcp14> equal the Agent DID carried in <spanx style="verb">iss</spanx> and <spanx style="verb">sub</spanx>.</t>

</section>
<section anchor="did-resolution"><name>DID Resolution</name>

<t>The Service resolves the Agent DID according to the <spanx style="verb">did:web</spanx> method specification <xref target="DID-WEB"/>:</t>

<t><list style="symbols">
  <t><spanx style="verb">did:web:&lt;host&gt;</spanx> resolves to <spanx style="verb">https://&lt;host&gt;/.well-known/did.json</spanx>.</t>
  <t><spanx style="verb">did:web:&lt;host&gt;:&lt;path&gt;</spanx> resolves to <spanx style="verb">https://&lt;host&gt;/&lt;path&gt;/did.json</spanx>.</t>
</list></t>

<t>Services <bcp14>MUST</bcp14> resolve <spanx style="verb">did:web</spanx> documents over HTTPS. Plaintext HTTP resolution is not allowed.</t>

<t>The resolved DID document <bcp14>MUST</bcp14> be a JSON object <xref target="RFC8259"/> and <bcp14>MUST</bcp14> contain a verification method referenced by the JWT <spanx style="verb">kid</spanx> header. The verification method <bcp14>MUST</bcp14> expose a public key in a form the Service can validate against the selected JOSE signing algorithm.</t>

<t>If the Service cannot resolve the DID document, cannot locate the referenced verification method, or cannot use the verification method with the selected JOSE algorithm, client assertion verification fails with the AEP <spanx style="verb">not_recognized</spanx> error defined by the core protocol.</t>

</section>
<section anchor="caching"><name>Caching</name>

<t>Services <bcp14>SHOULD</bcp14> cache resolved DID documents and <bcp14>SHOULD</bcp14> honor upstream HTTP cache metadata <xref target="RFC9110"/>. A default cache lifetime of 300 seconds is <bcp14>RECOMMENDED</bcp14> when no shorter upstream lifetime is provided.</t>

<t>Services <bcp14>MUST</bcp14> ensure that cache lifetimes do not prevent timely key replacement after compromise. Services <bcp14>MAY</bcp14> impose a local maximum cache lifetime.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document requests registration of <spanx style="verb">did:web</spanx> in the AEP Identity Methods registry.</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Value</ttcol>
      <c>Identity Method</c>
      <c><spanx style="verb">did:web</spanx></c>
      <c>Description</c>
      <c>DID Web identity method for AEP client assertions</c>
      <c>Reference</c>
      <c>This document</c>
</texttable>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>The <spanx style="verb">did:web</spanx> method relies on the HTTPS origin that publishes the DID document. A Service that accepts an Agent's <spanx style="verb">did:web</spanx> identity trusts the corresponding web origin to publish the correct verification method.</t>

<t>Services <bcp14>MUST</bcp14> reject <spanx style="verb">did:web</spanx> client assertions when the resolved DID document does not contain the verification method referenced by <spanx style="verb">kid</spanx>, when the verification method cannot validate the selected JOSE algorithm, or when the JWT signature does not verify.</t>

<t>Services <bcp14>SHOULD</bcp14> cache DID documents for operational stability but <bcp14>MUST</bcp14> ensure that cache lifetimes do not prevent timely key replacement after compromise.</t>

</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<t>A <spanx style="verb">did:web</spanx> Agent identity can be correlatable if the same DID is reused across Services. Platforms or Agent operators that require unlinkability <bcp14>SHOULD</bcp14> use a distinct <spanx style="verb">did:web</spanx> URI and signing key per Service enrollment.</t>

<t>The URI path component <bcp14>SHOULD</bcp14> be opaque and <bcp14>SHOULD NOT</bcp14> reveal the Agent's master identity, account identifier, or target Service.</t>

</section>


  </middle>

  <back>



    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC8259">
  <front>
    <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
    <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
    <date month="December" year="2017"/>
    <abstract>
      <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
      <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="90"/>
  <seriesInfo name="RFC" value="8259"/>
  <seriesInfo name="DOI" value="10.17487/RFC8259"/>
</reference>
<reference anchor="RFC9110">
  <front>
    <title>HTTP Semantics</title>
    <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
    <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
    <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
    <date month="June" year="2022"/>
    <abstract>
      <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
      <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="97"/>
  <seriesInfo name="RFC" value="9110"/>
  <seriesInfo name="DOI" value="10.17487/RFC9110"/>
</reference>

<reference anchor="DID-WEB" target="https://w3c-ccg.github.io/did-method-web/">
  <front>
    <title>The did:web Method Specification</title>
    <author >
      <organization>W3C Credentials Community Group</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="AEP-CORE" target="https://datatracker.ietf.org/doc/draft-kavian-agent-enrollment-protocol/">
  <front>
    <title>The Agent Enrollment Protocol</title>
    <author initials="N." surname="Kavian" fullname="N. Kavian">
      <organization></organization>
    </author>
    <date year="2026" month="June" day="27"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-kavian-agent-enrollment-protocol-01"/>
</reference>


<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>



    </references>





  </back>

<!-- ##markdown-source:
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

-->

</rfc>

