<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-kasselman-oauth-dcr-trusted-issuer-token-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="DCR with Trusted Issuer Credentials">OAuth 2.0 Dynamic Client Registration with Trusted Issuer Credentials</title>
    <seriesInfo name="Internet-Draft" value="draft-kasselman-oauth-dcr-trusted-issuer-token-00"/>
    <author fullname="Ismael Kazzouzi">
      <organization>SPIRL</organization>
      <address>
        <email>ismael@spirl.com</email>
      </address>
    </author>
    <date year="2025" month="June" day="23"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>dynamic client registration</keyword>
    <keyword>SPIFFE</keyword>
    <keyword>platform credentials</keyword>
    <abstract>
      <?line 71?>

<t>An OAuth 2.0 client requires specific information to interact with an authorization server, including a client identifier issued by that server. The OAuth 2.0 Dynamic Client Registration Protocol <xref target="RFC7591"/> defines a mechansim for dynamic client registration that removes the need for manual registration. This provides a more scalable mechanism that can be used by clients that do not have a pre-existing relationship with an authorization server, or where manually configuring such relationships is prohibitive from a cost and scale perspective. Examples of deployments that benefit from dynamic client registration includes modern cloud architectures where microservices are created on demand to meet scale requirements or for use with emerging protocols like the Model Context Protocol (MCP) <xref target="MCP"/> which requires clients to register with an authorization server even if they do not have a predefined relationship with the authorization server. Similar to modern cloud native workloads, MCP service integrations may be ephemeral in nature. The OAuth 2.0 Dynamic Client Registration Protocol <xref target="RFC7591"/> defines a software statement that includes metadata about the client and is signed by a developer or trusted third party. This specification describes the use of specific third party credentials issued to workloads and applications as software statements. The specification describes two types of credentials that may be used as software statements. The first is Secure Production Identity Framework For Everyone (SPIFFE) credentials. The second is the use of JWT representation of a Verifiable Credentials <xref target="VC-JWT"/></t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://PieterKas.github.io/OAuth-2.0-DCR-with-Trusted-Issuer-Credentials/draft-kasselman-oauth-dcr-trusted-issuer-token.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-kasselman-oauth-dcr-trusted-issuer-token/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Web Authorization Protocol Working Group mailing list (<eref target="mailto:oauth@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/oauth/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/oauth/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/PieterKas/OAuth-2.0-DCR-with-Trusted-Issuer-Credentials"/>.</t>
    </note>
  </front>
  <middle>
    <?line 75?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The OAuth framework <xref target="RFC6749"/> is a widely deployed authorization protocol standard that enables applications to obtain limited access to user resources. OAuth clients must be registered with the OAuth authorization server, which poses significant operational challenges in dynamically scaling environments. Manual registration and subsequent lifecycle management is common, but is costly, difficult to scale and hard to maintain throughout the lifecycle of a client. These challenges are exacerbated by the increasingly dynamic nature of modern cloud native workloads that are instantiated as needed. In addition, emerging protocols like Model Context Protocol (MCP) requires clients to register with an authorization server, but these clients may not always have a predefined relationship with the authorization server, and similar to modern cloud native workloads, may be ephemeral in nature.</t>
      <t><xref target="RFC7591"/> defines a mechansim for dynamic client registration that removes the need for manual registration. This provides a more scalable mechanism that can be used by clients that do not have a pre-existing relationship with an authorization server, or where manually configuring such relationships is prohibitive from a cost and scale perspective. It defines the concept of a software statement, which is a JSON Web Token (JWT) <xref target="RFC7519"/> that asserts metadata values about the client that is signed by a developer or trusted third party.</t>
      <t>This specification describes the use of SPIFFE JWT-SVIDs and Verifiable Credentials as software statements that can be submitted as software statements when using OAuth 2.0 Dynamic Client Registration Protocol <xref target="RFC7591"/>.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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="overview">
      <name>Overview</name>
      <t>This specification describes the use of two credential types as software statements, namely SPIFFE credentials and Verifiable Credentials.</t>
      <section anchor="secure-production-identity-framework-for-everyone-spiffe">
        <name>Secure Production Identity Framework For Everyone (SPIFFE)</name>
        <t>The Secure Production Identity Framework For Everyone (SPIFFE) is a graduated Cloud Native Compute Foundation project designed to dynamically attest and verify workload identity (see <xref target="SPIFFE"/>. SPIFFE is commonly deployed to support large scale deployment of workloads in enterprise and cloud native compute environments. It ensures that every workload is attested and issued with X.509-SVID <xref target="SPIFFE_X509"/> and JWT-SVID <xref target="SPIFFE_JWT"/> credentials. JWT-SVIDs contain a minimal set of claims, but may be extended to include additional claims, including those defined in the Dynamic Client Registration specification (see Section 2 of <xref target="RFC7591"/>). A SPIFFE issuer may attest a workload, add additional metadata based on the attestation information and issue a JWT-SVID. Workloads that are provisioned with JWT-SVIDs present these credentials as software statements when using Dynamic Client Registration. The registration endpoint is configured to trust the SPIFFE issuer and can verify the JWT-SVID, as well as retrieve additional claims that represents metadata attested to by the SPIFFE issuer. Upon succesful validation of the software statement, the registration endpoint completes the client registration. When SPIFFE JWT-SVIDs are used, the authorization server <bcp14>MUST NOT</bcp14> provision additional client secrets, as the workload can use its JWT-SVID or X.509 SVID to authenticate when initiating any OAuth flow. This removes the risk of additional secrets proliferation, reduces the overheads of securing and managing secrets and improves the overall risk posture.</t>
      </section>
      <section anchor="verifiable-credentials-vc">
        <name>Verifiable Credentials (VC)</name>
        <t>A Verifiable Credential (VC) is a tamper-evident digital assertion made by an issuer about a subject, which can be cryptographically verified by a third party. VCs follow an issuer–holder–verifier model where the issuer creates and signs the credential, the holder stores and presents it, and the verifier checks its authenticity and validity. VCs can be represented as a JSON Web Token (JWT) <xref target="VC-JWT"/>. A VC encoded as a JWT can serve as a software statement in dynamic client registration by including metadata as defined in Section 2 of <xref target="RFC7591"/> about the client as additional claims in the VC. Workloads that are provisioned with VCs present these credentials as software statements when using Dynamic Client Registration. The registration endpoint is configured to trust the VC issuer and can verify the VC and use the additional metadata claims included by the issuer. Upon succesful validation of the software statement, the registration endpoint completes the client registration. The use of Verifiable Credentials for client authentication is currently undefined and it is up to the authorization server to make a risk based decision on which authentication methods to use.</t>
      </section>
      <section anchor="spiffe-and-vc-deployment-models">
        <name>SPIFFE and VC Deployment Models</name>
        <t>SPIFFE and VC address different deployment models. SPIFFE is more commonly deployed within large enterprise compute environments and provides high levels of assurance about a workload identity (in this case an OAuth client) along with a highly robust, low latency provisioning pipeline with built in credential lifecycle management to maximise availability. It is commonly deployed as an alternative to managing secrets.</t>
        <t>VCs provide an option for clients that are deployed outside an enterprise where SPIFFE is not deployed. These clients use VC issuance protocols to obtain VCs. The use of these protocols or any attestation that needs to be provided is out of scope for this specification.</t>
      </section>
      <section anchor="protocol-flow">
        <name>Protocol Flow</name>
        <artwork><![CDATA[
+-------------+ (A) Client Registration Endpoint Establishes
|   SPIFFE    |     Trust with SPIFFE or VC Issuer
|     or      |
|     VC      |
|   Issuer    |<------------------------------------------+
+-------------+                                           |
       ^                                                  |
       |                                                  |
       |                                                  |
      (B) SPIFFE JWT-SVID or VC provisioned to client     |
       |                                                  |
       v                                                  V
+-----------+                                      +---------------+
| Client or |--(C)- Client Registration Request -->|    Client     |
| Developer |       with SPIFFE JWT-SVID or VC     |  Registration |
|           |         as software statement        |    Endpoint   |
|           |                                      |               |
|           |<-(D)- Client Information Response ---|               |
|           |        or Client Error Response      +---------------+
+-----------+
]]></artwork>
        <t>Figure 1: Abstracted Dynamic Client Registration Flow with Software Statement</t>
        <t>The OAuth 2.0 Client Dynamic Registration flow illustrated in Figure 1 describes the interaction between the SPIFFE or VC issuers, the client and the client registration endpoint defined in <xref target="RFC7591"/>. It includes the following steps:</t>
        <ul spacing="normal">
          <li>
            <t>(A) The client registration endpoint establishes a trust relationship with the SPIFFE or VC Issuer. Once trust is established, the client registration endpoint can verify credentials issued by the SPIFFE or VC Issuer when presented as software statements.</t>
          </li>
          <li>
            <t>(B) The client is attested and credentialed by the SPIFFE Issuer <xref target="SPIFFE"/>, after which it assigns a SPIFFE ID <xref target="SPIFFE_ID"/>, along with SPIFFE credentials (e.g. JWT-SVID <xref target="SPIFFE_JWT"/> and X.509-SVID <xref target="SPIFFE_X509"/>). Alternatively a VC issuer issues and provisions a VC. Issuers may include additional claims containing metadata (e.g the request URI).</t>
          </li>
          <li>
            <t>(C) The client calls the client registration endpoint with the client's desired registration metadata, and the software statement (either a SPIFFE JWT-SVID or a VC).</t>
          </li>
          <li>
            <t>(D) The client registration endpoint verifies the SPIFFE JWT-SVID or VC that was presented as a software statement. It extracts any additional claims that should be used as metadata before registering the client. It may return additional metadata, client identifiers and optionally credentials if a VC is used. Clients with SPIFFE credentials <bcp14>MUST</bcp14> use the SPIFFE credentials when authenticating as part of an OAuth flow.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="issuer-and-client-registration-endpoint-trust-relationship">
      <name>Issuer and Client Registration Endpoint Trust Relationship</name>
      <section anchor="spiffe-issuer-and-client-registration-endpoint-trust-relationship">
        <name>SPIFFE Issuer and Client Registration Endpoint Trust Relationship</name>
        <t>SPIFFE makes provision for multiple Trust Domains, which are represented in the workload identifier. Trust Domains offers additional segmentation within a SPIFFE deployment and each Trust Domain has its own keys for signing credentials. The OAuth authorization server may choose to trust one or more trust domains as defined in <xref target="SPIFFE-OAUTH-CLIENT-AUTH"/>.</t>
      </section>
      <section anchor="verifiable-credentials-and-client-registration-endpoint-trust-relationship">
        <name>Verifiable Credentials and Client Registration Endpoint Trust Relationship</name>
        <t>To validate Verifiable Credentials (VCs) during dynamic client registration, the client registration endpoint <bcp14>MUST</bcp14> be configured to trust the VC issuer’s public keys or a certificate chain anchored in a trusted root. This trust may be established statically or through a dynamic trust discovery mechanism. The registration endpoint <bcp14>SHOULD</bcp14> periodically refresh or revalidate the issuer’s key material against a trusted source to ensure ongoing integrity.
When a client presents a VC, the registration endpoint verifies its signature using the trusted key material. It <bcp14>MAY</bcp14> also perform additional validation steps, such as checking the issuer’s identity, validating the credential’s expiration, and evaluating its revocation status using mechanisms such as decentralized revocation registries or issuer-specific status endpoints.</t>
      </section>
    </section>
    <section anchor="client-registration-endpoint-processing">
      <name>Client Registration Endpoint Processing</name>
      <t>The client registration endpoint <bcp14>MUST</bcp14> process software statements (e.g., SPIFFE JWT-SVIDs or Verifiable Credentials) as follows:
1. Verify Authenticity and Integrity: Validate the software statement's signature using a trusted issuer key (e.g., SPIFFE Trust Bundle or VC issuer metadata).
2. Validate Credential Expiry: Check that the credential is not expired and is within its valid time window.
3. Evaluate Revocation Status (if applicable): Optionally verify revocation status via decentralized registries or issuer-specific status endpoints (for VCs).
4. Extract and Validate Metadata Claims: Parse the credential and validate required claims needed for OAuth client registration (e.g., client_name, redirect_uris, grant_types).
5. Register the Client: If all validations succeed, proceed with client registration using the verified metadata.
6. Return Response: Send an appropriate OAuth client registration response.</t>
      <section anchor="spiffe-jwt-svids-processing-by-client-registration-endpoint">
        <name>SPIFFE JWT-SVIDs Processing by Client Registration Endpoint</name>
        <t>When a client presents a SPIFFE JWT-SVID as a software statement, the client registration endpoint <bcp14>MUST</bcp14>:</t>
        <ol spacing="normal" type="1"><li>
            <t>Verify the Signature: Validate the JWT signature using the trusted key material from the SPIFFE Trust Bundle corresponding to the issuer’s trust domain.</t>
          </li>
          <li>
            <t>Validate Standard Claims: Ensure that the JWT includes and satisfies the following claims:
            </t>
            <ul spacing="normal">
              <li>
                <t>iss: Must match the expected SPIFFE trust domain.</t>
              </li>
              <li>
                <t>sub: Must be a valid SPIFFE ID URI identifying the client.</t>
              </li>
              <li>
                <t>aud: Must include the registration endpoint’s audience value.</t>
              </li>
              <li>
                <t>exp and iat: Must be present and within acceptable bounds.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Extract and Validate Metadata Claims: Parse and validate any additional claims used to supply OAuth client metadata (e.g., client_name, redirect_uris, scope).</t>
          </li>
          <li>
            <t>Reject Invalid Credentials: Reject the registration if the JWT is expired, not correctly signed, or missing required claims.</t>
          </li>
          <li>
            <t>Register the Client (if all checks succeed): Upon successful validation, register the client using the extracted metadata and return a client identifier.
The server <bcp14>MUST NOT</bcp14> issue a client secret, as the SPIFFE credential is used for subsequent authentication.</t>
          </li>
        </ol>
      </section>
      <section anchor="vcs-processing-by-client-registration-endpoint">
        <name>VCs Processing by Client Registration Endpoint</name>
        <t>When a client presents a Verifiable Credential (VC) as a software statement, the client registration endpoint <bcp14>MUST</bcp14>:
1. Verify the Credential Signature: Validate the cryptographic signature of the VC using the issuer’s trusted public key or certificate chain.
2. Check Credential Validity: Ensure the VC has not expired and is not revoked, using appropriate status mechanisms such as decentralized revocation registries or issuer-hosted status endpoints.
3. Extract and Validate Metadata Claims: Extract required client metadata claims (e.g., client_name, redirect_uris, scope) embedded in the VC, and validate their presence and format according to the authorization server’s policy.
4. Reject Invalid Credentials: Reject the registration request if the VC fails any verification step, is malformed, or lacks required claims.</t>
        <t>Optionally, upon successful validation, the registration endpoint <bcp14>MAY</bcp14> provision additional credentials but <bcp14>SHOULD</bcp14> avoid provisioning traditional client secrets to minimize risk.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="client-secrets">
        <name>Client Secrets</name>
        <t>Dynamic client registration is designed to increase the ease with which clients are registered in large scale deployments. The increased use of client secrets amplifies the risks of secret theft and information compromise. This risk is further amplified if those secrets are long lived or infrequently rotated. Clients that are provisioned with SPIFFE JWT-SVIDs or X.509-SVIDs, and use this specification <bcp14>MUST</bcp14> use them not only as software statements, but also when authenticating to the authorization server in subsequent OAuth flows.</t>
        <t>The use of VCs as client authentication mechansims in OAuth is undefine. Consequently, when using VCs as software statements, the authorization server <bcp14>MAY</bcp14> provision additional credentials, but <bcp14>SHOULD</bcp14> avoid provisioning client secrets to limit the risks of secret proliferation and the consequences of secret theft.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC7519">
        <front>
          <title>JSON Web Token (JWT)</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="J. Bradley" initials="J." surname="Bradley"/>
          <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
          <date month="May" year="2015"/>
          <abstract>
            <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7519"/>
        <seriesInfo name="DOI" value="10.17487/RFC7519"/>
      </reference>
      <reference anchor="RFC7591">
        <front>
          <title>OAuth 2.0 Dynamic Client Registration Protocol</title>
          <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="J. Bradley" initials="J." surname="Bradley"/>
          <author fullname="M. Machulak" initials="M." surname="Machulak"/>
          <author fullname="P. Hunt" initials="P." surname="Hunt"/>
          <date month="July" year="2015"/>
          <abstract>
            <t>This specification defines mechanisms for dynamically registering OAuth 2.0 clients with authorization servers. Registration requests send a set of desired client metadata values to the authorization server. The resulting registration responses return a client identifier to use at the authorization server and the client metadata values registered for the client. The client can then use this registration information to communicate with the authorization server using the OAuth 2.0 protocol. This specification also defines a set of common client metadata fields and values for clients to use during registration.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7591"/>
        <seriesInfo name="DOI" value="10.17487/RFC7591"/>
      </reference>
      <reference anchor="RFC6749">
        <front>
          <title>The OAuth 2.0 Authorization Framework</title>
          <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
          <date month="October" year="2012"/>
          <abstract>
            <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6749"/>
        <seriesInfo name="DOI" value="10.17487/RFC6749"/>
      </reference>
      <reference anchor="SPIFFE" target="https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE.md">
        <front>
          <title>SPIFFE</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="SPIFFE_X509" target="https://github.com/spiffe/spiffe/blob/main/standards/X509-SVID.md">
        <front>
          <title>X509-SVID</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="SPIFFE_JWT" target="https://github.com/spiffe/spiffe/blob/main/standards/JWT-SVID.md">
        <front>
          <title>JWT-SVID</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="SPIFFE_ID" target="https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md">
        <front>
          <title>SPIFFE-ID</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="VC-JWT" target="https://www.w3.org/TR/vc-jwt/">
        <front>
          <title>Securing Verifiable Credentials using JSON Web Tokens</title>
          <author initials="B." surname="Zundel" fullname="Brent Zundel">
            <organization/>
          </author>
          <author initials="O." surname="Steele" fullname="Orie Steele">
            <organization/>
          </author>
          <author initials="K." surname="Yasuda" fullname="Kristina Yasuda">
            <organization/>
          </author>
          <date year="2023" month="June" day="14"/>
        </front>
      </reference>
      <reference anchor="SPIFFE-OAUTH-CLIENT-AUTH" target="foo">
        <front>
          <title>OAuth SPIFFE Client Authentication</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="MCP">
        <front>
          <title>Model Context Protocol</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </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>
    <?line 205?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
vkYAAA==

-->

</rfc>
