<?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.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-oauth-attestation-based-client-auth-08" category="std" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title>OAuth 2.0 Attestation-Based Client Authentication</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-attestation-based-client-auth-08"/>
    <author fullname="Tobias Looker">
      <organization>MATTR</organization>
      <address>
        <email>tobias.looker@mattr.global</email>
      </address>
    </author>
    <author fullname="Paul Bastian">
      <organization>Bundesdruckerei</organization>
      <address>
        <email>paul.bastian@bdr.de</email>
      </address>
    </author>
    <author fullname="Christian Bormann">
      <organization>SPRIND</organization>
      <address>
        <email>chris.bormann@gmx.de</email>
      </address>
    </author>
    <date year="2026" month="March" day="02"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <abstract>
      <?line 73?>

<t>This specification defines an extension to the OAuth 2.0 protocol <xref target="RFC6749"/> that enables a client instance to include a key-bound attestation when interacting with an Authorization Server or Resource Server. This mechanism allows a client instance to prove its authenticity verified by a client attester without revealing its target audience to that attester. It may also serve as a mechanism for client authentication as per OAuth 2.0.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://oauth-wg.github.io/draft-ietf-oauth-attestation-based-client-auth/draft-ietf-oauth-attestation-based-client-auth.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-oauth-attestation-based-client-auth/"/>.
      </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/oauth-wg/draft-ietf-oauth-attestation-based-client-auth"/>.</t>
    </note>
  </front>
  <middle>
    <?line 77?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Traditional OAuth security concepts perform client authentication through a backend channel. In ecosystems such as the Issuer-Holder-Verifier model used in <xref target="RFC9901"/>, this model raises privacy concerns, as it would enable the backend to recognize which Holder (i.e. client) interacts with which Issuer (i.e. Authorization Server) and potentially furthermore see the credentials being issued. This specification establishes a mechanism for a backend-attested client authentication through a frontend channel to address these issues.</t>
      <t>Additionally, this approach acknowledges the evolving landscape of OAuth 2 deployments, where the ability for mobile native apps to authenticate securely and reliably has become increasingly important. Leveraging platform mechanisms to validate a client instance, such as mobile native apps, enables secure authentication that would otherwise be difficult with traditional OAuth client authentication methods. Transforming these platform-specific mechanisms into a common format as described in this specification abstracts this complexity to minimize the efforts for the Authorization Server.</t>
      <t>This primary purpose of this specification is the authentication of a client instance enabled through the client backend attesting to it. The client backend may also attest further technical properties about the hardware and software of the client instance.</t>
      <t>The client is considered a confidential OAuth 2 client type according to section 2.1 of <xref target="RFC6749"/>. The mechanism described in this document may  either serve as a standalone OAuth 2 client authentication mechanism or as an additional, supportive security mechanism beside an existing OAuth 2 client authentication mechanism.</t>
      <t>The following diagram depicts the overall architecture and protocol flow.</t>
      <artwork type="ascii-art"><![CDATA[
                    (3)
                 +-------+
                 |       |
                 |      \ /
             +--------------------+
             |                    |
             |    Client Attester |
             |      (backend)     |
             |                    |
             +--------------------+
                / \      |
            (2)  |       |  (4)
                 |      \ /
             +---------------+           +---------------+
      +----->|               |           |               |
  (1) |      |    Client     |    (6)    | Authorization |
      |      |   Instance    |<--------->|    Server     |
      +------|               |           |               |
             +---------------+           +---------------+
                / \      |
                 |       |
                 +-------+
                    (5)

]]></artwork>
      <t>The following steps describe this OAuth flow:</t>
      <t>(1) The Client Instance generates a key (Client Instance Key) and optional further attestations (that are out of scope) to prove its authenticity to the Client Attester.</t>
      <t>(2) The Client Instance sends this data to the Client Attester in request for a Client Attestation JWT.</t>
      <t>(3) The Client Attester validates the Client Instance Key and optional further data. It generates a signed Client Attestation JWT that is cryptographically bound to the Client Instance Key generated by the Client. Therefore, the attestation is bound to this particular Client Instance.</t>
      <t>(4) The Client Attester responds to the Client Instance by sending the Client Attestation JWT.</t>
      <t>(5) The Client Instance generates a Proof of Possession (PoP) with the Client Instance Key.</t>
      <t>(6) The Client Instance sends both the Client Attestation JWT and the Client Attestation PoP JWT to the authorization server, e.g. within a token request. The authorization server validates the Client Attestation and thus authenticates the Client Instance.</t>
      <t>Please note that the protocol details for steps (2) and (4), particularly how the Client Instance authenticates to the Client Attester, are beyond the scope of this specification. Furthermore, this specification is designed to be flexible and can be implemented even in scenarios where the client does not have a backend serving as a Client Attester. In such cases, each Client Instance is responsible for performing the functions typically handled by the Client Attester on its own.</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="terminology">
      <name>Terminology</name>
      <dl>
        <dt>Client Attestation JWT:</dt>
        <dd>
          <t>A JSON Web Token (JWT) generated by the Client Attester which is bound to a key managed by a Client Instance which can then be used by the instance for client authentication.</t>
        </dd>
        <dt>Client Attestation Proof of Possession (PoP) JWT:</dt>
        <dd>
          <t>A Proof of Possession generated by the Client Instance using the key that the Client Attestation JWT is bound to.</t>
        </dd>
        <dt>Client Instance:</dt>
        <dd>
          <t>A deployed instance of a piece of client software.</t>
        </dd>
        <dt>Client Instance Key:</dt>
        <dd>
          <t>A cryptographic asymmetric key pair that is generated by the Client Instance where the public key of the key pair is provided to the Client Attester. This public key is then encapsulated within the Client Attestation JWT and is utilized to sign the Client Attestation Proof of Possession.</t>
        </dd>
        <dt>Client Attester:</dt>
        <dd>
          <t>An entity that authenticates a Client Instance and attests it by issuing a Client Attestation JWT.</t>
        </dd>
        <dt>Challenge:</dt>
        <dd>
          <t>A String that is the input to a cryptographic challenge-response pattern. This is traditionally called a nonce within OAuth.</t>
        </dd>
      </dl>
    </section>
    <section anchor="relation-to-rats">
      <name>Relation to RATS</name>
      <t>The Remote Attestation Procedures (RATS) architecture defined by <xref target="RFC9334"/> has some commonalities to this document. The flow specified in this specification relates to the "Passport Model" in RATS. However, while the RATS ecosystem gives explicit methods and values how the RATS Attester proves itself to the Verifier, this is deliberately out of scope for Attestation-Based Client Authentication. Additionally, the terminology between RATS and OAuth is different:</t>
      <ul spacing="normal">
        <li>
          <t>a RATS "Attester" relates to an OAuth "Client"</t>
        </li>
        <li>
          <t>a RATS "Relying Party" relates to an OAuth "Authorization Server or Resource Server"</t>
        </li>
        <li>
          <t>a RATS "Verifier" relates to the "Client Attester" defined in this specification</t>
        </li>
        <li>
          <t>a RATS "Attestion Result" relates to the "Client Attestation JWT" defined by this specification</t>
        </li>
        <li>
          <t>a RATS "Endorser", "Reference Value Provider", "Endorsement", "Evidence" and "Policies and Reference Values" are out of scope for this specification</t>
        </li>
      </ul>
    </section>
    <section anchor="client-attestation-format">
      <name>Client Attestation Format</name>
      <t>This draft introduces the concept of client attestations to the OAuth 2 protocol, using two JWTs: a Client Attestation and a Client Attestation Proof of Possession (PoP). The primary purpose of these JWTs is to authenticate the Client Instance. These JWTs are transmitted via HTTP headers in an HTTP request (as described in <xref target="headers"/>) from a Client Instance to an Authorization Server or Resource Server.</t>
      <section anchor="client-attestation-jwt">
        <name>Client Attestation JWT</name>
        <t>The Client Attestation <bcp14>MUST</bcp14> be encoded as a "JSON Web Token (JWT)" according to <xref target="RFC7519"/>.</t>
        <t>The following content applies to the JWT Header:</t>
        <ul spacing="normal">
          <li>
            <t><tt>typ</tt>: <bcp14>REQUIRED</bcp14>. The JWT type <bcp14>MUST</bcp14> be <tt>oauth-client-attestation+jwt</tt>.</t>
          </li>
        </ul>
        <t>The following content applies to the JWT Claims Set:</t>
        <ul spacing="normal">
          <li>
            <t><tt>sub</tt>: <bcp14>REQUIRED</bcp14>. The <tt>sub</tt> (subject) claim <bcp14>MUST</bcp14> specify client_id value of the OAuth Client.</t>
          </li>
          <li>
            <t><tt>exp</tt>: <bcp14>REQUIRED</bcp14>. The <tt>exp</tt> (expiration time) claim <bcp14>MUST</bcp14> specify the time at which the Client Attestation is considered expired by its issuer. The authorization server <bcp14>MUST</bcp14> reject any JWT with an expiration time that has passed, subject to allowable clock skew between systems.</t>
          </li>
          <li>
            <t><tt>cnf</tt>: <bcp14>REQUIRED</bcp14>. The <tt>cnf</tt> (confirmation) claim <bcp14>MUST</bcp14> specify a key conforming to <xref target="RFC7800"/> that is used by the Client Instance to generate the Client Attestation PoP JWT for client authentication with an authorization server. The key <bcp14>MUST</bcp14> be expressed using the "jwk" representation.</t>
          </li>
          <li>
            <t><tt>iat</tt>: <bcp14>OPTIONAL</bcp14>. The <tt>iat</tt> (issued at) claim <bcp14>MUST</bcp14> specify the time at which the Client Attestation was issued.</t>
          </li>
        </ul>
        <t>The following additional rules apply:</t>
        <ol spacing="normal" type="1"><li>
            <t>The JWT <bcp14>MAY</bcp14> contain other claims. All claims that are not understood by implementations <bcp14>MUST</bcp14> be ignored.</t>
          </li>
          <li>
            <t>The JWT <bcp14>MUST</bcp14> be digitally signed or integrity protected with a Message Authentication Code (MAC). The authorization server <bcp14>MUST</bcp14> reject JWTs if signature or integrity protection validation fails.</t>
          </li>
          <li>
            <t>The authorization server <bcp14>MUST</bcp14> reject a JWT that is not valid in all other respects per "JSON Web Token (JWT)" <xref target="RFC7519"/>.</t>
          </li>
        </ol>
        <t>The following example is the decoded header and payload of a JWT meeting the processing rules as defined above.</t>
        <artwork><![CDATA[
{
  "typ": "oauth-client-attestation+jwt",
  "alg": "ES256",
  "kid": "11"
}
.
{
  "sub": "https://client.example.com",
  "iat": 1772487595,
  "exp": 2529866394,
  "cnf": {
    "jwk": {
      "kty": "EC",
      "use": "sig",
      "crv": "P-256",
      "x": "VcKVNBZ4IaBAYW3jxM4w3TJFVA7myeUGQyGt-g_yvpQ",
      "y": "f-E-hYE3TAWKwhVv9pej9NABs9SX9XsNO80x57jFTyU"
    }
  }
}
]]></artwork>
      </section>
      <section anchor="client-attestation-pop-jwt">
        <name>Client Attestation PoP JWT</name>
        <t>The Client Attestation PoP <bcp14>MUST</bcp14> be encoded as a "JSON Web Token (JWT)" according to <xref target="RFC7519"/>.</t>
        <t>The following content applies to the JWT Header:</t>
        <ul spacing="normal">
          <li>
            <t><tt>typ</tt>: <bcp14>REQUIRED</bcp14>. The JWT type <bcp14>MUST</bcp14> be <tt>oauth-client-attestation-pop+jwt</tt>.</t>
          </li>
        </ul>
        <t>The following content applies to the JWT Claims Set:</t>
        <ul spacing="normal">
          <li>
            <t><tt>aud</tt>: <bcp14>REQUIRED</bcp14>. The <tt>aud</tt> (audience) claim <bcp14>MUST</bcp14> specify a value that identifies the authorization server as an intended audience. The <xref target="RFC8414"/> issuer identifier URL of the authorization server <bcp14>MUST</bcp14> be used as a value for an "aud" element to identify the authorization server as the intended audience of the JWT.</t>
          </li>
          <li>
            <t><tt>jti</tt>: <bcp14>REQUIRED</bcp14>. The <tt>jti</tt> (JWT identifier) claim <bcp14>MUST</bcp14> specify a unique identifier for the Client Attestation PoP. The authorization server can utilize the <tt>jti</tt> value for replay attack detection, see <xref target="security-consideration-replay"/>.</t>
          </li>
          <li>
            <t><tt>iat</tt>: <bcp14>REQUIRED</bcp14>. The <tt>iat</tt> (issued at) claim <bcp14>MUST</bcp14> specify the time at which the Client Attestation PoP was issued. Note that the authorization server may reject JWTs with an "iat" claim value that is unreasonably far in the past.</t>
          </li>
          <li>
            <t><tt>challenge</tt>: <bcp14>OPTIONAL</bcp14>. The <tt>challenge</tt> (challenge) claim <bcp14>MUST</bcp14> specify a String value that is provided by the authorization server for the client to include in the Client Attestation PoP JWT.</t>
          </li>
        </ul>
        <t>The following additional rules apply:</t>
        <ol spacing="normal" type="1"><li>
            <t>The JWT <bcp14>MAY</bcp14> contain other claims. All claims that are not understood by implementations <bcp14>MUST</bcp14> be ignored.</t>
          </li>
          <li>
            <t>The JWT <bcp14>MUST</bcp14> be digitally signed using an asymmetric cryptographic algorithm. The authorization server <bcp14>MUST</bcp14> reject JWTs with an invalid signature.</t>
          </li>
          <li>
            <t>The public key used to verify the JWT <bcp14>MUST</bcp14> be the key located in the "cnf" claim of the corresponding Client Attestation JWT.</t>
          </li>
          <li>
            <t>The Authorization Server <bcp14>MUST</bcp14> reject a JWT that is not valid in all other respects per "JSON Web Token (JWT)" <xref target="RFC7519"/>.</t>
          </li>
        </ol>
        <t>The following example is the decoded header and payload of a JWT meeting the processing rules as defined above.</t>
        <artwork><![CDATA[
{
  "typ": "oauth-client-attestation-pop+jwt",
  "alg": "ES256"
}
.
{
  "aud": "https://as.example.com",
  "jti": "d25d00ab-552b-46fc-ae19-98f440f25064",
  "challenge": "5c1a9e10-29ff-4c2b-ae73-57c0957c09c4"
}
]]></artwork>
      </section>
    </section>
    <section anchor="header-based">
      <name>Client Attestation using a Header based syntax</name>
      <t>The following section defines how a Client Attestation can be provided in an HTTP request using HTTP headers.</t>
      <section anchor="headers">
        <name>Client Attestation HTTP Headers</name>
        <t>When using headers to transfer the Client Attestation JWT and Client Attestation PoP JWT to an Authorization Server, they <bcp14>MUST</bcp14> be provided in an HTTP request using the following HTTP headers.</t>
        <dl>
          <dt>OAuth-Client-Attestation:</dt>
          <dd>
            <t>A JWT that conforms to the structure and syntax as defined in <xref target="client-attestation-jwt"/></t>
          </dd>
          <dt>OAuth-Client-Attestation-PoP:</dt>
          <dd>
            <t>A JWT that adheres to the structure and syntax as defined in <xref target="client-attestation-pop-jwt"/></t>
          </dd>
        </dl>
        <t>The following is an example of the OAuth-Client-Attestation header.</t>
        <artwork><![CDATA[
OAuth-Client-Attestation: eyJ0eXAiOiJvYXV0aC1jbGllbnQtYXR0ZXN0YXRpb24
rand0IiwiYWxnIjoiRVMyNTYiLCJraWQiOiIxMSJ9.eyJzdWIiOiJodHRwczovL2NsaWV
udC5leGFtcGxlLmNvbSIsImlhdCI6MTc3MjQ4NzU5NSwiZXhwIjoyNTI5ODY2Mzk0LCJj
bmYiOnsiandrIjp7Imt0eSI6IkVDIiwidXNlIjoic2lnIiwiY3J2IjoiUC0yNTYiLCJ4I
joiVmNLVk5CWjRJYUJBWVczanhNNHczVEpGVkE3bXllVUdReUd0LWdfeXZwUSIsInkiOi
JmLUUtaFlFM1RBV0t3aFZ2OXBlajlOQUJzOVNYOVhzTk84MHg1N2pGVHlVIn19fQ._TS4
d-LAnRlwdN97wiVnl4z7C9gvm45IWr-BvGTzeZaHtZtgNZ88gvzroU3LElUPbgF4kWi_D
FORnKzsx5yu6A
]]></artwork>
        <t>The following is an example of the OAuth-Client-Attestation-PoP header.</t>
        <artwork><![CDATA[
OAuth-Client-Attestation-PoP: eyJhbGciOiJFUzI1NiIsInR5cCI6Im9hdXRoLWN
saWVudC1hdHRlc3RhdGlvbi1wb3Arand0In0.eyJhdWQiOiJodHRwczovL2FzLmV4YW1w
bGUuY29tIiwianRpIjoiZDI1ZDAwYWItNTUyYi00NmZjLWFlMTktOThmNDQwZjI1MDY0I
iwibm9uY2UiOiI1YzFhOWUxMC0yOWZmLTRjMmItYWU3My01N2MwOTU3YzA5YzQifQ.U0u
AUL60MXSf2qB3uWoo1tQanBMLa7OJ-pk_GsA_o1rfJfRkUOyWpqeSbNH90ykVad-m6x5M
crEnFgCqdkNfUA
]]></artwork>
        <t>Note that per <xref target="RFC9110"/> header field names are case-insensitive; so OAUTH-CLIENT-ATTESTATION, oauth-client-attestation, etc., are all valid and equivalent
