<?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.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-oauth-attestation-based-client-auth-05" category="info" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title>OAuth 2.0 Attestation-Based Client Authentication</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-attestation-based-client-auth-05"/>
    <author fullname="Tobias Looker">
      <organization>MATTR</organization>
      <address>
        <email>tobias.looker@mattr.global</email>
      </address>
    </author>
    <author fullname="Paul Bastian">
      <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="March" day="03"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <abstract>
      <?line 65?>

<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 69?>

<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>
      </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 the traditional OAuth2 ecosystem .</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> (subject) 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 using an asymmetric cryptographic algorithm. The authorization server <bcp14>MUST</bcp14> reject the JWT if it is using a Message Authentication Code (MAC) based algorithm. The authorization server <bcp14>MUST</bcp14> reject JWTs with an invalid signature.</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://server.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> (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 PoP is considered expired. The authorization server <bcp14>MUST</bcp14> reject any JWT with an expiration time that has passed, subject to allowable clock skew between systems. Note that the authorization server may reject JWTs with an "exp" claim value that is unreasonably far in the future.</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 <bcp14>MAY</bcp14> ensure that JWTs are not replayed by maintaining the set of used "jti" values for the length of time for which the JWT would be considered valid based on the applicable "exp" instant.</t>
          </li>
          <li>
            <t><tt>nonce</tt>: <bcp14>OPTIONAL</bcp14>. The <tt>nonce</tt> (nonce) claim <bcp14>MUST</bcp14> specify a String value that is provided by the authorization server to associate the Client Attestation PoP JWT with a particular transaction and prevent replay attacks.</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 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>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 the JWT if it is using a Message Authentication Code (MAC) based 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",
  "alg": "ES256"
}
.
{
  "iss": "https://client.example.com",
  "aud": "https://as.example.com",
  "nbf":1300815780,
  "exp":1300819380,
  "jti": "d25d00ab-552b-46fc-ae19-98f440f25064",
  "nonce" : "5c1a9e10-29ff-4c2b-ae73-57c0957c09c4"
}
]]></artwork>
      </section>
    </section>
    <section anchor="client-attestation-using-a-header-based-syntax">
      <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>A Client Attestation JWT and Client Attestation PoP JWT can be included in an HTTP request using the following request header fields.</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.eyJpc3MiOiJodHRwczovL3NlcnZ
