<?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.39 (Ruby 3.4.9) -->
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-richer-oauth-httpsig-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title>OAuth Proof of Possession Tokens with HTTP Message Signatures</title>
    <seriesInfo name="Internet-Draft" value="draft-richer-oauth-httpsig-03"/>
    <author initials="J." surname="Richer" fullname="Justin Richer" role="editor">
      <organization>MongoDB</organization>
      <address>
        <email>ietf@justin.richer.org</email>
      </address>
    </author>
    <author initials="A." surname="Parecki" fullname="Aaron Parecki">
      <organization>Okta</organization>
      <address>
        <email>aaron@parecki.com</email>
      </address>
    </author>
    <author initials="P." surname="Bastian" fullname="Paul Bastian">
      <organization>Bundesdruckerei</organization>
      <address>
        <email>paul.bastian@posteo.de</email>
      </address>
    </author>
    <author initials="F." surname="Skokan" fullname="Filip Skokan">
      <organization>Okta</organization>
      <address>
        <email>panva.ip@gmail.com</email>
      </address>
    </author>
    <author initials="C." surname="Bormann" fullname="Christian Bormann">
      <organization>SPRIND</organization>
      <address>
        <email>chris.bormann@gmx.de</email>
      </address>
    </author>
    <date year="2026" month="July" day="28"/>
    <area>Security</area>
    <workgroup>OAUTH</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 75?>