header field names. Case is significant in the header field value, however.</t>
        <t>The OAuth-Client-Attestation and OAuth-Client-Attestation-PoP HTTP header field values uses the token68 syntax defined in Section 11.2 of <xref target="RFC9110"/> (repeated below for ease of reference).</t>
        <artwork><![CDATA[
OAuth-Client-Attestation       = token68
OAuth-Client-Attestation-PoP   = token68
token68                        = 1*( ALPHA / DIGIT / "-" / "." /
                                     "_" / "~" / "+" / "/" ) *"="
]]></artwork>
        <t>It is <bcp14>RECOMMENDED</bcp14> that the authorization server validate the Client Attestation JWT prior to validating the Client Attestation PoP.</t>
      </section>
      <section anchor="checking-http-requests-with-client-attestations">
        <name>Validating HTTP requests featuring client attestations</name>
        <t>To validate an HTTP request which contains the client attestation headers, the receiving server <bcp14>MUST</bcp14> ensure the following with regard to a received HTTP request:</t>
        <ol spacing="normal" type="1"><li>
            <t>There is precisely one OAuth-Client-Attestation HTTP request header field, where its value is a single well-formed JWT conforming to the syntax outlined in <xref target="client-attestation-jwt"/>.</t>
          </li>
          <li>
            <t>There is precisely one OAuth-Client-Attestation-PoP HTTP request header field, where its value is a single well-formed JWT conforming to the syntax outlined in <xref target="client-attestation-pop-jwt"/>.</t>
          </li>
          <li>
            <t>The signature of the Client Attestation PoP JWT obtained from the OAuth-Client-Attestation-PoP HTTP header verifies with the Client Instance Key contained in the <tt>cnf</tt> claim of the Client Attestation JWT obtained from the OAuth-Client-Attestation HTTP header.</t>
          </li>
        </ol>
        <t>When validation errors specifically related to the use of client attestations are encountered the following additional error codes are defined for use in either Authorization Server authenticated endpoint error responses (as defined in Section 5.2 of <xref target="RFC6749"/>) or Resource Server error responses (as defined in Section 3 of <xref target="RFC6750"/>).</t>
        <ul spacing="normal">
          <li>
            <t><tt>use_attestation_challenge</tt> <bcp14>MUST</bcp14> be used when the Client Attestation PoP JWT is not using an expected server-provided challenge. When used this error code <bcp14>MUST</bcp14> be accompanied by the <tt>OAuth-Client-Attestation-Challenge</tt> HTTP header field parameter (as described in <xref target="challenge-header"/>).</t>
          </li>
          <li>
            <t><tt>use_fresh_attestation</tt> <bcp14>MUST</bcp14> be used when the Client Attestation JWT is deemed to be not fresh enough to be acceptable by the server.</t>
          </li>
          <li>
            <t><tt>invalid_client_attestation</tt> <bcp14>MAY</bcp14> be used in addition to the more general <tt>invalid_client</tt> error code as defined in <xref target="RFC6749"/> if the attestation or its proof of possession could not be successfully verified.</t>
          </li>
        </ul>
        <t>In the event of errors due to situations not described above, Authorization and Resource Servers <bcp14>MUST</bcp14> follow the guidance of <xref target="RFC6749"/> and <xref target="RFC6750"/> or their respective extensions of when to return suitable Error Responses.</t>
      </section>
      <section anchor="client-attestation-as-an-oauth-client-authentication">
        <name>Client Attestation as an OAuth Client Authentication</name>
        <t>A Client Attestation may be used as an OAuth 2 Client Authentication mechanism as described in Section 2.3 of <xref target="RFC6749"/> towards an Authorization Server. In this case, the Authorization Server <bcp14>MUST</bcp14> perform all of the checks outlined in <xref target="checking-http-requests-with-client-attestations"/> for a received access token request or similar endpoints.</t>
        <t>If the token request contains a <tt>client_id</tt> parameter as per <xref target="RFC6749"/> the Authorization Server <bcp14>MUST</bcp14> verify that the value of this parameter is the same as the client_id value in the <tt>sub</tt> claim of the Client Attestation.</t>
        <t>The following example demonstrates usage of the client attestation mechanism in an access token request (with extra line breaks for display purposes only):</t>
        <artwork><![CDATA[
POST /token HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
OAuth-Client-Attestation: eyJ0eXAiOiJvYXV0aC1jbGllbnQtYXR0ZXN0YXRpb24
rand0IiwiYWxnIjoiRVMyNTYiLCJraWQiOiIxMSJ9.eyJzdWIiOiJodHRwczovL2NsaWV
udC5leGFtcGxlLmNvbSIsImlhdCI6MTc3MjQ4NzU5NSwiZXhwIjoyNTI5ODY2Mzk0LCJj
bmYiOnsiandrIjp7Imt0eSI6IkVDIiwidXNlIjoic2lnIiwiY3J2IjoiUC0yNTYiLCJ4I
joiVmNLVk5CWjRJYUJBWVczanhNNHczVEpGVkE3bXllVUdReUd0LWdfeXZwUSIsInkiOi
JmLUUtaFlFM1RBV0t3aFZ2OXBlajlOQUJzOVNYOVhzTk84MHg1N2pGVHlVIn19fQ._TS4
d-LAnRlwdN97wiVnl4z7C9gvm45IWr-BvGTzeZaHtZtgNZ88gvzroU3LElUPbgF4kWi_D
FORnKzsx5yu6A
OAuth-Client-Attestation-PoP: eyJhbGciOiJFUzI1NiIsInR5cCI6Im9hdXRoLWN
saWVudC1hdHRlc3RhdGlvbi1wb3Arand0In0.eyJhdWQiOiJodHRwczovL2FzLmV4YW1w
bGUuY29tIiwianRpIjoiZDI1ZDAwYWItNTUyYi00NmZjLWFlMTktOThmNDQwZjI1MDY0I
iwibm9uY2UiOiI1YzFhOWUxMC0yOWZmLTRjMmItYWU3My01N2MwOTU3YzA5YzQifQ.U0u
AUL60MXSf2qB3uWoo1tQanBMLa7OJ-pk_GsA_o1rfJfRkUOyWpqeSbNH90ykVad-m6x5M
crEnFgCqdkNfUA

grant_type=authorization_code&
code=n0esc3NRze7LTCu7iYzS6a5acc3f0ogp4
]]></artwork>
      </section>
      <section anchor="client-attestation-as-an-additional-security-signal">
        <name>Client Attestation as an additional security signal</name>
        <t>A Client Attestation may be used as a (additional) security signal towards an Authorization Server or Resource Server. This may provide additional assurance about the client's authenticity, integrity, state or other information contained in the Client Attestation. When used at the Authorization Server, the Client Attestation may appear along existing OAuth 2 Client Authentication mechanisms.</t>
        <t>The following example demonstrates usage of the client attestation mechanism in a PAR request as defined in <xref target="RFC9126"/> along side client_secret (with extra line breaks for display purposes only):</t>
        <artwork><![CDATA[
POST /as/par HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
OAuth-Client-Attestation: eyJ0eXAiOiJvYXV0aC1jbGllbnQtYXR0ZXN0YXRpb24
rand0IiwiYWxnIjoiRVMyNTYiLCJraWQiOiIxMSJ9.eyJzdWIiOiJodHRwczovL2NsaWV
udC5leGFtcGxlLmNvbSIsImlhdCI6MTc3MjQ4NzU5NSwiZXhwIjoyNTI5ODY2Mzk0LCJj
bmYiOnsiandrIjp7Imt0eSI6IkVDIiwidXNlIjoic2lnIiwiY3J2IjoiUC0yNTYiLCJ4I
joiVmNLVk5CWjRJYUJBWVczanhNNHczVEpGVkE3bXllVUdReUd0LWdfeXZwUSIsInkiOi
JmLUUtaFlFM1RBV0t3aFZ2OXBlajlOQUJzOVNYOVhzTk84MHg1N2pGVHlVIn19fQ._TS4
d-LAnRlwdN97wiVnl4z7C9gvm45IWr-BvGTzeZaHtZtgNZ88gvzroU3LElUPbgF4kWi_D
FORnKzsx5yu6A
OAuth-Client-Attestation-PoP: eyJhbGciOiJFUzI1NiIsInR5cCI6Im9hdXRoLWN
saWVudC1hdHRlc3RhdGlvbi1wb3Arand0In0.eyJhdWQiOiJodHRwczovL2FzLmV4YW1w
bGUuY29tIiwianRpIjoiZDI1ZDAwYWItNTUyYi00NmZjLWFlMTktOThmNDQwZjI1MDY0I
iwibm9uY2UiOiI1YzFhOWUxMC0yOWZmLTRjMmItYWU3My01N2MwOTU3YzA5YzQifQ.U0u
AUL60MXSf2qB3uWoo1tQanBMLa7OJ-pk_GsA_o1rfJfRkUOyWpqeSbNH90ykVad-m6x5M
crEnFgCqdkNfUA

response_type=code
&state=af0ifjsldkj
&client_id=s6BhdRkqt3
&client_secret=7Fjfp0ZBr1KtDRbnfVdmIw
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
&code_challenge=K2-ltc83acc4h0c9w6ESC_rEMTJ3bww-uCHaoeK1t8U
&code_challenge_method=S256&scope=account-information
]]></artwork>
        <t>The following example demonstrates usage of the client attestation mechanism at the Resource Server (with extra line breaks for display purposes only):</t>
        <artwork><![CDATA[
POST /api/users/list HTTP/1.1
Host: rs.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer mF_9.B5f-4.1JqM
Accept: application/json
OAuth-Client-Attestation: eyJ0eXAiOiJvYXV0aC1jbGllbnQtYXR0ZXN0YXRpb24
rand0IiwiYWxnIjoiRVMyNTYiLCJraWQiOiIxMSJ9.eyJzdWIiOiJodHRwczovL2NsaWV
udC5leGFtcGxlLmNvbSIsImlhdCI6MTc3MjQ4NzU5NSwiZXhwIjoyNTI5ODY2Mzk0LCJj
bmYiOnsiandrIjp7Imt0eSI6IkVDIiwidXNlIjoic2lnIiwiY3J2IjoiUC0yNTYiLCJ4I
joiVmNLVk5CWjRJYUJBWVczanhNNHczVEpGVkE3bXllVUdReUd0LWdfeXZwUSIsInkiOi
JmLUUtaFlFM1RBV0t3aFZ2OXBlajlOQUJzOVNYOVhzTk84MHg1N2pGVHlVIn19fQ._TS4
d-LAnRlwdN97wiVnl4z7C9gvm45IWr-BvGTzeZaHtZtgNZ88gvzroU3LElUPbgF4kWi_D
FORnKzsx5yu6A
OAuth-Client-Attestation-PoP: eyJhbGciOiJFUzI1NiIsInR5cCI6Im9hdXRoLWN
saWVudC1hdHRlc3RhdGlvbi1wb3Arand0In0.eyJhdWQiOiJodHRwczovL3JzLmV4YW1w
bGUuY29tIiwianRpIjoiZDI1ZDAwYWItNTUyYi00NmZjLWFlMTktOThmNDQwZjI1MDY0I
iwibm9uY2UiOiI1YzFhOWUxMC0yOWZmLTRjMmItYWU3My01N2MwOTU3YzA5YzQifQ.gzk
0WkWsjNNx92gVMSp6jVpPDUvR0toYxLMyGmJMJOfm8mG2Otg0Nfm4PefOUpwBMNQtIXSd
dW-cqJopljQaCQ
]]></artwork>
      </section>
    </section>
    <section anchor="challenge-retrieval">
      <name>Challenge Retrieval</name>
      <t>This section defines an optional mechanism that allows a Client to request a fresh Challenge from the Authorization Server to be included in the Client Attestation PoP JWT. This construct may be similar or equivalent to a nonce, see <xref target="terminology"/>. The value of the challenge is opaque to the client.</t>
      <t>An Authorization Server <bcp14>MAY</bcp14> offer a challenge endpoint for Clients to fetch Challenges in the context of this specification. If the Authorization Server supports metadata as defined in <xref target="RFC8414"/>, it <bcp14>MUST</bcp14> signal support for the challenge endpoint by including the metadata entry <tt>challenge_endpoint</tt> containing the URL of the endpoint as its value. If the Authorization Server offers a challenge endpoint, the Client <bcp14>MUST</bcp14> retrieve a challenge and <bcp14>MUST</bcp14> use this challenge in the OAuth-Attestation-PoP as defined in <xref target="client-attestation-pop-jwt"/>.</t>
      <t>A request for a Challenge is made by sending an HTTP POST request to the URL provided in the challenge_endpoint parameter of the Authorization Server metadata.</t>
      <t>The following is a non-normative example of a request:</t>
      <artwork><![CDATA[
POST /as/challenge HTTP/1.1
Host: as.example.com
Accept: application/json
]]></artwork>
      <t>The Authorization Server provides a Challenge in the HTTP response with a 200 status code and the following parameters included in the message body of the HTTP response using the application/json media type:</t>
      <ul spacing="normal">
        <li>
          <t>attestation_challenge: <bcp14>REQUIRED</bcp14> if the authorization server supports Client Attestations and server provided challenges as described in this document. String containing a Challenge to be used in the OAuth-Attestation-PoP as defined in <xref target="client-attestation-pop-jwt"/>. The intention of this element not being required in other circumstances is to preserve the ability for the challenge endpoint to be used in other applications unrelated to client attestations.</t>
        </li>
      </ul>
      <t>The Authorization Server <bcp14>MUST</bcp14> make the response uncacheable by adding a <tt>Cache-Control</tt> header field including the value <tt>no-store</tt>. The Authorization Server <bcp14>MAY</bcp14> add additional challenges or data.</t>
      <t>The following is a non-normative example of a response:</t>
      <artwork><![CDATA[
HTTP/1.1 200 OK
Host: as.example.com
Content-Type: application/json
Cache-Control: no-store

{
  "attestation_challenge": "AYjcyMzY3ZDhiNmJkNTZ"
}
]]></artwork>
      <section anchor="challenge-header">
        <name>Providing Challenges on Previous Responses</name>
        <t>The Authorization Server <bcp14>MAY</bcp14> provide a fresh Challenge with any HTTP response using a HTTP header-based syntax. The HTTP header field parameter <bcp14>MUST</bcp14> be named "OAuth-Client-Attestation-Challenge" and contain the value of the Challenge. The Client <bcp14>MUST</bcp14> use this new Challenge for the next OAuth-Client-Attestation-PoP.</t>
        <t>The following is a non-normative example of an Authorization Response containing a fresh Challenge:</t>
        <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
