<?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-01" 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-01"/>
    <author fullname="Pieter Kasselman">
      <organization>SPIRL</organization>
      <address>
        <email>pieter@spirl.com</email>
      </address>
    </author>
    <author fullname="Ismael Kazzouzi">
      <organization>SPIRL</organization>
      <address>
        <email>ismael@spirl.com</email>
      </address>
    </author>
    <date year="2025" month="June" day="24"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>dynamic client registration</keyword>
    <keyword>SPIFFE</keyword>
    <keyword>platform credentials</keyword>
    <abstract>
      <?line 72?>

<t>An OAuth 2.0 client requires specific information to interact with an authorization server, including a client identifier registered with the authorization 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 76?>

<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) <xref target="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 Secure Production Identity Framework For Everyone (SPIFFE) credentials and Verifiable Credentials (VC).</t>
      <section anchor="spiffe-credentials-as-software-statements">
        <name>SPIFFE Credentials as Software Statements</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-as-software-statements">
        <name>Verifiable Credentials as Software Statements</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 206?>

<section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
    <section anchor="document-history">
      <name>Document History</name>
      <t>[[ To be removed from the final specification ]]
-latest
* Editorial updates
* Corrected markup to show all authors</t>
      <t>-00
* Initial draft submitted to Datatracker</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