lci5leGFtcGxlLmNvbSIsInN1YiI6Imh0dHBzOi8vY2xpZW50LmV4YW1wbGUuY29tIiwi
bmJmIjoxMzAwODE1NzgwLCJleHAiOjEzMDA4MTkzODAsImNuZiI6eyJqd2siOnsia3R5I
joiRUMiLCJ1c2UiOiJzaWciLCJjcnYiOiJQLTI1NiIsIngiOiIxOHdITGVJZ1c5d1ZONl
ZEMVR4Z3BxeTJMc3pZa01mNko4bmpWQWlidmhNIiwieSI6Ii1WNGRTNFVhTE1nUF80Zlk
0ajhpcjdjbDFUWGxGZEFnY3g1NW83VGtjU0EifX19.pvZKZSdfEHMoc9Bb3liuLYDGWFl
kxQUOVJ94H_GUKxYoCI6pfUffg18lKjlwE-8TeZ2k9vql1E0BR5Nu0Ed_kw
]]></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 feature 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 []{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 <eref 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>
      </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>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.eyJpc3MiOiJodHRwczovL3NlcnZ
lci5leGFtcGxlLmNvbSIsInN1YiI6Imh0dHBzOi8vY2xpZW50LmV4YW1wbGUuY29tIiwi
bmJmIjoxMzAwODE1NzgwLCJleHAiOjEzMDA4MTkzODAsImNuZiI6eyJqd2siOnsia3R5I
joiRUMiLCJ1c2UiOiJzaWciLCJjcnYiOiJQLTI1NiIsIngiOiIxOHdITGVJZ1c5d1ZONl
ZEMVR4Z3BxeTJMc3pZa01mNko4bmpWQWlidmhNIiwieSI6Ii1WNGRTNFVhTE1nUF80Zlk
0ajhpcjdjbDFUWGxGZEFnY3g1NW83VGtjU0EifX19.pvZKZSdfEHMoc9Bb3liuLYDGWFl
kxQUOVJ94H_GUKxYoCI6pfUffg18lKjlwE-8TeZ2k9vql1E0BR5Nu0Ed_kw
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 PAR endpoint 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>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.eyJpc3MiOiJodHRwczovL3NlcnZ
lci5leGFtcGxlLmNvbSIsInN1YiI6Imh0dHBzOi8vY2xpZW50LmV4YW1wbGUuY29tIiwi
bmJmIjoxMzAwODE1NzgwLCJleHAiOjEzMDA4MTkzODAsImNuZiI6eyJqd2siOnsia3R5I
joiRUMiLCJ1c2UiOiJzaWciLCJjcnYiOiJQLTI1NiIsIngiOiIxOHdITGVJZ1c5d1ZONl
ZEMVR4Z3BxeTJMc3pZa01mNko4bmpWQWlidmhNIiwieSI6Ii1WNGRTNFVhTE1nUF80Zlk
0ajhpcjdjbDFUWGxGZEFnY3g1NW83VGtjU0EifX19.pvZKZSdfEHMoc9Bb3liuLYDGWFl
kxQUOVJ94H_GUKxYoCI6pfUffg18lKjlwE-8TeZ2k9vql1E0BR5Nu0Ed_kw
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.eyJpc3MiOiJodHRwczovL3NlcnZlci5leGFtcGxlLmNvbSIsInN1Y
iI6Imh0dHBzOi8vY2xpZW50LmV4YW1wbGUuY29tIiwibmJmIjoxMzAwODE1NzgwLCJleH
AiOjEzMDA4MTkzODAsImNuZiI6eyJqd2siOnsia3R5IjoiRUMiLCJ1c2UiOiJzaWciLCJ
jcnYiOiJQLTI1NiIsIngiOiIxOHdITGVJZ1c5d1ZONlZEMVR4Z3BxeTJMc3pZa01mNko4
bmpWQWlidmhNIiwieSI6Ii1WNGRTNFVhTE1nUF80Zlk0ajhpcjdjbDFUWGxGZEFnY3g1N
W83VGtjU0EifX19.pvZKZSdfEHMoc9Bb3liuLYDGWFlkxQUOVJ94H_GUKxYoCI6pfUffg
18lKjlwE-8TeZ2k9vql1E0BR5Nu0Ed_kw~eyJhbGciOiJFUzI1NiIsInR5cCI6Im9hdXR
oLWNsaWVudC1hdHRlc3RhdGlvbi1wb3Arand0In0.eyJpc3MiOiJodHRwczovL2NsaWVu
dC5leGFtcGxlLmNvbSIsImF1ZCI6Imh0dHBzOi8vYXMuZXhhbXBsZS5jb20iLCJuYmYiO
jEzMDA4MTU3ODAsImV4cCI6MTMwMDgxOTM4MCwianRpIjoiZDI1ZDAwYWItNTUyYi00Nm
ZjLWFlMTktOThmNDQwZjI1MDY0Iiwibm9uY2UiOiI1YzFhOWUxMC0yOWZmLTRjMmItYWU
3My01N2MwOTU3YzA5YzQifQ.rEa-dKJgRuD-aI-4bj4fDGH1up4jV--IgDMFdb9A5jSSW
B7UhHfvLOVU_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 <eref 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 <eref 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="nonce-retrieval">
      <name>Nonce Retrieval</name>
      <t>This specification defines header fields that allow a Client to request a fresh nonce value to be used in the OAuth-Client-Attestation-PoP. The nonce is opaque to the client.</t>
      <t>An Authorization Server compliant with this specification <bcp14>SHOULD</bcp14> signal via the metadata entry <tt>client_attestation_pop_nonce_required</tt> which endpoints support and expect a server-provided nonce. The client <bcp14>MUST</bcp14> retrieve a nonce before other calls to this endpoint and <bcp14>MUST</bcp14> use this nonce for the Client Attestation PoP.</t>
      <t>A Request to an endpoint supporting the server-provided nonce <bcp14>MUST</bcp14> include the <tt>attestation-nonce-request</tt> field name with the value <tt>true</tt> and use the HTTP method of type OPTIONS (without payload) to actively request a nonce. The server answers with an HTTP Response with status code 200 without body, but sets the header field <tt>attestation-nonce</tt> to the nonce.</t>
      <t>The client <bcp14>MUST</bcp14> use this nonce in the OAuth-Attestation-PoP as defined in (#client-attestation-pop-jwt).</t>
      <t>The following is a non-normative example of a request:</t>
      <artwork><![CDATA[
OPTIONS /as/par HTTP/1.1
Host: as.example.com
attestation-nonce-request: true
]]></artwork>
      <t>the following is a non-normative example of a response:</t>
      <artwork><![CDATA[
HTTP/1.1 200 OK
Host: as.example.com
attestation-nonce: AYjcyMzY3ZDhiNmJkNTZ
]]></artwork>
    </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 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 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.
## Rotation of Client Instance Key</t>
          <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>
    </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="replay-attack-detection">
        <name>Replay Attack Detection</name>
        <t>The following mechanisms exist within this client authentication method in order to allow an authorization server to detect replay attacks for presented client attestation PoPs:</t>
        <ul spacing="normal">
          <li>
            <t>The client uses "jti" (JWT ID) claims for the Client Attestation PoP JWT and the authorization server maintains a list of used (seen) "jti" values for the time of which the JWT would be considered valid based on the applicable "exp" claim. If any Client Attestation PoP JWT would be replayed, the authorization server would recognize the "jti" and respond with an authentication error.</t>
          </li>
          <li>
            <t>The authorization server provides a nonce for the particular transaction and the client uses it for the "nonce" claim in the Client Attestation PoP JWT. The authorization server validates that the nonce matches for the transaction. This approach may require an additional roundtrip in the protocol. The authorization server <bcp14>MUST</bcp14> ensure that the nonce provides sufficient entropy.</t>
          </li>
          <li>
            <t>The authorization server may expect the usage of a nonce in the Client Attestation PoP JWT, but instead of providing the nonce explicitly, the client may implicitly reuse an existing artefact, e.g. the authorization code. The authorization server <bcp14>MUST</bcp14> ensure that the nonce provides sufficient entropy.</t>
          </li>
        </ul>
        <t>The approach using a nonce 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 "jti" method is mandatory and hence acts as a default fallback.</t>
      </section>
    </section>
    <section anchor="appendix-a-iana-considerations">
      <name>Appendix A 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: client_attestation_pop_nonce_required</t>
          </li>
          <li>
            <t>Metadata Description: An array of URLs that specify the endpoints supporting the nonce retrieval and expecting a Client Attestation bound to a server-provided nonce.</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: <xref target="nonce-retrieval"/> of 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/></t>
        <ul spacing="normal">
          <li>
            <t>Field Name: attestation-nonce-request</t>
          </li>
          <li>
            <t>Status: permanent</t>
          </li>
          <li>
            <t>Reference: <xref target="nonce-retrieval"/> of this specification</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Field Name: attestation-nonce</t>
          </li>
          <li>
            <t>Status: permanent</t>
          </li>
          <li>
            <t>Reference: <xref target="nonce-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="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="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="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="1" month="March" year="2025"/>
            <abstract>
              <t>   This specification defines a mechanism for the selective disclosure
   of individual elements of a JSON-encoded 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-17"/>
        </reference>
      </references>
    </references>
    <?line 551?>

<section anchor="document-history">
      <name>Document History</name>
      <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,
Francesco Marino,
Guiseppe De Marco,
Kristina Yasuda,
Michael B. Jones,
Takahiko Kawasaki
and
Torsten Lodderstedt
for their valuable contributions to this specification.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
03djzLwzzvofDwcpkaaEAAA=

-->

</rfc>