OAuth-Client-Attestation-Challenge: AYjcyMzY3ZDhiNmJkNTZ

{
  "access_token": "2YotnFZFEjr1zCsicMWpAA",
  "token_type": "Bearer",
  "expires_in": 3600
}
]]></artwork>
      </section>
    </section>
    <section anchor="verification-and-processing">
      <name>Verification and Processing</name>
      <t>Upon receiving a Client Attestation, the receiving server <bcp14>MUST</bcp14> ensure the following conditions and rules:</t>
      <ol spacing="normal" type="1"><li>
          <t>If the Client Attestation was received via Header based Syntax (as described in <xref target="header-based"/>):  </t>
          <ul spacing="normal">
            <li>
              <t>The HTTP request contains exactly one field <tt>OAuth-Client-Attestation</tt> and one field <tt>OAuth-Client-Attestation-PoP</tt>.</t>
            </li>
            <li>
              <t>Both fields contain exactly one well-formed JWT.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>The Client Attestation JWT contains all claims and header parameters as per <xref target="client-attestation-jwt"/>.</t>
        </li>
        <li>
          <t>The Client Attestation PoP JWT contains all claims and header parameters as per <xref target="client-attestation-pop-jwt"/>.</t>
        </li>
        <li>
          <t>The alg JOSE Header Parameter for both JWTs indicates a registered asymmetric digital signature algorithm <xref target="IANA.JOSE.ALGS"/>, is not none, is supported by the application, and is acceptable per local policy. The alg JOSE Header Parameter for the Client Attestation JWT can also be a registered Message Authentication Code (MAC).</t>
        </li>
        <li>
          <t>The signature of the Client Attestation JWT verifies with the public key of a known and trusted Attester.</t>
        </li>
        <li>
          <t>The key contained in the <tt>cnf</tt> claim of the Client Attestation JWT is not a private key.</t>
        </li>
        <li>
          <t>The signature of the Client Attestation PoP JWT verifies with the public key contained in the <tt>cnf</tt> claim of the Client Attestation JWT.</t>
        </li>
        <li>
          <t>If the server provided a challenge value to the client, the <tt>challenge</tt> claim is present in the Client Attestation PoP JWT and matches the server-provided challenge value.</t>
        </li>
        <li>
          <t>The creation time of the Client Attestation PoP JWT as determined by either the <tt>iat</tt> claim or a server managed timestamp via the challenge claim, is within an acceptable window.</t>
        </li>
        <li>
          <t>The audience claim in the Client Attestation PoP JWT is the issuer identifier URL of the authorization server as described in <xref target="RFC8414"/>.</t>
        </li>
        <li>
          <t>The Client Attestation JWT is fresh enough for the policies of the authorization server by checking the <tt>iat</tt> or <tt>exp</tt> claims.</t>
        </li>
        <li>
          <t>Depending on the security requirements of the deployment, additional checks to guarantee replay protection for the Client Attestation PoP JWT might need to be applied (see <xref target="security-consideration-replay"/> for more details).</t>
        </li>
        <li>
          <t>If a <tt>client_id</tt> is provided in the request containing the Client Attestation, then this <tt>client_id</tt> matches the <tt>sub</tt> claim of the Client Attestation JWT.</t>
        </li>
      </ol>
    </section>
    <section anchor="authorization-server-metadata">
      <name>Authorization Server Metadata</name>
      <t>The Authorization Server <bcp14>SHOULD</bcp14> communicate support and requirement for authentication with Attestation-Based Client Authentication by using the value <tt>attest_jwt_client_auth</tt> in the <tt>token_endpoint_auth_methods_supported</tt> within its published metadata. The client <bcp14>SHOULD</bcp14> fetch and parse the Authorization Server metadata and recognize Attestation-Based Client Authentication as a client authentication mechanism if the given parameters are present.</t>
      <t>The Authorization Server <bcp14>SHOULD</bcp14> communicate supported algorithms for client attestations by using <tt>client_attestation_signing_alg_values_supported</tt> and <tt>client_attestation_pop_signing_alg_values_supported</tt> within its published metadata. This enables the client to validate that its client attestation is understood by the Authorization Server prior to authentication. The client <bcp14>MAY</bcp14> try to get a new client attestation with different algorithms. The Authorization Server <bcp14>MUST</bcp14> include <tt>client_attestation_signing_alg_values_supported</tt> and <tt>client_attestation_pop_signing_alg_values_supported</tt> in its published metadata if the <tt>token_endpoint_auth_methods_supported</tt> includes <tt>attest_jwt_client_auth</tt>.</t>
    </section>
    <section anchor="implementation-considerations">
      <name>Implementation Considerations</name>
      <section anchor="reuse-of-a-client-attestation-jwt">
        <name>Reuse of a Client Attestation JWT</name>
        <t>Implementers should be aware that the design of this authentication mechanism deliberately allows for a Client Instance to re-use a single Client Attestation JWT in multiple interactions/requests with an Authorization Server, whilst producing a fresh Client Attestation PoP JWT. Client deployments should consider this when determining the validity period for issued Client Attestation JWTs as this ultimately controls how long a Client Instance can re-use a single Client Attestation JWT.</t>
      </section>
      <section anchor="refresh-token-binding">
        <name>Refresh token binding</name>
        <t>Authorization servers issuing a refresh token in response to a token request using the client attestation mechanism as defined by this draft <bcp14>MUST</bcp14> bind the refresh token to the Client Instance and its associated public key, and NOT just the client as specified in section 6 <xref target="RFC6749"/>. To prove this binding, the Client Instance <bcp14>MUST</bcp14> use the client attestation mechanism when refreshing an access token. The client <bcp14>MUST</bcp14> also use the same key that was present in the "cnf" claim of the client attestation that was used when the refresh token was issued.</t>
      </section>
      <section anchor="web-server-default-maximum-http-header-sizes">
        <name>Web Server Default Maximum HTTP Header Sizes</name>
        <t>Because the Client Attestation and Client Attestation PoP are communicated using HTTP headers, implementers should consider that web servers may have a default maximum HTTP header size configured which could be too low to allow conveying a Client Attestation and or Client Attestation PoP in an HTTP request. It should be noted, that this limit is not given by the HTTP <xref target="RFC9112"/>, but instead web server implementations commonly set a default maximum size for HTTP headers. As of 2024, typical limits for modern web servers configure maximum HTTP headers as 8 kB or more as a default.</t>
      </section>
      <section anchor="rotation-of-client-instance-key">
        <name>Rotation of Client Instance Key</name>
        <t>This specification does not provide a mechanism to rotate the Client Instance Key in the Client Attestation JWT's "cnf" claim. If the Client Instance needs to use a new Client Instance Key for any reason, then it <bcp14>MUST</bcp14> request a new Client Attestation JWT from its Client Attester.</t>
      </section>
      <section anchor="implementation-consideration-replay">
        <name>Replay Attack Detection</name>
        <t>Authorization Servers implementing measures to detect replay attacks as described in <xref target="security-consideration-replay"/> require efficient data structures to manage large amounts of challenges for use cases with high volumes of transactions. To limit the size of the data structure, the Authorization Server should use a sliding window, allowing Client Attestation PoPs within a certain time window, in which the seen <tt>challenge</tt> or <tt>jti</tt> values are stored, but discarded afterwards. To ensure security, Client Attestation PoPs outside this time window <bcp14>MUST</bcp14> be rejected by the Authorization Server. The allowed window is determined by the <tt>iat</tt> of the Client Attestation PoP and the sliding window time duration chosen by the Authorization Server. These data structures need to:</t>
        <ul spacing="normal">
          <li>
            <t>search the data structure to validate whether a challenge form a Client Attestation PoP has been previously seen</t>
          </li>
          <li>
            <t>insert the new challenges from the Client Attestation PoP if the search returned no result</t>
          </li>
          <li>
            <t>delete the challenges after the Client Attestation PoP has passed the sliding time window</t>
          </li>
        </ul>
        <t>A trie (also called prefix tree), or a patricia trie (also called radix tree) is a <bcp14>RECOMMENDED</bcp14> data structures to implement such a mechanism.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <section anchor="client-instance-tracking-across-authorization-servers">
        <name>Client Instance Tracking Across Authorization Servers</name>
        <t>Implementers should be aware that using the same client attestation across multiple authorization servers could result in correlation of the end user using the Client Instance through claim values (including the Client Instance Key in the <tt>cnf</tt> claim). Client deployments are therefore <bcp14>RECOMMENDED</bcp14> to use different Client Attestation JWTs with different Client Instance Keys across different authorization servers.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The guidance provided by <xref target="RFC7519"/> and <xref target="RFC8725"/> applies.</t>
      <section anchor="security-consideration-replay">
        <name>Replay Attacks</name>
        <t>An Authorization Server <bcp14>SHOULD</bcp14> implement measures to detect replay attacks by the Client Instance. In the context of this specification, this means to detect that an attacker is resending the same Client Attestation PoP JWT in multiple requests. The following options are <bcp14>RECOMMENDED</bcp14> for this client authentication method:</t>
        <ul spacing="normal">
          <li>
            <t>The Authorization Server manages a list of witnessed <tt>jti</tt> values of the Client Attestation PoP JWT for the time window of which the JWT would be considered valid. This sliding time window is based on the <tt>iat</tt> of the Client Attestation PoP and and the duration chosen by the Authorization Server. If any Client Attestation PoP JWT would be replayed, the Authorization Server would recognize the <tt>jti</tt> value in the list and respond with an authentication error. Details how to implement such a data structure to maintain <tt>jti</tt> values is given in <xref target="implementation-consideration-replay"/>.</t>
          </li>
          <li>
            <t>The Authorization Server provides a challenge as an <tt>OAuth-Client-Attestation-Challenge</tt> in the challenge endpoint to the Client Instance and the Client uses it as a <tt>challenge</tt> value in the Client Attestation PoP JWT. The Authorization Server may chose to:
            </t>
            <ul spacing="normal">
              <li>
                <t>manage a list of witnessed <tt>challenge</tt> values, similar to the previously described <tt>jti</tt> approach. Details how to implement such a data structure to maintain <tt>challenge</tt> values is given in <xref target="implementation-consideration-replay"/>. This guarantees stronger replay protection with a challenge chosen by the Authorization Server itself, at the potential cost of an additional round-trip.</t>
              </li>
              <li>
                <t>use self-contained challenges while not storing the seen challenges. This approach scales well, while only guaranteeing freshness, but no replay protection within the limited time-window chosen by the Authorization Server.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The Authorization Server generates a challenge that is bound to the Client Instance's session, such that a specific <tt>challenge</tt> in the Client Attestation PoP JWT is expected and validated. The Authorization Server may either:
            </t>
            <ul spacing="normal">
              <li>
                <t>send the challenge as part of another previous response to the Client Instance of providing the challenge explicitly</t>
              </li>
              <li>
                <t>reuse an existing artefact of the Client Instance's session, e.g. the authorization code. This <bcp14>MUST</bcp14> be communicated out-of-band between Authorization Server and Client.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Note that protocols that provide a challenge as part of a previous response should provide a clear indicator for clients when this feature is used. This makes it easier for client implementations to deal with proper state handling. This can be implicit by always mandating support for this feature or via some metadata that allows the client to detect support for this feature for a specific server.</t>
        <t>Because clock skews between servers and clients may be large, Authorization Servers <bcp14>MAY</bcp14> limit Client Attestation PoP lifetimes by using server-provided challenge values containing the time at the server rather than comparing the client-supplied iat time to the time at the server. Challenges created in this way yield the same result even in the face of arbitrarily large clock skews.</t>
        <t>In any case the Authorization Server <bcp14>SHOULD</bcp14> ensure the freshness of the Client Attestation PoP by checking either the iat claim or if present the server provided challenge, is within an acceptable time window.</t>
        <t>The approach using a challenge explicitly provided by the Authorization Server gives stronger replay attack detection guarantees, however support by the Authorization Server is <bcp14>OPTIONAL</bcp14> to simplify mandatory implementation requirements. The <tt>jti</tt> value is mandatory and hence acts as a default fallback.</t>
      </section>
      <section anchor="client-attestation-protection">
        <name>Client Attestation Protection</name>
        <t>This specification allows both, digital signatures using asymmetric cryptography, and Message Authentication Codes (MAC) to be used to protect Client Attestation JWTs. Implementers should only use MACs to secure the integrity of Client Attestations JWTs if they fully understand the risks of MACs when compared to digital signatures and especially the requirements of their use-case scenarios.