<t>This extension to the OAuth 2.0 authorization framework defines a method for using
HTTP Message Signatures to bind access tokens to keys held by OAuth 2.0 clients.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Web Authorization Protocol Working Group mailing list (oauth@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/oauth/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/jricher/draft-richer-oauth-httpsig"/>.</t>
    </note>
  </front>
  <middle>
    <?line 80?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The OAuth 2.0 framework provides methods for clients to get delegated access tokens from an
authorization server for accessing protected resources.</t>
      <t>OAuth access tokens can be bearer tokens, or bound to a variety of mechanisms including mutual TLS, DPoP, or other presentation mechanisms.
Bearer tokens are simple to implement but also have the significant security downside of
allowing anyone who sees the access token to use that token.</t>
      <t><xref target="HTTPSIG"/> defines a generic mechanism that is used to sign HTTP requests and responses.</t>
      <t>This specification defines means to bind access tokens to a key held by the client, a token type
value, a token response for indicating that a token is meant to be used with <xref target="HTTPSIG"/>
presentation, and a method for presenting bound access tokens in HTTP requests using <xref target="HTTPSIG"/>.</t>
      <t>This work complements and builds on experience with <xref target="DPOP"/> and <xref target="MTLS"/>, as well as
implementations of <xref target="I-D.ietf-oauth-signed-http-request"/>, a spiritual predecessor to this
specification and other forms of OAuth proof-of-possession work.</t>
      <t>[[ Editor's note: we want to give developers clear guidance on when to use HTTPSig vs. DPoP vs. mTLS vs. Bearer vs. whatever else ]]</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" 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.
<?line -6?>
        </t>
        <t>This document contains non-normative examples of partial and complete HTTP messages, JSON structures, URLs, query components, keys, and other elements. Some examples use a single trailing backslash '' to indicate line wrapping for long values, as per <xref target="RFC8792"/>. The <tt>\</tt> character and leading spaces on wrapped lines are not part of the value.</t>
      </section>
    </section>
    <section anchor="binding">
      <name>Requesting an HTTP Message Signature Bound Access Token</name>
      <t>To bind an access token to a key, the AS needs to know which key to bind to which token. This specification defines two common methods depending on the needs of the client:</t>
      <ul spacing="normal">
        <li>
          <t>A static method that depends on key material available as part of the client registration</t>
        </li>
        <li>
          <t>A runtime method that allows a client to introduce key material during the token request phase of <xref target="OAUTH"/></t>
        </li>
      </ul>
      <t>As part of its registration, a client MUST indicate which method it will use, using either the <tt>httpsig_key_binding_method</tt> client registration metadata parameter defined in <xref target="IANA"/> when using Dynamic Client Registration (<xref target="DYNREG"/>) or Client ID Metadata Document (<xref target="I-D.ietf-oauth-client-id-metadata-document"/>), or via an out of band method.</t>
      <t>[[ Editor's note: do we want to add an AS/RS metadata parameter to signal support for each type? ]]</t>
      <t>[[ Editor's note: Are there any other patterns of key introduction we should cover? I put PAR in the appendix as a note. ]]</t>
      <section anchor="preregister">
        <name>Pre-Registration of Keys</name>
        <t>A client pre-registering its key for <xref target="HTTPSIG"/> binding MUST include the key in its registered <tt>jwks</tt> value or make it available from its <tt>jwks_uri</tt> endpoint. The JWK MUST have a <tt>kid</tt> member and MUST indicate a signing algorithm in its <tt>alg</tt> member.</t>
        <t>The key MUST be an asymmetric key, and the registered JWK MUST be its public key. A shared secret MUST NOT be used to bind an access token, as described in <xref target="Security"/>.</t>
        <t>The client selects which of its registered keys the token is bound to when it makes the token request, as described in <xref target="request"/>. The client's metadata names the key set rather than a key within it, allowing a client to add and retire keys without any change to its registration.</t>
        <t>Note that pre-registration can occur statically or dynamically (such as by using <xref target="DYNREG"/>), as long as the key is associated with the client's <tt>client_id</tt> before the token request is made.</t>
        <section anchor="example-client-registration">
          <name>Example Client Registration</name>
          <t>A client can publish its key binding metadata as part of a <xref target="I-D.ietf-oauth-client-id-metadata-document"/> alongside its <tt>jwks</tt> or <tt>jwks_uri</tt> values. For example, a client with the <tt>client_id</tt> value <tt>https://client.example.com/client-metadata.json</tt> would publish the following document at that URL, indicating that it uses a pre-registered key:</t>
          <sourcecode type="json"><![CDATA[
{
    "client_id": "https://client.example.com/client-metadata.json",
    "client_name": "Example Client",
    "jwks": {
        "keys": [
            {
                "kty": "OKP",
                "use": "sig",
                "crv": "Ed25519",
                "kid": "j-0Ny45NWmqGq6GQ",
                "x": "iuemcj_GhRHmY_yCsMlDNp3BQgPZDdG00VRsg_BgU3s",
                "alg": "Ed25519"
            }
        ]
    },
    "httpsig_key_binding_method": "preregistered"
}
]]></sourcecode>
        </section>
      </section>
      <section anchor="runtime">
        <name>Token Request Key Introduction</name>
        <t>Instead of pre-registering a key, a client can introduce its key during the token request in a similar fashion as <xref target="DPOP"/>.</t>
        <t>A client using this method presents its public key in the token request itself, as described in <xref target="request"/>. The key is not registered with the AS beforehand, and the AS binds a token to the presented key subject to its own policy.</t>
      </section>
      <section anchor="request">
        <name>Token Request</name>
        <t>The presence of an HTTP Message Signature with the tag <tt>httpsig-oauth-token-request</tt> indicates that the client is requesting a bound token. The client MUST include a message signature of the indicated key.</t>
        <t>Additionally, the client MUST calculate and include the digest of the request body and include it as the Content-Digest header defined in <xref target="DIGEST"/>.</t>
        <t>For example, a form-encoded request body consisting of:</t>
        <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA\
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
]]></artwork>
        <t>Would create the following Content-Digest header:</t>
        <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Content-Digest: sha-256=:4fEzRVTGqfZg7lqf/d3oxXu837pvb3L0GN24+F\
  1VkZk=:
]]></artwork>
        <t>A client using this method MUST sign the token endpoint request using <xref target="HTTPSIG"/> with the appropriate key. The covered components MUST include:</t>
        <ul spacing="normal">
          <li>
            <t><tt>@method</tt> the HTTP method of the request</t>
          </li>
          <li>
            <t><tt>@target-uri</tt> the full request URI of the request (note that this includes the scheme, authority, path, and query)</t>
          </li>
          <li>
            <t><tt>content-digest</tt> the digest of the request body</t>
          </li>
        </ul>
        <t>The covered components MUST include the client's authentication, if available. If using HTTP Basic, this means including the <tt>authorization</tt> field.</t>
        <t>The signature MUST include the following signature parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>created</tt> a timestamp for signature creation; this MUST be within a small number of seconds of issuance (e.g. 30 seconds to account for clock skew)</t>
          </li>
          <li>
            <t><tt>nonce</tt> a random unique value that the AS can use to prevent signature replay within the small validity time window</t>
          </li>
          <li>
            <t><tt>tag</tt> a string indicating that this is being used for requesting a bound token, MUST be the value "httpsig-oauth-token-request"</t>
          </li>
        </ul>
        <t>The remaining signature parameters identify the key, and depend on the key binding method.</t>
        <t>With a pre-registered key as in <xref target="preregister"/>:</t>
        <ul spacing="normal">
          <li>
            <t><tt>keyid</tt> MUST be included. Its value MUST match the <tt>kid</tt> member of a key in the client's registered <tt>jwks</tt> value or at its <tt>jwks_uri</tt> endpoint.</t>
          </li>
          <li>
            <t><tt>alg</tt> and <tt>pub</tt> MUST NOT be included. The algorithm comes from the identified key, as described in <xref target="alg-preregistered"/>.</t>
          </li>
        </ul>
        <t>With a runtime-introduced key as in <xref target="runtime"/>:</t>
        <ul spacing="normal">
          <li>
            <t><tt>alg</tt> MUST be included, with a value from the "HTTP Signature Algorithms" registry as described in <xref target="alg-runtime"/>.</t>
          </li>
          <li>
            <t><tt>pub</tt> MUST be included, carrying the public key as described in <xref target="embed-keys"/>.</t>
          </li>
          <li>
            <t><tt>keyid</tt> MUST NOT be included, as the key is presented in full.</t>
          </li>
        </ul>
        <t>An example token request using a pre-registered key can look like the following:</t>
        <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
Content-Digest: sha-256=:4fEzRVTGqfZg7lqf/d3oxXu837pvb3L0GN24+F\
  1VkZk=:
Signature-Input: sig1=("@method" "@target-uri" "content-digest" \
  "authorization");created=1618884473;keyid="j-0Ny45NWmqGq6GQ"\
  ;nonce="b3k2pp5k7z-50gnX1b06";tag="httpsig-oauth-token-request"
Signature: sig1=:blPeRn3D3nkYqc1RNzCzge9E0n/Guf9yA1BBOeMFOOeSwuDdrVN\
  cc5KSUKSOabdVHXVExQT0v6J+e3QDc3zzBA==:

grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_u\
  ri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
]]></sourcecode>
        <t>An example token request introducing the same key at runtime can look like the following:</t>
        <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
Content-Digest: sha-256=:4fEzRVTGqfZg7lqf/d3oxXu837pvb3L0GN24+F\
  1VkZk=:
Signature-Input: sig1=("@method" "@target-uri" "content-digest" \
  "authorization");created=1618884473;alg="ed25519"\
  ;nonce="b3k2pp5k7z-50gnX1b06";tag="httpsig-oauth-token-request"\
  ;pub=:iuemcj/GhRHmY/yCsMlDNp3BQgPZDdG00VRsg/BgU3s=:
Signature: sig1=:W1jjnCpI59MI13gajmWP9DViwQHXhQdQ8r8q+h+Drp2JbJyu/md\
  QrMMkGuiMvkWWY/noYbi9L4cW/lTOZigsCQ==:

grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_u\
  ri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
]]></sourcecode>
      </section>
    </section>
    <section anchor="algorithms">
      <name>Signature Algorithms</name>
      <t>The two key binding methods name signature algorithms in different registries. A key bound by one method is never used with the other, and this document neither defines nor relies on any correspondence between the two registries.</t>
      <section anchor="alg-preregistered">
        <name>Pre-Registered Keys</name>
        <t>A pre-registered key is a JSON Web Key <xref target="JWK"/> whose <tt>alg</tt> value names an algorithm from the "JSON Web Signature and Encryption Algorithms" registry established by <xref target="JWA"/>. Signatures made with such a key use the JOSE signing algorithms of <xref section="3.3.7" sectionFormat="of" target="HTTPSIG"/>, which take the algorithm from the key material. The <tt>alg</tt> signature parameter is not used with those algorithms, and the client MUST NOT include it.</t>
        <t>The JWK's <tt>alg</tt> value MUST be fully specified. A polymorphic identifier such as <tt>EdDSA</tt>, which names a different signature algorithm depending on the key it is used with, MUST NOT be used. The fully specified equivalent defined in <xref target="RFC9864"/> is used in its place.</t>
      </section>
      <section anchor="alg-runtime">
        <name>Runtime-Introduced Keys</name>
        <t>A runtime-introduced key names its algorithm in the <tt>alg</tt> signature parameter, using a value from the "HTTP Signature Algorithms" registry established by <xref section="6.2" sectionFormat="of" target="HTTPSIG"/>, as required by <xref section="3.3" sectionFormat="of" target="HTTPSIG"/>. The algorithm MUST be an asymmetric signature algorithm for which this document defines a public key encoding in <xref target="embed-keys"/>.</t>
        <t>[[ Editor's note: we keep the two paths apart on purpose. Bridging them would mean asserting that some JWS algorithm and some "HTTP Signature Algorithms" entry are the same algorithm, and the two registries are maintained independently with nothing requiring either to track the other. Are we happy to pay a second code path at the RS to avoid that? ]]</t>
      </section>
    </section>
    <section anchor="embed-keys">
      <name>Embedding a Public Key Value</name>
      <t>When encoding a public key value in a runtime request as in <xref target="runtime"/>, the client includes the public key material in the <tt>pub</tt> signature parameter attached to the signature input, encoded as a Byte Sequence as defined in <xref target="STRUCTURED"/>.</t>
      <t>The contents of the <tt>pub</tt> signature parameter are the public key material appropriate to the signature algorithm indicated by the <tt>alg</tt> signature parameter, as defined in the following sections.</t>
      <section anchor="ecdsa">
        <name>ECDSA</name>
        <t>If the <tt>alg</tt> value is <tt>ecdsa-p256-sha256</tt> or <tt>ecdsa-p384-sha384</tt>, the <tt>pub</tt> signature parameter contains the uncompressed point representation of the public key, which is the single octet <tt>0x04</tt> followed by the big-endian, zero-padded, fixed-length encodings of the key's X and Y coordinates. This is the output of the Elliptic-Curve-Point-to-Octet-String Conversion in Section 2.3.3 of <xref target="SEC1"/> with point compression off.</t>
        <t>For <tt>ecdsa-p256-sha256</tt>, the X and Y values are exactly 32 octets each and the <tt>pub</tt> value is exactly 65 octets. For <tt>ecdsa-p384-sha384</tt>, the X and Y values are exactly 48 octets each and the <tt>pub</tt> value is exactly 97 octets.</t>
      </section>
      <section anchor="ed25519">
        <name>Ed25519</name>
        <t>If the <tt>alg</tt> value is <tt>ed25519</tt>, the <tt>pub</tt> signature parameter contains the Ed25519 public key <tt>A</tt>, which is the encoding of the point <tt>[s]B</tt> as specified in <xref section="5.1.5" sectionFormat="of" target="RFC8032"/>.</t>
        <t>The key value is exactly 32 octets in length.</t>
      </section>
      <section anchor="ml-dsa">
        <name>ML-DSA</name>
        <t>If the <tt>alg</tt> value indicates an ML-DSA algorithm, the <tt>pub</tt> signature parameter contains the ML-DSA public key encoded as described in Section 7.2 of <xref target="FIPS204"/>, which is the output of the <tt>pkEncode</tt> routine, Algorithm 22 of <xref target="FIPS204"/>.</t>
        <t>The value is exactly 1312 octets for the ML-DSA-44 parameter set, 1952 octets for ML-DSA-65, and 2592 octets for ML-DSA-87.</t>
        <t>[[ Editor's note: ML-DSA algorithm identifiers for use with <xref target="HTTPSIG"/> are being defined in separate work. We should add a reference here once that document is available. ]]</t>
      </section>
    </section>
    <section anchor="htsk">
      <name>HTTP Signature Key Confirmation Method</name>
      <t>A key introduced at runtime as in <xref target="runtime"/> is not a JSON Web Key and has no JWK representation, so the confirmation methods of <xref target="POPKEY"/> cannot carry it. This document defines the HTTP Signature Key confirmation method for that purpose, using the member name <tt>htsk</tt>.</t>
      <t>The value of the <tt>htsk</tt> member is a JSON object with two members:</t>
      <ul spacing="normal">
        <li>
          <t><tt>alg</tt>: the algorithm identifier from the "HTTP Signature Algorithms" registry, as a string</t>
        </li>
        <li>
          <t><tt>pub</tt>: the base64url encoding, without padding, of the <tt>pub</tt> octets defined in <xref target="embed-keys"/> for that algorithm</t>
        </li>
      </ul>
      <t>Both members MUST be present. A recipient MUST reject the confirmation if it does not recognize the <tt>alg</tt> value or if the <tt>pub</tt> value is not a well-formed public key for that algorithm.</t>
      <sourcecode type="json"><![CDATA[
{
    "alg": "ed25519",
    "pub": "iuemcj_GhRHmY_yCsMlDNp3BQgPZDdG00VRsg_BgU3s"
}
]]></sourcecode>
      <t>The <tt>htsk</tt> member is used in the <tt>cnf</tt> claim of a JWT and in the <tt>cnf</tt> member of a token introspection response, as described in <xref target="issuing"/>.</t>
    </section>
    <section anchor="issuing">
      <name>Issuing an HTTP Message Signature Bound Access Token</name>
      <t>The AS MUST validate the signature of the token request sent in <xref target="request"/> against the identified key and the algorithm associated with that key.</t>
      <t>The request MUST fail with an error if any of the following occur:</t>
      <ul spacing="normal">
        <li>
          <t>With a pre-registered key as in <xref target="preregister"/>, the key named in <tt>keyid</tt> cannot be found or is not associated with the requesting client</t>
        </li>
        <li>
          <t>With a pre-registered key as in <xref target="preregister"/>, the <tt>alg</tt> or <tt>pub</tt> signature parameter is present, or the JWK's <tt>alg</tt> value is not a fully specified asymmetric algorithm as required by <xref target="alg-preregistered"/></t>
        </li>
        <li>
          <t>With a runtime-introduced key as in <xref target="runtime"/>, the <tt>keyid</tt> signature parameter is present, or the <tt>alg</tt> or <tt>pub</tt> signature parameter is absent</t>
        </li>
        <li>
          <t>With a runtime-introduced key as in <xref target="runtime"/>, the <tt>alg</tt> value is not an asymmetric algorithm for which this document defines a public key encoding in <xref target="embed-keys"/>, or the <tt>pub</tt> value is not a well-formed public key for it</t>
        </li>
        <li>
          <t>There is more than one signature with the tag "httpsig-oauth-token-request"</t>
        </li>
        <li>
          <t>The <tt>created</tt> value of the signature is too far in the past</t>
        </li>
        <li>
          <t>The <tt>nonce</tt> value is used more than once within the validity window of the signature</t>
        </li>
      </ul>
      <t>When issuing an access token bound to a key using HTTP Message Signatures, the AS associates the granted token with the key used in the requesting signature. All presentations of this token at any RS MUST contain an HTTP message signature as described in <xref target="presenting"/>.</t>
      <t>An HTTP Message Signature bound access token MUST have a <tt>token_type</tt> value of <tt>httpsig</tt>.</t>
      <artwork><![CDATA[
HTTP 200 OK
Content-Type: application/json

{
    "access_token": "2340897.34j123-134uh2345n",
    "token_type": "httpsig"
}
]]></artwork>
      <t>The client MUST associate this returned access token with the key used to make the requst.</t>
      <t>The confirmation carries the key the token is bound to, allowing an RS to validate a presented signature without reference to the client's registration. The member carrying the key depends on the key binding method and indicates which algorithm registry applies:</t>
      <ul spacing="normal">
        <li>
          <t>A pre-registered key is carried in the <tt>jwk</tt> member of the <tt>cnf</tt> claim, as defined in <xref section="3.2" sectionFormat="of" target="POPKEY"/>, and names its algorithm in the JWK's <tt>alg</tt> value as in <xref target="alg-preregistered"/></t>
        </li>
        <li>
          <t>A runtime-introduced key is carried in the HTTP Signature Key (<tt>htsk</tt>) member defined in <xref target="htsk"/>, and names its algorithm in that object's <tt>alg</tt> member as in <xref target="alg-runtime"/></t>
        </li>
      </ul>
      <section anchor="encoding-confirmation-in-a-jwt">
        <name>Encoding Confirmation in a JWT</name>
        <t>A token bound to a pre-registered key can look like the following:</t>
        <sourcecode type="json"><![CDATA[
{
    "iss": "https://server.example.com",
    "aud": "https://resource.example.com",
    "cnf": {
        "jwk": {
            "kty": "OKP",
            "crv": "Ed25519",
            "alg": "Ed25519",
            "x": "iuemcj_GhRHmY_yCsMlDNp3BQgPZDdG00VRsg_BgU3s"
        }
    }
}
]]></sourcecode>
        <t>A token bound to a runtime-introduced key can look like the following:</t>
        <sourcecode type="json"><![CDATA[
{
    "iss": "https://server.example.com",
    "aud": "https://resource.example.com",
    "cnf": {
        "htsk": {
            "alg": "ed25519",
            "pub": "iuemcj_GhRHmY_yCsMlDNp3BQgPZDdG00VRsg_BgU3s"
        }
    }
}
]]></sourcecode>
        <t>A confirmation MUST carry exactly one of these members.</t>
      </section>
      <section anchor="returning-confirmation-in-token-introspection">
        <name>Returning Confirmation in Token Introspection</name>
        <t>The same <tt>cnf</tt> member is returned in a token introspection response.</t>
        <t>[[ Editor's note: we need to register <tt>htsk</tt> in the "JWT Confirmation Methods" registry. Nothing further is needed for introspection, since <tt>cnf</tt> is already a registered token introspection response parameter and carries the same structure. ]]</t>
      </section>
    </section>
    <section anchor="presenting">
      <name>Presenting an HTTP Message Signature Bound Access Token</name>
      <t>HTTP Message Signature bound access token MUST be presented in an HTTP Authorization field using the <tt>HTTPSig</tt> authorization scheme.</t>
      <artwork><![CDATA[
Authorization: HTTPSig 2340897.34j123-134uh2345n
]]></artwork>
      <t>Note that HTTP authorization schemes defined in <xref target="HTTPAUTH"/> are case-insensitive, and so all the following are equivalent:</t>
      <artwork><![CDATA[
Authorization: HTTPSig 2340897.34j123-134uh2345n
Authorization: httpsig 2340897.34j123-134uh2345n
Authorization: HTTPSIG 2340897.34j123-134uh2345n
Authorization: Httpsig 2340897.34j123-134uh2345n
Authorization: hTtPsIg 2340897.34j123-134uh2345n
]]></artwork>
      <t>When presenting an HTTP Message Signature bound access token to an RS, the client MUST include a signature compliant with <xref target="HTTPSIG"/>. The covered components MUST include:</t>
      <ul spacing="normal">
        <li>
          <t><tt>@method</tt> the HTTP method of the request</t>
        </li>
        <li>
          <t><tt>@target-uri</tt> the full request URI of the request (note that this includes the scheme, authority, path, and query)</t>
        </li>
        <li>
          <t><tt>authorization</tt> the access token value being presented</t>
        </li>
      </ul>
      <t>The RS MAY require additional components to be covered by the signature, and the client MUST include any additional fields or components of the HTTP request that are relevant to the security of the RS. For example, if the API being served by the RS declares that incoming content type makes a material difference, the RS SHOULD require signing of the Content-Type header in addition to the above.</t>
      <t>The request MAY include multiple signatures to serve different needs.</t>
      <t>If the request includes an entity body (such as a POST, PUT, or QUERY), the client SHOULD calculate the digest as per <xref target="DIGEST"/> and also sign the digest header (such as Content-Digest).</t>
      <t>The signature MUST include the following signature parameters:</t>
      <ul spacing="normal">
        <li>
          <t><tt>created</tt> a timestamp for signature creation; this MUST be within a small number of seconds of issuance (e.g. 30 seconds to account for clock skew)</t>
        </li>
        <li>
          <t><tt>nonce</tt> a random unique value that the AS can use to prevent signature replay within the small validity time window</t>
        </li>
        <li>
          <t><tt>tag</tt> a string indicating that this is being used for requesting a bound token, MUST be the value "httpsig-oauth"</t>
        </li>
      </ul>
      <t>The client MUST NOT include the <tt>alg</tt>, <tt>keyid</tt>, or <tt>pub</tt> signature parameters, as the RS determines the key from the binding of the presented access token.</t>
      <t>For example, the following signed request includes a signature with the needed signature parameters:</t>
      <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

GET /foo HTTP/1.1
Host: example.com
Date: Mon, 20 Apr 2026 02:07:55 GMT
Authorization: HTTPSig 2340897.34j123-134uh2345n
Signature-Input: sig1=("@method" "@target-uri" "authorization")\
  ;created=1776650875;nonce="k9Jyxempel2305Nmx7Rk"\
  ;tag="httpsig-oauth"
Signature: sig1=:uvIxaaJED8BxpYUL6cBd1v5uy24SptQnVQ35oKxWflg8GumiH77\
  60va6P2qWxadrLodjGmIFna3bS70KxYv7CQ==:
]]></sourcecode>
    </section>
    <section anchor="validating">
      <name>Validating an HTTP Message Signature Bound Resource Request</name>
      <t>In order for a request protected by an HTTP Message Signature bound access token to be considered valid, the RS MUST perform the following checks:</t>
      <ul spacing="normal">
        <li>
          <t>The presented signature validates using the key the token is bound to</t>
        </li>
        <li>
          <t>For a <tt>jwk</tt> confirmation, the signature validates under the HTTP_VERIFY application of the JWS algorithm named by the JWK's <tt>alg</tt> member, applied as described in <xref section="3.3.7" sectionFormat="of" target="HTTPSIG"/></t>
        </li>
        <li>
          <t>For an <tt>htsk</tt> confirmation, the signature validates under the HTTP_VERIFY primitive of the named "HTTP Signature Algorithms" entry</t>
        </li>
        <li>
          <t>The <tt>created</tt> value is not too far in the past (e.g. 30 seconds to account for clock skew and network delays)</t>
        </li>
        <li>
          <t>The <tt>nonce</tt> value has not been previously used within the time validity window of this request</t>
        </li>
        <li>
          <t>The <tt>tag</tt> value is "httpsig-oauth"</t>
        </li>
        <li>
          <t>The covered components and signature parameters include all items enumerated in <xref target="presenting"/>, including the Authorization header field</t>
        </li>
        <li>
          <t>The <tt>alg</tt>, <tt>keyid</tt>, and <tt>pub</tt> signature parameters are not present</t>
        </li>
      </ul>
      <t>The check on the <tt>alg</tt>, <tt>keyid</tt>, and <tt>pub</tt> signature parameters, and the corresponding checks in <xref target="issuing"/>, are required rather than optional. <xref section="3.2.1" sectionFormat="of" target="HTTPSIG"/> allows an application to impose requirements beyond those of <xref target="HTTPSIG"/>, but requires that it enforce them during verification and fail any signature that does not conform.</t>
      <t>If the request includes an entity body (such as a POST, PUT, or QUERY) and a digest as per <xref target="DIGEST"/>, the RS MUST validate the digest.</t>
      <t>If the request includes multiple signatures tagged "httpsig-oauth", all signatures MUST be validated.</t>
      <t>For example, to validate the request:</t>
      <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

GET /foo HTTP/1.1
Host: example.com
Date: Mon, 20 Apr 2026 02:07:55 GMT
Authorization: HTTPSig 2340897.34j123-134uh2345n
Signature-Input: sig1=("@method" "@target-uri" "authorization")\
  ;created=1776650875;nonce="k9Jyxempel2305Nmx7Rk"\
  ;tag="httpsig-oauth"
Signature: sig1=:iIwwgqVdmaneSVYJaLAMCf9yz8SnvNfUPZgeyWdkEjsO3+29XB0\
  OLVBsR0w9Q+uw04yOVV1JeogdVvpyBhw3ZA==:
]]></sourcecode>
      <t>Nothing in the request identifies the key, so the RS determines the key and the algorithm from the token's confirmation method (in this example, assume the RS introspects the token to get it). The same request validates under either binding method, and only the confirmation differs.</t>
      <t>If the token was issued for a pre-registered key, the confirmation carries the JWK and the algorithm is the JWS algorithm named by its <tt>alg</tt> member:</t>
      <sourcecode type="json"><![CDATA[
{
    "cnf": {
        "jwk": {
            "kty": "EC",
            "crv": "P-256",
            "alg": "ES256",
            "x": "R4YT13Ra4frLCH75BdM53OEHYi_YY2eQgR43BWWQpVw",
            "y": "UFVFPBGODokYW06OXCqDskhZSU3RpUI6fR8_OCz2doo"
        }
    }
}
]]></sourcecode>
      <t>If the token was issued for a key introduced at runtime, the confirmation carries the same key as an <tt>htsk</tt> member, and the algorithm is the "HTTP Signature Algorithms" value named by its <tt>alg</tt> member:</t>
      <artwork><![CDATA[
{
    "cnf": {
        "htsk": {
            "alg": "ecdsa-p256-sha256",
            "pub": "BEeGE9d0WuH6ywh--QXTOdzhB2Iv2GNnkIEeNwVlkKVcUF\
              VFPBGODokYW06OXCqDskhZSU3RpUI6fR8_OCz2doo"
        }
    }
}
]]></artwork>
      <t>The signature base is the same in either case:</t>
      <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

"@method": GET
"@target-uri": https://example.com/foo
"authorization": HTTPSig 2340897.34j123-134uh2345n
"@signature-params": ("@method" "@target-uri" "authorization")\
  ;created=1776650875;nonce="k9Jyxempel2305Nmx7Rk"\
  ;tag="httpsig-oauth"
]]></artwork>
      <t>The RS then calculates the signature validation against the signature base using the key using the algorithm appropriate HTTP_VERIFY function, per <xref target="HTTPSIG"/>.</t>
    </section>
    <section anchor="Acknowledgements">
      <name>Acknowledgements</name>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>[[ TBD: register the <tt>httpsig</tt> token type, the <tt>httpsig_key_binding_method</tt> client registration metadata parameter, the <tt>pub</tt> signature parameter defined in <xref target="embed-keys"/> in the "HTTP Signature Metadata Parameters" registry established by <xref target="HTTPSIG"/>, and the HTTP Signature Key (<tt>htsk</tt>) confirmation method in the "JWT Confirmation Methods" registry. The <tt>jwk</tt> confirmation method is already registered by <xref target="POPKEY"/>, and <tt>cnf</tt> is already a registered token introspection response parameter. ]]</t>
    </section>
    <section anchor="Security">
      <name>Security Considerations</name>
      <t>[[ TBD. ]]</t>
      <ul spacing="normal">
        <li>
          <t>All requests have to be over TLS or equivalent as per <xref target="BCP195"/>.</t>
        </li>
        <li>
          <t>Leakage of a private key alongside a token allows for re-presentation of that token.</t>
        </li>
        <li>
          <t>Insufficient coverage of a message allows a signature to be attached to a different message.</t>
        </li>
        <li>
          <t>Failure to check derived attributes allows a signature to be replayed.</t>
        </li>
        <li>
          <t>Signatures could be replayed outside of their vailidty window if not checked.</t>
        </li>
        <li>
          <t>An access token cannot be bound to a shared secret. Every party that validates a presented signature needs the key that produced it, and a verifier holding symmetric key material can produce a valid signature of its own as per <xref section="7.3.3" sectionFormat="of" target="HTTPSIG"/>. Binding a token to a shared secret would allow every RS that accepts it to produce requests indistinguishable from the client's. The client's registered <tt>jwks</tt> and <tt>jwks_uri</tt> values carry public keys only (<xref target="DYNREG"/>).</t>
        </li>
      </ul>
    </section>
    <section anchor="Privacy">
      <name>Privacy Considerations</name>
      <t>[[ TBD. ]]</t>
      <ul spacing="normal">
        <li>
          <t>Re-use of a public-key for tokens at multiple RS's can allow tracking of a client/user combination based on the key identity.</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <referencegroup anchor="BCP195" target="https://www.rfc-editor.org/info/bcp195">
          <reference anchor="RFC8996" target="https://www.rfc-editor.org/info/rfc8996">
            <front>
              <title>Deprecating TLS 1.0 and TLS 1.1</title>
              <author fullname="K. Moriarty" initials="K." surname="Moriarty"/>
              <author fullname="S. Farrell" initials="S." surname="Farrell"/>
              <date month="March" year="2021"/>
              <abstract>
                <t>This document formally deprecates Transport Layer Security (TLS) versions 1.0 (RFC 2246) and 1.1 (RFC 4346). Accordingly, those documents have been moved to Historic status. These versions lack support for current and recommended cryptographic algorithms and mechanisms, and various government and industry profiles of applications using TLS now mandate avoiding these old TLS versions. TLS version 1.2 became the recommended version for IETF protocols in 2008 (subsequently being obsoleted by TLS version 1.3 in 2018), providing sufficient time to transition away from older versions. Removing support for older versions from implementations reduces the attack surface, reduces opportunity for misconfiguration, and streamlines library and product maintenance.</t>
                <t>This document also deprecates Datagram TLS (DTLS) version 1.0 (RFC 4347) but not DTLS version 1.2, and there is no DTLS version 1.1.</t>
                <t>This document updates many RFCs that normatively refer to TLS version 1.0 or TLS version 1.1, as described herein. This document also updates the best practices for TLS usage in RFC 7525; hence, it is part of BCP 195.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="195"/>
            <seriesInfo name="RFC" value="8996"/>
            <seriesInfo name="DOI" value="10.17487/RFC8996"/>
          </reference>
          <reference anchor="RFC9325" target="https://www.rfc-editor.org/info/rfc9325">
            <front>
              <title>Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>
              <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
              <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
              <author fullname="T. Fossati" initials="T." surname="Fossati"/>
              <date month="November" year="2022"/>
              <abstract>
                <t>Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) are used to protect data exchanged over a wide range of application protocols and can also form the basis for secure transport protocols. Over the years, the industry has witnessed several serious attacks on TLS and DTLS, including attacks on the most commonly used cipher suites and their modes of operation. This document provides the latest recommendations for ensuring the security of deployed services that use TLS and DTLS. These recommendations are applicable to the majority of use cases.</t>
                <t>RFC 7525, an earlier version of the TLS recommendations, was published when the industry was transitioning to TLS 1.2. Years later, this transition is largely complete, and TLS 1.3 is widely available. This document updates the guidance given the new environment and obsoletes RFC 7525. In addition, this document updates RFCs 5288 and 6066 in view of recent attacks.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="195"/>
            <seriesInfo name="RFC" value="9325"/>
            <seriesInfo name="DOI" value="10.17487/RFC9325"/>
          </reference>
        </referencegroup>
        <reference anchor="DIGEST">
          <front>
            <title>Digest Fields</title>
            <author fullname="R. Polli" initials="R." surname="Polli"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>This document defines HTTP fields that support integrity digests. The Content-Digest field can be used for the integrity of HTTP message content. The Repr-Digest field can be used for the integrity of HTTP representations. Want-Content-Digest and Want-Repr-Digest can be used to indicate a sender's interest and preferences for receiving the respective Integrity fields.</t>
              <t>This document obsoletes RFC 3230 and the Digest and Want-Digest HTTP fields.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9530"/>
          <seriesInfo name="DOI" value="10.17487/RFC9530"/>
        </reference>
        <reference anchor="OAUTH">
          <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="STRUCTURED">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="September" year="2024"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields.</t>
              <t>This document obsoletes RFC 8941.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9651"/>
          <seriesInfo name="DOI" value="10.17487/RFC9651"/>
        </reference>
        <reference anchor="MTLS">
          <front>
            <title>OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens</title>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document describes OAuth client authentication and certificate-bound access and refresh tokens using mutual Transport Layer Security (TLS) authentication with X.509 certificates. OAuth clients are provided a mechanism for authentication to the authorization server using mutual TLS, based on either self-signed certificates or public key infrastructure (PKI). OAuth authorization servers are provided a mechanism for binding access tokens to a client's mutual-TLS certificate, and OAuth protected resources are provided a method for ensuring that such an access token presented to it was issued to the client presenting the token.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8705"/>
          <seriesInfo name="DOI" value="10.17487/RFC8705"/>
        </reference>
        <reference anchor="HTTPSIG">
          <front>
            <title>HTTP Message Signatures</title>
            <author fullname="A. Backman" initials="A." role="editor" surname="Backman"/>
            <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
            <author fullname="M. Sporny" initials="M." surname="Sporny"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>This document describes a mechanism for creating, encoding, and verifying digital signatures or message authentication codes over components of an HTTP message. This mechanism supports use cases where the full HTTP message may not be known to the signer and where the message may be transformed (e.g., by intermediaries) before reaching the verifier. This document also describes a means for requesting that a signature be applied to a subsequent HTTP message in an ongoing HTTP exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9421"/>
          <seriesInfo name="DOI" value="10.17487/RFC9421"/>
        </reference>
        <reference anchor="DPOP">
          <front>
            <title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title>
            <author fullname="D. Fett" initials="D." surname="Fett"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Waite" initials="D." surname="Waite"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>This document describes a mechanism for sender-constraining OAuth 2.0 tokens via a proof-of-possession mechanism on the application level. This mechanism allows for the detection of replay attacks with access and refresh tokens.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9449"/>
          <seriesInfo name="DOI" value="10.17487/RFC9449"/>
        </reference>
        <reference anchor="PAR">
          <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="DYNREG">
          <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="HTTPAUTH">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Authentication</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypermedia information systems. This document defines the HTTP Authentication framework.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7235"/>
          <seriesInfo name="DOI" value="10.17487/RFC7235"/>
        </reference>
        <reference anchor="JWK">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>
        <reference anchor="JWA">
          <front>
            <title>JSON Web Algorithms (JWA)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications. It defines several IANA registries for these identifiers.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7518"/>
          <seriesInfo name="DOI" value="10.17487/RFC7518"/>
        </reference>
        <reference anchor="POPKEY">
          <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="RFC9864">
          <front>
            <title>Fully-Specified Algorithms for JSON Object Signing and Encryption (JOSE) and CBOR Object Signing and Encryption (COSE)</title>
            <author fullname="M.B. Jones" initials="M.B." surname="Jones"/>
            <author fullname="O. Steele" initials="O." surname="Steele"/>
            <date month="October" year="2025"/>
            <abstract>
              <t>This specification refers to cryptographic algorithm identifiers that fully specify the cryptographic operations to be performed, including any curve, key derivation function (KDF), and hash functions, as being "fully specified". It refers to cryptographic algorithm identifiers that require additional information beyond the algorithm identifier to determine the cryptographic operations to be performed as being "polymorphic". This specification creates fully-specified algorithm identifiers for registered JSON Object Signing and Encryption (JOSE) and CBOR Object Signing and Encryption (COSE) polymorphic algorithm identifiers, enabling applications to use only fully-specified algorithm identifiers. It deprecates those polymorphic algorithm identifiers.</t>
              <t>This specification updates RFCs 7518, 8037, and 9053. It deprecates polymorphic algorithms defined by RFCs 8037 and 9053 and provides fully-specified replacements for them. It adds to the instructions to designated experts in RFCs 7518 and 9053.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9864"/>
          <seriesInfo name="DOI" value="10.17487/RFC9864"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="FIPS204" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.204.pdf">
          <front>
            <title>Module-Lattice-Based Digital Signature Standard</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2024" month="August"/>
          </front>
          <seriesInfo name="NIST" value="FIPS 204"/>
          <seriesInfo name="DOI" value="10.6028/NIST.FIPS.204"/>
        </reference>
        <reference anchor="SEC1" target="https://www.secg.org/sec1-v2.pdf">
          <front>
            <title>SEC 1: Elliptic Curve Cryptography</title>
            <author>
              <organization>Certicom Research</organization>
            </author>
            <date year="2009" month="May"/>
          </front>
          <refcontent>Standards for Efficient Cryptography, Version 2.0</refcontent>
        </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>
        <reference anchor="RFC8792">
          <front>
            <title>Handling Long Lines in Content of Internet-Drafts and RFCs</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="E. Auerswald" initials="E." surname="Auerswald"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <author fullname="Q. Wu" initials="Q." surname="Wu"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>This document defines two strategies for handling long lines in width-bounded text content. One strategy, called the "single backslash" strategy, is based on the historical use of a single backslash ('\') character to indicate where line-folding has occurred, with the continuation occurring with the first character that is not a space character (' ') on the next line. The second strategy, called the "double backslash" strategy, extends the first strategy by adding a second backslash character to identify where the continuation begins and is thereby able to handle cases not supported by the first strategy. Both strategies use a self-describing header enabling automated reconstitution of the original content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8792"/>
          <seriesInfo name="DOI" value="10.17487/RFC8792"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-oauth-signed-http-request">
          <front>
            <title>A Method for Signing HTTP Requests for OAuth</title>
            <author fullname="Justin Richer" initials="J." surname="Richer">
         </author>
            <author fullname="John Bradley" initials="J." surname="Bradley">
              <organization>Ping Identity</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>ARM Limited</organization>
            </author>
            <date day="8" month="August" year="2016"/>
            <abstract>
              <t>   This document a method for offering data origin authentication and
   integrity protection of HTTP requests.  To convey the relevant data
   items in the request a JSON-based encapsulation is used and the JSON
   Web Signature (JWS) technique is re-used.  JWS offers integrity
   protection using symmetric as well as asymmetric cryptography.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-signed-http-request-03"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-client-id-metadata-document">
          <front>
            <title>OAuth Client ID Metadata Document</title>
            <author fullname="Aaron Parecki" initials="A." surname="Parecki">
              <organization>Okta</organization>
            </author>
            <author fullname="Emelia Smith" initials="E." surname="Smith">
         </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   This specification defines a mechanism through which an OAuth client
   can identify itself to authorization servers, without prior dynamic
   client registration or other existing registration.  This is through
   the usage of a URL as a client_id in an OAuth flow, where the URL
   refers to a document containing the necessary client metadata,
   enabling the authorization server to fetch the metadata about the
   client as needed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-client-id-metadata-document-02"/>
        </reference>
        <reference anchor="SIGNED-INTROSPECTION">
          <front>
            <title>JSON Web Token (JWT) Response for OAuth Token Introspection</title>
            <author fullname="T. Lodderstedt" initials="T." role="editor" surname="Lodderstedt"/>
            <author fullname="V. Dzhuvinov" initials="V." surname="Dzhuvinov"/>
            <date month="January" year="2025"/>
            <abstract>
              <t>This specification proposes an additional response secured by JSON Web Token (JWT) for OAuth 2.0 Token Introspection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9701"/>
          <seriesInfo name="DOI" value="10.17487/RFC9701"/>
        </reference>
      </references>
    </references>
    <?line 561?>

<section anchor="history">
      <name>Document History</name>
      <ul spacing="normal">
        <li>
          <t>-03
          </t>
          <ul spacing="normal">
            <li>
              <t>Added co-authors</t>
            </li>
            <li>
              <t>Changed inline key presentation from a header field carrying a JWK to a single <tt>pub</tt> signature parameter carrying the raw public key</t>
            </li>
            <li>
              <t>Limited the inline key representation to ECDSA, Ed25519, and ML-DSA</t>
            </li>
            <li>
              <t>Required the <tt>alg</tt> signature parameter for runtime key introduction</t>
            </li>
            <li>
              <t>Removed <tt>keyid</tt> from runtime key introduction and from token presentation</t>
            </li>
            <li>
              <t>Required the bound key to be asymmetric, disallowing shared secrets</t>
            </li>
            <li>
              <t>Kept each binding method within a single algorithm registry, with no correspondence defined between the two</t>
            </li>
            <li>
              <t>Required pre-registered JWK algorithm identifiers to be fully specified</t>
            </li>
            <li>
              <t>Defined the <tt>jwk</tt> confirmation method for pre-registered keys and a new HTTP Signature Key (<tt>htsk</tt>) confirmation method for runtime-introduced keys</t>
            </li>
            <li>
              <t>Removed the <tt>httpsig_bound_access_token_kid</tt> client metadata field in favor of selecting a pre-registered key with the <tt>keyid</tt> signature parameter</t>
            </li>
          </ul>
        </li>
        <li>
          <t>-02
          </t>
          <ul spacing="normal">
            <li>
              <t>Editorial fixes</t>
            </li>
            <li>
              <t>Added example of client registration metadata parameter in CIMD</t>
            </li>
          </ul>
        </li>
        <li>
          <t>-01
          </t>
          <ul spacing="normal">
            <li>
              <t>Added key binding semantics</t>
            </li>
            <li>
              <t>Updated references</t>
            </li>
            <li>
              <t>Updated presentation requirements</t>
            </li>
            <li>
              <t>Added appendix for potential future work</t>
            </li>
            <li>
              <t>Added some basic security and privacy considerations, to be expanded upon group discussion</t>
            </li>
          </ul>
        </li>
        <li>
          <t>-00
          </t>
          <ul spacing="normal">
            <li>
              <t>Initial individual draft.</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
    <section anchor="potential-other-work">
      <name>Potential Other Work</name>
      <t><xref target="HTTPSIG"/> provides a generic mechanism for signing arbitrary HTTP messages, both requests and responses. While this specification is focused solely on OAuth access token issuance and usage, <xref target="HTTPSIG"/> could be used in other places in the OAuth ecosystem and this appendix exists to capture some of those ideas.</t>
      <section anchor="client-authentication">
        <name>Client Authentication</name>
        <t>Similarly to <xref target="MTLS"/>, <xref target="HTTPSIG"/> could be used as a generic client authentication mechanism for the client calling the AS for any authenticated call, including token PAR, the token endpoint. Since <xref target="HTTPSIG"/> allows for multiple signatures with different signature parameters (including <tt>tag</tt>), this could be layered on top of even the runtime token request key binding, allowing a client to use one key for authentication and another for token use.</t>
      </section>
      <section anchor="as-responses">
        <name>AS Responses</name>
        <t>Since <xref target="HTTPSIG"/> can be used to sign responses, an AS could sign its responses from backend endpoints (including the token endpoint, revocation endpoint, discovery endpoint, introspection endpoint, etc) with an issuer-based key, providing a layer of protection in addition to the TLS transport. Signed response mechanisms like <xref target="SIGNED-INTROSPECTION"/> could be replaced with this method in many use cases.</t>
      </section>
      <section anchor="non-repudiation-of-requests">
        <name>Non-Repudiation of Requests</name>
        <t>Since <xref target="HTTPSIG"/> allows a signed response to contain elements of the request that triggered the response, an AS or RS could use this mechanism to provide non-repudiation of a response to bind it to a particular request parameter set.</t>
      </section>
      <section anchor="par-key-introduction">
        <name>PAR Key Introduction</name>
        <t>Keys for this purpose could be introduced during a <xref target="PAR"/> request phase, as part of the call to the PAR endpoint.</t>
      </section>
      <section anchor="accept-signature-support">
        <name>Accept-Signature Support</name>
        <t>The <tt>Accept-Signature</tt> mechanism in <xref target="HTTPSIG"/> allows for runtime discovery of not only the applicability of signatures but also the expected coverage, for particular uses.</t>
      </section>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>[[ Editor's note: we really should have end-to-end test vectors with keys and stuff all in here, not just inline. ]]</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+196XLbxrbufz4Frlz72K6QFAfNOb47lETLtK2J1BA52WWC
QJOESQIwAFKiVd7Pcp/lPtlZQ3ejAYKKlZ2qc+6tnUolFIYeVq/hW0M3KpVK
KfGSqTiwXp635snYuoiCYGjBvxdBHIs49gLfugomwo+tew/uv7u6urBO4YY9
ElbPG/l2Mo9E/LLkBo5vz6AhN7KHSSXynLGIKoENjVbGSRLG3qhSa5YcOxGj
IFoeWHHilkpeGB1YSTSPk0attl9rlOxI2AdWTzjzyEuWpfsgmoyiYB4eWOet
66t3pYlYwjX3wOr4iYh8kVSOsb9SKU5s3/1sTwMfxrAUcSn0DqzfksApW/Af
z3eFn5StOIiSSAxj+LWcyR8JjBVuOcEstOWPGTwMtzx/6vmibMHcZnYYev7o
H6USziiIDkqWVYEH4gPrfdXq0mzhkmUxEd7DjDzfvB5EI9v3vtkJUPTAOg38
UXB8SHfEzPamB5YnkuEvX+i9KlOvCu/QE1GAKyRcLwmitN9W1boAcjkTz+i4
ZUewYub1bMfnk8Q2e7Xx+V9Cfr4KU0/bv6hahzYMx/aN9i/s+TRzOdv84RwI
HbvR3JmISHhmTyG8WR3wm7+EQZyIoOqKtLu3Vas3CSaZ3t56Uy80Lz89mdD2
F3bVC38Z4d/Z2RzBbIJoZvtm+0fjyKMBZe5lO+lddDtnx2Y3Dr5VHfAb0NcD
zqPk49+JtxAH9Ozh0UV9f5t/H3dO2r2rA6v79mh/u1mja8TOdGlnd2ufLvWu
utdHV9fd9jE/urNdp+unVx97dGVvt7ZNV1AKe50TfmyrwY8dX5xfyCuywYtW
ly/UGzv8yN1Zt82v7W7v13Vbeiy7jSb38P72g3ysvisvtNSFPW78/OJD+46v
7dV4UtjX3s7Wgfpjr9Zs8B9vOxe9Rk3ewX+k2tk4Ddz5VFQ+2kniOaICrCVc
69gbeYk9TRWM1UPxtiN3QzeQymH6D6wcNHlGKwevd3xY3GSeCFRoqoXYgv9b
V8IZ+8E0GC2tV2ed3tXrtGEXVNSB1ag1tiq1PX01FpEnYs8fBtkuN/DtDegV
ZwhvbW1kbx+fd/BuvVbdqTX2NvHpKj5azTya2NFIJAcWacqDzU1/MQ3ng7jq
A3tWR8FiE3/glU18N9tKNXSHzD/to/rB2ibv7++rsXBGqFU24Ue9smjoV80V
gWas+oHVnoLswZpYR/NoIayjaBkmwSiyw/HyBxbhSETwbjCzuiIWduSMV8hb
269IbsZ/QBc7Aah0P8ER6KUaBpHVHg49x4M7mTGUrRsRkXlqVGsbYElgZTIC
2KkcV1GnShsE9scXLpmiSiS+zkWcFD7nTLGriudWZiKxYbB2BdT/HC0CPw9y
d9Y+rnTOrrrnvYv20VXn/IylbLdWL5UqlYplD8CogC0pla7GXmyJB5gXDTUJ
rGQsLDa1MG5JP6lrrGEEWglNnuWKIVgeYFULRjEOXCLEHNhvVFpjgbHtAZg5
y3YcuAl/ktGGq2AyY2sspq41WBpd80TjKg955rnuFLTYCzSsEcikgyPCCZjD
TQcYRsHCA1Uvx8crJZvEToH1YBJTMYLVzo9pGAFfgELPTh4EbCEiaocfh8li
N4lwsAmYYjCP4DoMmAeUbdQBJT4Q8C+YskheLAMvWoMAbBIOybYWNshwskRt
MAP5ByUfz2IwD8507mJvs3kyB7UB6rYM2jS4oPcDWLEIBgJ87Cc81PTlaunQ
7NCC31bszcKpwB7pB3KONZgnlj2NA2tsgywhDyA/esDYNtyNJdwBoHEPjOKi
virZ02lwj6Oy/SWAGut+HMCDuNDwtjl37GkeY6t2wleARI+P0kZ8/24w00j4
oMacdAL8EvDoHNUuNITDYpAnhYTVJcw+DPyYqE88HYfCoeETQVQPM2H7T3Ci
jbyoWRHnwRxThjtyKstQlBb2dC7Sa6pvYg1olzoFutDQ1UMed55Q54KnQ4DV
IETJXMQyzSsjX/I2ts1Mk52AlycMyaPZgSIOSQjiSV59JuFg7k1BToBa4iFE
Y+I7Qg0RTTcsFD72+Ijm/vt3GB80JKZT+H9JMxINPUYGfnz8YwVHrcBSecBc
yNgwQVfglIKIVZEXl7ILiSNghkdtSh2xsIXoF1Tg3zD1C3CaMOXff/v9N6tN
4PRlbPkBqvd7mJpcjRFoZGCQhZgGMG0Q1ClIjDWae66NFMB2xikTEy29kbWI
qySC9GMGFKEfUtjw5z2svkCFIabw2u//+B2g+YsXYNejmceGnZUXchx6DDFA
jWuw1GX+v3V2Tr+77cvrDiAu/N171/r4Uf8oySd6786vPx6nv9I3j85PT9tn
x/wyXLUyl0obp627DWazjfMLNBOtjxvIRUh3SxkVUhnMtB66NLBGpDHjEmhX
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
AA==

-->

</rfc>
