<?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-ietf-oauth-attestation-based-client-auth-07" category="std" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.1 -->
  <front>
    <title>OAuth 2.0 Attestation-Based Client Authentication</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-attestation-based-client-auth-07"/>
    <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="2025" month="September" day="15"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <abstract>
      <?line 74?>

<t>This specification defines an extension to the OAuth 2 protocol as defined in <xref target="RFC6749"/> which enables a Client Instance to include a key-bound attestation in interactions with an Authorization Server or a Resource Server. This new method enables Client Instances involved in a client deployment that is traditionally viewed as a public client, to be able to utilize this key-bound attestation to authenticate.</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 78?>

<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="SD-JWT"/>, 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 public clients to authenticate securely and reliably has become increasingly important. Leveraging platform mechanisms to validate a client instance, e.g. for 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 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 can be 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, or via a concatenated serialization (as described in <xref target="alternative-representation"/>) to enable usage outside of OAuth2 based interactions.</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>iss</tt>: <bcp14>REQUIRED</bcp14>. The <tt>iss</tt> (issuer) claim <bcp14>MUST</bcp14> contains a unique identifier for the entity that issued the JWT. In the absence of an application profile specifying otherwise, compliant applications <bcp14>MUST</bcp14> compare issuer values using the Simple String Comparison method defined in Section 6.2.1 of <xref target="RFC3986"/>.</t>
          </li>
          <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>
          <li>
            <t><tt>nbf</tt>: <bcp14>OPTIONAL</bcp14>. The <tt>nbf</tt> (not before) claim <bcp14>MUST</bcp14> specify the time before which the Client Attestation <bcp14>MUST NOT</bcp14> be accepted for processing.</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"
}
.
{
  "iss": "https://attester.example.com",
  "sub": "https://client.example.com",
  "nbf": 1300815780,
  "exp": 1300819380,
  "cnf": {
    "jwk": {
      "kty": "EC",
      "use": "sig",
      "crv": "P-256",
      "x": "18wHLeIgW9wVN6VD1Txgpqy2LszYkMf6J8njVAibvhM",
      "y": "-V4dS4UaLMgP_4fY4j8ir7cl1TXlFdAgcx55o7TkcSA"
    }
  }
}
]]></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>iss</tt>: <bcp14>REQUIRED</bcp14>. The <tt>iss</tt> (issuer) claim <bcp14>MUST</bcp14> specify client_id value of the OAuth Client.</t>
          </li>
          <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>
          <li>
            <t><tt>nbf</tt>: <bcp14>OPTIONAL</bcp14>. The <tt>nbf</tt> (not before) claim <bcp14>MUST</bcp14> specify the time before which the Client Attestation PoP <bcp14>MUST NOT</bcp14> be accepted for processing.</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 value of the <tt>iss</tt> claim, representing the client_id <bcp14>MUST</bcp14> match the value of the <tt>sub</tt> claim in 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"
}
.
{
  "iss": "https://client.example.com",
  "aud": "https://as.example.com",
  "nbf":1300815780,
  "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.eyJpc3MiOiJodHRwczovL2F0dGV
zdGVyLmV4YW1wbGUuY29tIiwic3ViIjoiaHR0cHM6Ly9jbGllbnQuZXhhbXBsZS5jb20i
LCJuYmYiOjEzMDA4MTU3ODAsImV4cCI6MTMwMDgxOTM4MCwiY25mIjp7Imp3ayI6eyJrd
HkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6IlAtMjU2IiwieCI6IjE4d0hMZUlnVzl3Vk
42VkQxVHhncHF5MkxzellrTWY2SjhualZBaWJ2aE0iLCJ5IjoiLVY0ZFM0VWFMTWdQXzR
mWTRqOGlyN2NsMVRYbEZkQWdjeDU1bzdUa2NTQSJ9fX0.4bCswkgmUHw06kKdiS2KEySR
gjj73yCEIcrz3Mv7Bgns4Bm1tCQ9FAqMLtgzb5NthwJT9AhAEBogbiD5DtxV1g
]]></artwork>
        <t>The following is an example of the OAuth-Client-Attestation-PoP header.</t>
        <artwork><![CDATA[
OAuth-Client-Attestation-PoP: eyJhbGciOiJFUzI1NiIsInR5cCI6Im9hdXRoLWN
saWVudC1hdHRlc3RhdGlvbi1wb3Arand0In0.eyJpc3MiOiJodHRwczovL2NsaWVudC5l
eGFtcGxlLmNvbSIsImF1ZCI6Imh0dHBzOi8vYXMuZXhhbXBsZS5jb20iLCJuYmYiOjEzM
DA4MTU3ODAsImV4cCI6MTMwMDgxOTM4MCwianRpIjoiZDI1ZDAwYWItNTUyYi00NmZjLW
FlMTktOThmNDQwZjI1MDY0Iiwibm9uY2UiOiI1YzFhOWUxMC0yOWZmLTRjMmItYWU3My0
1N2MwOTU3YzA5YzQifQ.rEa-dKJgRuD-aI-4bj4fDGH1up4jV--IgDMFdb9A5jSSWB7Uh
HfvLOVU_ZvAJfOWfO0MXyeunwzM3jGLB_TUkQ
]]></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="token-endpoint">
        <name>Client Attestation at the Token Endpoint</name>
        <t>While usage of the the client attestation mechanism defined by this draft can be used in a variety of different HTTP requests to different endpoints, usage within the token request as defined by <xref target="RFC6749"/> has particular additional considerations outlined below.</t>
        <t>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 which is making use of the client attestation mechanism as defined by this draft.</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 and <tt>iss</tt> claim of the Client Attestation PoP.</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.eyJpc3MiOiJodHRwczovL2F0dGV