These use-cases typically represent deployments where the Client Attester and Authorization Server have a trust relationship and the possibility to securely exchange keys out of band or are the same entity and no other entity needs to verify the Client Attestations. We expect most deployments to use digital signatures for the protection of Client Attestations, and implementers <bcp14>SHOULD</bcp14> default to digital signatures if they are unsure.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="oauth-parameters-registration">
        <name>OAuth Parameters Registration</name>
        <t>This specification requests registration of the following values in the IANA "OAuth Authorization Server Metadata" registry <xref target="IANA.OAuth.Params"/> established by <xref target="RFC8414"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Metadata Name: challenge_endpoint</t>
          </li>
          <li>
            <t>Metadata Description: URL of the authorization servers challenge endpoint which is used to obtain a fresh challenge for usage in client authentication methods such as client attestation.</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: <xref target="challenge-retrieval"/> of this specification</t>
          </li>
        </ul>
      </section>
      <section anchor="oauth-extensions-error-registration">
        <name>OAuth Extensions Error Registration</name>
        <t>This specification requests registration of the following values in the IANA "OAuth Extensions Error Registry" registry of <xref target="IANA.OAuth.Params"/> established by <xref target="RFC6749"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Name: use_attestation_challenge</t>
          </li>
          <li>
            <t>Usage Location: token error response, resource access error response</t>
          </li>
          <li>
            <t>Protocol Extension: OAuth 2.0 Attestation-Based Client Authentication</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: <xref target="checking-http-requests-with-client-attestations"/> of this specification</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: use_fresh_attestation</t>
          </li>
          <li>
            <t>Usage Location: token error response, resource access error response</t>
          </li>
          <li>
            <t>Protocol Extension: OAuth 2.0 Attestation-Based Client Authentication</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: this specification</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: invalid_client_attestation</t>
          </li>
          <li>
            <t>Usage Location: token error response, resource access error response</t>
          </li>
          <li>
            <t>Protocol Extension: OAuth 2.0 Attestation-Based Client Authentication</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: <xref target="checking-http-requests-with-client-attestations"/> of this specification</t>
          </li>
        </ul>
      </section>
      <section anchor="oauth-authorization-server-metadata-registration">
        <name>OAuth Authorization Server Metadata Registration</name>
        <t>This specification requests registration of the following values in the IANA "OAuth Authorization Server Metadata" registry of <xref target="IANA.OAuth.Params"/> established by <xref target="RFC8414"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Metadata Name: client_attestation_signing_alg_values_supported</t>
          </li>
          <li>
            <t>Metadata Description: JSON array containing a list of the JWS signing algorithms supported by the authorization server for the signature on the Client Attestation JWT.</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: <xref target="checking-http-requests-with-client-attestations"/> of this specification</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Metadata Name: client_attestation_pop_signing_alg_values_supported</t>
          </li>
          <li>
            <t>Metadata Description: JSON array containing a list of the JWS signing algorithms supported by the authorization server for the signature on the Client Attestation PoP JWT.</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: this specification</t>
          </li>
        </ul>
      </section>
      <section anchor="registration-of-attestjwtclientauth-token-endpoint-authentication-method">
        <name>Registration of attest_jwt_client_auth Token Endpoint Authentication Method</name>
        <t>This section registers the value "attest_jwt_client_auth" in the IANA "OAuth Token Endpoint Authentication Methods" registry established by OAuth 2.0 Dynamic Client Registration Protocol <xref target="RFC7591"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Token Endpoint Authentication Method Name: "attest_jwt_client_auth"</t>
          </li>
          <li>
            <t>Change Controller: IESG</t>
          </li>
          <li>
            <t>Specification Document(s): TBC</t>
          </li>
        </ul>
      </section>
      <section anchor="http-field-name-registration">
        <name>HTTP Field Name Registration</name>
        <t>This section requests registration of the following scheme in the "Hypertext Transfer Protocol (HTTP) Field Name Registry" <xref target="IANA.HTTP.Fields"/> described in <xref target="RFC9110"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Field Name: OAuth-Client-Attestation</t>
          </li>
          <li>
            <t>Status: permanent</t>
          </li>
          <li>
            <t>Structured Type: Item</t>
          </li>
          <li>
            <t>Reference: <xref target="headers"/> of this specification</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Field Name: OAuth-Client-Attestation-PoP</t>
          </li>
          <li>
            <t>Status: permanent</t>
          </li>
          <li>
            <t>Structured Type: Item</t>
          </li>
          <li>
            <t>Reference: <xref target="headers"/> of this specification</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Field Name: OAuth-Client-Attestation-Challenge</t>
          </li>
          <li>
            <t>Status: permanent</t>
          </li>
          <li>
            <t>Structured Type: Item</t>
          </li>
          <li>
            <t>Reference: <xref target="challenge-retrieval"/> of this specification</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC6750">
          <front>
            <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>This specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources. Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6750"/>
          <seriesInfo name="DOI" value="10.17487/RFC6750"/>
        </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="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="RFC7800">
          <front>
            <title>Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This specification describes how to declare in a JSON Web Token (JWT) that the presenter of the JWT possesses a particular proof-of- possession key and how the recipient can cryptographically confirm proof of possession of the key by the presenter. Being able to prove possession of a key is also sometimes described as the presenter being a holder-of-key.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7800"/>
          <seriesInfo name="DOI" value="10.17487/RFC7800"/>
        </reference>
        <reference anchor="RFC8414">
          <front>
            <title>OAuth 2.0 Authorization Server Metadata</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <date month="June" year="2018"/>
            <abstract>
              <t>This specification defines a metadata format that an OAuth 2.0 client can use to obtain the information needed to interact with an OAuth 2.0 authorization server, including its endpoint locations and authorization server capabilities.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8414"/>
          <seriesInfo name="DOI" value="10.17487/RFC8414"/>
        </reference>
        <reference anchor="RFC8725">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>JSON Web Tokens, also known as JWTs, are URL-safe JSON-based security tokens that contain a set of claims that can be signed and/or encrypted. JWTs are being widely used and deployed as a simple security token format in numerous protocols and applications, both in the area of digital identity and in other application areas. This Best Current Practices document updates RFC 7519 to provide actionable guidance leading to secure implementation and deployment of JWTs.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="225"/>
          <seriesInfo name="RFC" value="8725"/>
          <seriesInfo name="DOI" value="10.17487/RFC8725"/>
        </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="RFC9112">
          <front>
            <title>HTTP/1.1</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 specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns.</t>
              <t>This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </reference>
        <reference anchor="RFC9126">
          <front>
            <title>OAuth 2.0 Pushed Authorization Requests</title>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="D. Tonge" initials="D." surname="Tonge"/>
            <author fullname="F. Skokan" initials="F." surname="Skokan"/>
            <date month="September" year="2021"/>
            <abstract>
              <t>This document defines the pushed authorization request (PAR) endpoint, which allows clients to push the payload of an OAuth 2.0 authorization request to the authorization server via a direct request and provides them with a request URI that is used as reference to the data in a subsequent call to the authorization endpoint.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9126"/>
          <seriesInfo name="DOI" value="10.17487/RFC9126"/>
        </reference>
        <reference anchor="IANA.HTTP.Fields" target="https://www.iana.org/assignments/http-fields/http-fields.xhtml">
          <front>
            <title>Hypertext Transfer Protocol (HTTP) Field Name Registry</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA.OAuth.Params" target="https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml#authorization-server-metadata">
          <front>
            <title>OAuth Authorization Server Metadata</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA.JOSE.ALGS" target="https://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms">
          <front>
            <title>JSON Web Signature and Encryption Algorithms</title>
            <author>
              <organization>IANA</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>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <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="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>
        <reference anchor="RFC7523">
          <front>
            <title>JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification defines the use of a JSON Web Token (JWT) Bearer Token as a means for requesting an OAuth 2.0 access token as well as for client authentication.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7523"/>
          <seriesInfo name="DOI" value="10.17487/RFC7523"/>
        </reference>
        <reference anchor="RFC9901">
          <front>
            <title>Selective Disclosure for JSON Web Tokens</title>
            <author fullname="D. Fett" initials="D." surname="Fett"/>
            <author fullname="K. Yasuda" initials="K." surname="Yasuda"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <date month="November" year="2025"/>
            <abstract>
              <t>This specification defines a mechanism for the selective disclosure
of individual elements of a JSON data structure used as the payload
of a JSON Web Signature (JWS). The primary use case is the selective
disclosure of JSON Web Token (JWT) claims.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9901"/>
          <seriesInfo name="DOI" value="10.17487/RFC9901"/>
        </reference>
        <reference anchor="ARF">
          <front>
            <title>The European Digital Identity Wallet Architecture and Reference Framework</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 663?>

<section anchor="document-history">
      <name>Document History</name>
      <t>-08</t>
      <ul spacing="normal">
        <li>
          <t>remove concatenated Serialization for Client Attestations</t>
        </li>
        <li>
          <t>update all examples (removal of iss and nbf)</t>
        </li>
        <li>
          <t>remove <tt>iss</tt> from Client Attestation JWT and Client Attestation PoP JWT</t>
        </li>
        <li>
          <t>add small security consideration sub-section for MAC-based deployments</t>
        </li>
        <li>
          <t>remove public clients reference and clarify this draft targets confidential clients</t>
        </li>
        <li>
          <t>clarify this may be a client authentication mechanism but also may be not</t>
        </li>
        <li>
          <t>add examples for RS usage and non client authentication</t>
        </li>
        <li>
          <t>Add note on protocols providing a challenge on previous responses</t>
        </li>
        <li>
          <t>add structured-type to iana header field registration requests</t>
        </li>
        <li>
          <t>moving Authorization Server metadata into it's own top level section</t>
        </li>
        <li>
          <t>editorial fixes</t>
        </li>
      </ul>
      <t>-07</t>
      <ul spacing="normal">
        <li>
          <t>remove restrictions to not allow MAC-based algorithms</t>
        </li>
        <li>
          <t>require <tt>iat</tt> in Client Attestation PoP JWT</t>
        </li>
        <li>
          <t>clarify <tt>use_attestation_challenge</tt> and add <tt>invalid_client_attestation</tt></t>
        </li>
        <li>
          <t>add <tt>client_attestation_signing_alg_values_supported</tt> and <tt>client_attestation_pop_signing_alg_values_supported</tt> to IANA registration</t>
        </li>
        <li>
          <t>add implementation consideration for Authorization Server Metadata</t>
        </li>
        <li>
          <t>clarify refresh token binding</t>
        </li>
        <li>
          <t>check client_id at PAR endpoint</t>
        </li>
        <li>
          <t>added <tt>use_fresh_attestation</tt> as an error to signal that the attestation was not deemed fresh enough by the server</t>
        </li>
        <li>
          <t>mandate the defined header fields if the attestation and pop are transferred via header fields</t>
        </li>
      </ul>
      <t>-06</t>
      <ul spacing="normal">
        <li>
          <t>clarify client_id processing in token request with client attestation</t>
        </li>
        <li>
          <t>clarify usage of client attestation outside of oauth2 applications</t>
        </li>
        <li>
          <t>add oauth error response values <tt>invalid_client_attestation</tt> and <tt>use_attestation_challenge</tt></t>
        </li>
        <li>
          <t>revert the HTTP OPTIONS mechanism to fetch nonces and add a dedicated challenge endpoint</t>
        </li>
        <li>
          <t>rename nonce to challenge</t>
        </li>
        <li>
          <t>rewrite security consideration on replay attacks</t>
        </li>
        <li>
          <t>add implementation consideration on replay attacks</t>
        </li>
        <li>
          <t>remove <tt>exp</tt> from Client Attestation PoP JWT</t>
        </li>
        <li>
          <t>add verification and processing rules</t>
        </li>
      </ul>
      <t>-05</t>
      <ul spacing="normal">
        <li>
          <t>add nonce endpoint</t>
        </li>
        <li>
          <t>add metadata entry for nonce</t>
        </li>
        <li>
          <t>improve introduction</t>
        </li>
        <li>
          <t>rename client backend to client attester</t>
        </li>
        <li>
          <t>fix missing typ header in examples</t>
        </li>
      </ul>
      <t>-04</t>
      <ul spacing="normal">
        <li>
          <t>remove key attestation example</t>
        </li>
        <li>
          <t>restructured JWT Claims for better readability</t>
        </li>
        <li>
          <t>added JOSE typ values for Client Attestation and Client Attestation PoP</t>
        </li>
        <li>
          <t>add RATS relation</t>
        </li>
        <li>
          <t>add concatenated representation without headers</t>
        </li>
        <li>
          <t>add PAR endpoint example</t>
        </li>
        <li>
          <t>fix PoP examples to include jti and nonce</t>
        </li>
        <li>
          <t>add iana http field name registration</t>
        </li>
      </ul>
      <t>-03</t>
      <ul spacing="normal">
        <li>
          <t>remove usage of RFC7521 and the usage of client_assertion</t>
        </li>
        <li>
          <t>add new header-based syntax introducing Oauth-Client-Attestation and OAuth-Client-Attestation-PoP</t>
        </li>
        <li>
          <t>add Client Instance to the terminology and improve text around this concept</t>
        </li>
      </ul>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>add text on the inability to rotate the Client Instance Key</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Updated eIDAS example in appendix</t>
        </li>
        <li>
          <t>Removed text around jti claim in client attestation, refined text for its usage in the client attestation pop</t>
        </li>
        <li>
          <t>Refined text around cnf claim in client attestation</t>
        </li>
        <li>
          <t>Clarified how to bind refresh tokens to a Client Instance using this client authentication method</t>
        </li>
        <li>
          <t>Made it more explicit that the client authentication mechanism is general purpose making it compatible with extensions like PAR</t>
        </li>
        <li>
          <t>Updated acknowledgments</t>
        </li>
        <li>
          <t>Simplified the diagram in the introduction</t>
        </li>
        <li>
          <t>Updated references</t>
        </li>
        <li>
          <t>Added some guidance around replay attack detection</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial draft</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>We would like to thank
Babis Routis,
Brian Campbell,
Dimitris Zarras,
Filip Skokan,
Francesco Marino,
Frederik Krogsdal Jacobsen,
Guiseppe De Marco,
Joseph Heenan,
Kristina Yasuda,
Micha Kraus,
Michael B. Jones,
Takahiko Kawasaki,
Timo Glastra
and
Torsten Lodderstedt
for their valuable contributions to this specification.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