zdGVyLmV4YW1wbGUuY29tIiwic3ViIjoiaHR0cHM6Ly9jbGllbnQuZXhhbXBsZS5jb20i
LCJuYmYiOjEzMDA4MTU3ODAsImV4cCI6MTMwMDgxOTM4MCwiY25mIjp7Imp3ayI6eyJrd
HkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6IlAtMjU2IiwieCI6IjE4d0hMZUlnVzl3Vk
42VkQxVHhncHF5MkxzellrTWY2SjhualZBaWJ2aE0iLCJ5IjoiLVY0ZFM0VWFMTWdQXzR
mWTRqOGlyN2NsMVRYbEZkQWdjeDU1bzdUa2NTQSJ9fX0.4bCswkgmUHw06kKdiS2KEySR
gjj73yCEIcrz3Mv7Bgns4Bm1tCQ9FAqMLtgzb5NthwJT9AhAEBogbiD5DtxV1g
OAuth-Client-Attestation-PoP: eyJhbGciOiJFUzI1NiIsInR5cCI6Im9hdXRoLWN
saWVudC1hdHRlc3RhdGlvbi1wb3Arand0In0.eyJpc3MiOiJodHRwczovL2NsaWVudC5l
eGFtcGxlLmNvbSIsImF1ZCI6Imh0dHBzOi8vYXMuZXhhbXBsZS5jb20iLCJuYmYiOjEzM
DA4MTU3ODAsImV4cCI6MTMwMDgxOTM4MCwianRpIjoiZDI1ZDAwYWItNTUyYi00NmZjLW
FlMTktOThmNDQwZjI1MDY0Iiwibm9uY2UiOiI1YzFhOWUxMC0yOWZmLTRjMmItYWU3My0
1N2MwOTU3YzA5YzQifQ.rEa-dKJgRuD-aI-4bj4fDGH1up4jV--IgDMFdb9A5jSSWB7Uh
HfvLOVU_ZvAJfOWfO0MXyeunwzM3jGLB_TUkQ

grant_type=authorization_code&
code=n0esc3NRze7LTCu7iYzS6a5acc3f0ogp4
]]></artwork>
      </section>
      <section anchor="par-endpoint">
        <name>Client Attestation at the PAR Endpoint</name>
        <t>A Client Attestation can be used at the Pushed Authorization Request (PAR) endpoint defined in <xref target="RFC9126"/> instead of alternative client authentication mechanisms like JWT client assertion-based authentication (as defined in Section 2.2 of <xref target="RFC7523"/>).</t>
        <t>The Authorization Server <bcp14>MUST</bcp14> perform all of the checks outlined in <xref target="checking-http-requests-with-client-attestations"/> for a received PAR request which is making use of the client attestation mechanism as defined by this draft.</t>
        <t>If the pushed authorization request contains a <tt>client_id</tt> parameter as per <xref target="RFC9126"/> 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 and <tt>iss</tt> claim of the Client Attestation PoP.</t>
        <t>The following example demonstrates usage of the client attestation mechanism in a PAR request (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.eyJpc3MiOiJodHRwczovL2F0dGV
zdGVyLmV4YW1wbGUuY29tIiwic3ViIjoiaHR0cHM6Ly9jbGllbnQuZXhhbXBsZS5jb20i
LCJuYmYiOjEzMDA4MTU3ODAsImV4cCI6MTMwMDgxOTM4MCwiY25mIjp7Imp3ayI6eyJrd
HkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6IlAtMjU2IiwieCI6IjE4d0hMZUlnVzl3Vk
42VkQxVHhncHF5MkxzellrTWY2SjhualZBaWJ2aE0iLCJ5IjoiLVY0ZFM0VWFMTWdQXzR
mWTRqOGlyN2NsMVRYbEZkQWdjeDU1bzdUa2NTQSJ9fX0.4bCswkgmUHw06kKdiS2KEySR
gjj73yCEIcrz3Mv7Bgns4Bm1tCQ9FAqMLtgzb5NthwJT9AhAEBogbiD5DtxV1g
OAuth-Client-Attestation-PoP: eyJhbGciOiJFUzI1NiIsInR5cCI6Im9hdXRoLWN
saWVudC1hdHRlc3RhdGlvbi1wb3Arand0In0.eyJpc3MiOiJodHRwczovL2NsaWVudC5l
eGFtcGxlLmNvbSIsImF1ZCI6Imh0dHBzOi8vYXMuZXhhbXBsZS5jb20iLCJuYmYiOjEzM
DA4MTU3ODAsImV4cCI6MTMwMDgxOTM4MCwianRpIjoiZDI1ZDAwYWItNTUyYi00NmZjLW
FlMTktOThmNDQwZjI1MDY0Iiwibm9uY2UiOiI1YzFhOWUxMC0yOWZmLTRjMmItYWU3My0
1N2MwOTU3YzA5YzQifQ.rEa-dKJgRuD-aI-4bj4fDGH1up4jV--IgDMFdb9A5jSSWB7Uh
HfvLOVU_ZvAJfOWfO0MXyeunwzM3jGLB_TUkQ

response_type=code&state=af0ifjsldkj&client_id=s6BhdRkqt3
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
&code_challenge=K2-ltc83acc4h0c9w6ESC_rEMTJ3bww-uCHaoeK1t8U
&code_challenge_method=S256&scope=account-information
]]></artwork>
      </section>
    </section>
    <section anchor="alternative-representation">
      <name>Concatenated Serialization for Client Attestations</name>
      <t>A Client Attestation according to this specification <bcp14>MAY</bcp14> be presented using an alternative representation for cases where the header-based mechanism (as introduced in introduced in <xref target="headers"/> does not fit the underlying protocols, e.g., for direct calls to Browser APIs.
In those cases, a concatenated serialization of the Client Attestation and Client Attestation PoP can can be used.</t>
      <section anchor="format-alternative">
        <name>Concatenated Serialization Format</name>
        <t>This representation is created by concatenating Client Attestation and Client Attestation PoP separated by a tilde ('~') character:</t>
        <artwork><![CDATA[
<Client Attestation>~<Client Attestation PoP>
]]></artwork>
        <t>This form is similar to an SD-JWT+KB according to Section 5 of <xref target="SD-JWT"/> but does not include Disclosures, uses different typ values and does not include the <tt>sd_hash</tt> claim in the PoP.</t>
        <t>This concatenated serialization form allows a the presentation of a Client Attestation and Client Attestation PoP for cases where a header-based approach is unavailable, e.g., to establish trust in a client when using a direct Browser API call.</t>
        <t>The following is an example of such a concatenated serialization (with extra line breaks for display purposes only):</t>
        <artwork><![CDATA[
eyJ0eXAiOiJvYXV0aC1jbGllbnQtYXR0ZXN0YXRpb24rand0IiwiYWxnIjoiRVMyNTYiL
CJraWQiOiIxMSJ9.eyJpc3MiOiJodHRwczovL2F0dGVzdGVyLmV4YW1wbGUuY29tIiwic
3ViIjoiaHR0cHM6Ly9jbGllbnQuZXhhbXBsZS5jb20iLCJuYmYiOjEzMDA4MTU3ODAsIm
V4cCI6MTMwMDgxOTM4MCwiY25mIjp7Imp3ayI6eyJrdHkiOiJFQyIsInVzZSI6InNpZyI
sImNydiI6IlAtMjU2IiwieCI6IjE4d0hMZUlnVzl3Vk42VkQxVHhncHF5MkxzellrTWY2
SjhualZBaWJ2aE0iLCJ5IjoiLVY0ZFM0VWFMTWdQXzRmWTRqOGlyN2NsMVRYbEZkQWdje
DU1bzdUa2NTQSJ9fX0.4bCswkgmUHw06kKdiS2KEySRgjj73yCEIcrz3Mv7Bgns4Bm1tC
Q9FAqMLtgzb5NthwJT9AhAEBogbiD5DtxV1g~eyJhbGciOiJFUzI1NiIsInR5cCI6Im9h
dXRoLWNsaWVudC1hdHRlc3RhdGlvbi1wb3Arand0In0.eyJpc3MiOiJodHRwczovL2Nsa
WVudC5leGFtcGxlLmNvbSIsImF1ZCI6Imh0dHBzOi8vYXMuZXhhbXBsZS5jb20iLCJuYm
YiOjEzMDA4MTU3ODAsImV4cCI6MTMwMDgxOTM4MCwianRpIjoiZDI1ZDAwYWItNTUyYi0
0NmZjLWFlMTktOThmNDQwZjI1MDY0Iiwibm9uY2UiOiI1YzFhOWUxMC0yOWZmLTRjMmIt
YWU3My01N2MwOTU3YzA5YzQifQ.rEa-dKJgRuD-aI-4bj4fDGH1up4jV--IgDMFdb9A5j
SSWB7UhHfvLOVU_ZvAJfOWfO0MXyeunwzM3jGLB_TUkQ
]]></artwork>
      </section>
      <section anchor="validate-alternative">
        <name>Validating the Concatenated Serialization</name>
        <t>To validate a client attestation using the concatenated serialization form, the receiving server <bcp14>MUST</bcp14> ensure the following:</t>
        <ol spacing="normal" type="1"><li>
            <t>Before the '~' character, there exists precisely a single well-formed JWT conforming to the syntax outlined in <xref target="client-attestation-jwt"/>.</t>
          </li>
          <li>
            <t>After the '~' character, there exists precisely 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 after the '~' character verifies with the Client Instance Key contained in the <tt>cnf</tt> claim of the Client Attestation JWT obtained before the '~' character.</t>
          </li>
        </ol>
      </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.</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 and the <tt>iss</tt> claim of the Client Attestation PoP JWT.</t>
        </li>
      </ol>
    </section>
    <section anchor="implementation-considerations">
      <name>Implementation Considerations</name>
      <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="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>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>
    <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>
          <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>
          <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>
          <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>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>Reference: <xref target="headers"/> of this specification</t>
          </li>
        </ul>
        <t><br/>
add implementation consideration for Authorization Server Metadata
* Field Name: OAuth-Client-Attestation-Challenge
* Status: permanent
* Reference: <xref target="challenge-retrieval"/> of this specification</t>
      </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="ARF">
          <front>
            <title>The European Digital Identity Wallet Architecture and Reference Framework</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="SD-JWT">
          <front>
            <title>Selective Disclosure for JWTs (SD-JWT)</title>
            <author fullname="Daniel Fett" initials="D." surname="Fett">
              <organization>Authlete</organization>
            </author>
            <author fullname="Kristina Yasuda" initials="K." surname="Yasuda">
              <organization>Keio University</organization>
            </author>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <date day="29" month="May" 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="Internet-Draft" value="draft-ietf-oauth-selective-disclosure-jwt-22"/>
        </reference>
      </references>
    </references>
    <?line 680?>

<section anchor="document-history">
      <name>Document History</name>
      <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
Brian Campbell,
Filip Skokan,
Francesco Marino,
Guiseppe De Marco,
Kristina Yasuda,
Micha Kraus,
Michael B. Jones,
Takahiko Kawasaki
and
Torsten Lodderstedt
for their valuable contributions to this specification.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
kgNoDV39/PPPsIv9IKh7SWr0AvvPysbq4vM/1fnPnxZ/+rv+t/Kn/+O+yv+m
e8v9KXT9d7fkz99L3tE2PrOypPQdWJXasdXKfp4Y6zlzhj+vYLUlzVfWVy1I
wffNEiA/F1x/WvabYz//S3Flf6/4rGe80lrVz23gmu8r26v8OU+serFWU6Nk
4fc/m/nxjJS+ZMNJLeSlE/6VYMr+VGxcbuCSn5YQBvxZ2VolkiuSMCDqJGOl
zMqYiyOZ7joO7gM2KWqsQxEBoack1EGFc1eKL3wv5qxNxBMlHTRLsvQ86a6Q
mCGmAywJGI/sA5taRU4HHANEVQCMxfBRxb3TbEKa2oCjIGqXTVUCtSkhgPZZ
RQcoRRLx45SYJ+kmuRcYvUCPw4E2cgOZHrQglnb/NkDK4YGTAjUzzcEU7TLL
b5ifg1HAyWKLgQlPRsjjQXNgVTq/xNwU9CC+25tbL5FQSQSsXKyx7LJtD2n3
i1IQeDbqAF5SHAPBs1kOHtDRJjFtRfnsYD64VUotWAL+radR8iKJAZfgv4tY
gp5NZtvKRXyxqpSWcuBg59vLkKgX5xsX9wX3t+JnGJy3LjaqQca22IWg1DWc
IRleaQyCQiMlS/2yZuV4Z4/N05rKnEpaiqUAgYsQ1FDQFMEIYDzD14z09kXq
BSHrSsw8kOxwANj2NQsxULuNZ6WQLsyilBzXiCf0xDxWICW+UK5uNdyjzEpZ
q9DHgMcxSbEtOkBdEI0rnHof7Gh4FqCGiEo+vAVaN9ncsg8KWhLE0lL7tUEc
w+wBTKBEoUptVDHcFURiTxaZCBrhYE6SDdkHIKMOjtZIEUAwXSYWSVMk84LN
V00cg2mk/ADpfKJIHxRmPyzSdUZ+CAbgpfEsaqAFvR9HD7gJ2AfC4AA9F6TI
SxYSyNVncQJYX+tcX3UxaID/umfn9Pny8P31yeXhAX6+Om6fnpoPjnrj6vj8
+vQg+5S13D/vdA7PDrgxPHVzj5xap30Lv+CsaucX3ZPzs/ZpzWj5ftyfkhcC
EYQ3k4zdSSJScj84Octgb//i//5naxPs8P91ebS/3mqhP4a/vGm93iTnjIh4
tDgCMPJXgODcATNJeCQZUKUFoxDdU2yjS0DuyEWUAGh++zeEzH/sun/u9Set
zb+oB7jg3EMNs9xDgtnik4XGDMSSRyXDGGjmnhcgnZ9v+zb3XcPdevjnfw+D
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
o073xn//w5dLZ3zTvfzx/G04P1s/k50Pl7e9w4/372/8O3Fw3ep98a+99bPu
e4Du4IdmY7O3L2f3w/H18ay5ff+9H1ytf384v7p0hnd3rzfm+4cn/eTLRufh
9d4wkpt741a6/37nqP1j5zQdfultnaWj2bvuTnvUPtyLh73gYOsgffzQGpZl
9L4I7ZAunod6REGIfqPe2z7twvWXk9ZZgDtxuYVbeDLeGfk/XManN2eO9G4+
TP391giwKexvXI78t+FDLwAE2mgzWkbNCqw7U223Qke8PUr7bx/D0/HZQ+8K
9/io9ZFGGjX9470v58EbIILOArblkM15BrZ50eUE9/njwUnr40F7dntzkp51
r+e3QbN5Nv54d3rjHIWd7n163h2Nzw7ezz7enbQ6B7dEXb3xDtDENVJT6/bL
0ej85vqxs9+cn998HJ92L+8645P09uZ6ozNvOq2z9c7sHGZz+6W9dfvlfTB4
30gOvbr//bvh5fSg7p3UN3t3m4ODt8et6WTz7kO9fjI86Bz5vZ321t3V1c3e
6+uRczx4OD3/cP3p40P73eD8ZnDe7PwwF9No9qWzcff2dO9T9/r+PeNGZjWh
isOZFK0WOtaVkkJHcl08aS1Jfca0xHoQSTzqiHHB/+3KGNDnuntc3z89OTzr
1tvd7uFVt40GxZpbpY6suSLtNziJE/UtVr6QtYIMCeAbvO8sTqHh7nt0hIv0
YIpN0wEUQuLc66ROrqGgFvp0zhLuahIZqmjAEl/2ABR3YOWOknG332jRUBKV
arUa6yYopaC8Agqy4EQogdkoaA5Rei28l+hQ/eoTtKdy+L/Tc1hKpLkX9aQr
/nzntr5dcdunF8dt95V7cPL2pAv/1uo1/LtRKx7/qPpT+0QNfqa//0R/v6q5
q+63te9qjIYnpIVbuYdPWPLmSNsSTWeSBGgbm/NvS/LG0V9COtiH7FVbo5Hu
QKDRRf64khyGn77pj0Qfa1HU6Ry7blZH660E+1GF69oH8woKlEpK1EFby773
FlQCyTk6ieiL4IF11czYASqdqjy6TAKQSZmIoZeoJEluCzhoT8LY2BSaBWiC
1S8psyhaQki5Zdj0oo9FYoSSTb2AjzFEQxBDM5CwddT0YBK4d/l4H+lfTFbx
NA2foek1lMn+krlndP5fO3+tLza0fW+FfgZPxS/jHqIM+lUwc+RJ0W6ztQfO
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
OBKduQl6U6Mwl9Q2c/4fY5kBC7i3AAA=

-->

</rfc>
