<?xml version='1.0' encoding='UTF-8'?>
<?xml-model href="rfc7991bis.rnc"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp "&#160;">
  <!ENTITY zwsp "&#8203;">
  <!ENTITY nbhy "&#8209;">
  <!ENTITY wj "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-chu-oauth-subject-key-binding-00" ipr="trust200902" submissionType="IETF" version="3" xml:lang="en">
  <front>
    <title abbrev="OAuth Subject Key Binding">OAuth Subject Signing Key Binding for Resource Servers</title>
    <author fullname="Cheng-Kang Chu" initials="C.-K." surname="Chu">
      <organization>Huawei International Pte. Ltd.</organization>
      <address>
        <email>chu.cheng.kang@huawei.com</email>
      </address>
    </author>
    <author fullname="Ruochen Li" initials="R." surname="Li">
      <organization>Huawei International Pte. Ltd.</organization>
      <address>
        <email>li.ruochen@h-partners.com</email>
      </address>
    </author>
    <author fullname="Haiguang Wang" initials="H." surname="Wang">
      <organization>Huawei International Pte. Ltd.</organization>
      <address>
        <email>wang.haiguang.shieldlab@huawei.com</email>
      </address>
    </author>
    <author fullname="Tieyan Li" initials="T." surname="Li">
      <organization>Huawei International Pte. Ltd.</organization>
      <address>
        <email>Li.Tieyan@huawei.com</email>
      </address>
    </author>
    <date/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <abstract>
      <t>Resource servers in OAuth deployments sometimes receive application-layer authorization evidence that is digitally signed by the subject represented by an access token.  Verification of such evidence requires the resource server to obtain a trusted public signing key that is bound to that subject.</t>
      <t>This specification defines the <tt>subject_keys</tt> parameter, by which an OAuth authorization server conveys one or more subject public signing keys to a resource server.  The parameter can be carried as a claim in a JWT access token or as a member of a token introspection response.  The resulting key binding is scoped to the authorization server, token subject, resource server audience, and token validity context.</t>
      <t>This specification does not define a public-key enrollment protocol or the syntax and semantics of the application-layer authorization evidence.  It also does not use the OAuth <tt>cnf</tt> claim, which identifies a proof-of-possession key held by the presenter of a token.</t>
    </abstract>
  </front>
  <middle>
    <section>
      <name>Introduction</name>
      <t>The OAuth 2.0 Authorization Framework <xref target="RFC6749"/> enables a Client to obtain limited access to a protected resource.  The Authorization Server establishes the authorization context and issues an Access Token, and the Resource Server makes an authorization decision based on that token and its local policy.</t>
      <t>Some deployments require the Resource Server to process an additional authorization artifact that is signed directly by the Subject represented by the Access Token.  Examples include a signed transaction instruction, a signed delegation constraint, or another application-layer statement that restricts what the Client may do on the Subject's behalf.  Such an artifact can express authorization semantics that are more specific than the permissions represented by the Access Token.</t>
      <t>A Resource Server can verify such an artifact only when it has a trusted binding between the Access Token subject and the public key corresponding to the signing private key.  The OAuth authorization framework does not define a general-purpose mechanism by which an Authorization Server conveys this distinct subject-to-key binding to a Resource Server.  Existing proof-of-possession mechanisms, such as DPoP <xref target="RFC9449"/>, bind an Access Token to a key held by the Client presenting the token; they do not convey a separate key used by the Subject to sign application-layer authorization evidence.</t>
      <t>This specification defines a <tt>subject_keys</tt> parameter.  Its value is a JSON Web Key Set (JWK Set) <xref target="RFC7517"/> containing public signing keys that the Authorization Server has associated with the Subject identified by the token's <tt>sub</tt> value.  The parameter can be conveyed in either of the following ways:</t>
      <ul spacing="normal">
        <li>
          <t>as a top-level claim in a JWT Access Token conforming to <xref target="RFC9068"/>; or</t>
        </li>
        <li>
          <t>as a top-level member of a Token Introspection response conforming to <xref target="RFC7662"/>.</t>
        </li>
      </ul>
      <t>The Authorization Server's protection of the JWT Access Token, or the authenticated and protected introspection exchange, provides integrity and authenticity for the Subject Key Binding.  A separately signed certificate containing the same key binding is therefore not required by this specification.</t>
      <t>The <tt>subject_keys</tt> parameter does not grant access.  Subject-Signed Authorization Evidence verified with a conveyed key can only further constrain the authority represented by the Access Token.  It cannot expand that authority.</t>
      <t>This specification defines no new authorization request parameter, token request parameter, grant type, or Rich Authorization Requests authorization-details type.  How a Subject registers or provisions a public key at the Authorization Server, and the syntax and semantics of Subject-Signed Authorization Evidence, are outside the scope of this specification.</t>
      <t>The mechanism defined by this specification extends the information associated with an OAuth Access Token.  It does not define or depend on a particular authorization grant, response type, Client type, or authorization endpoint interaction.  It can therefore be used by an OAuth deployment in which an Authorization Server issues an Access Token for a Subject and conveys token information to a Resource Server using a JWT Access Token or Token Introspection.</t>
      <t>This document replaces <tt>draft-chu-oauth-as-attested-user-cert</tt>.  The previous document defined a mechanism for requesting an Authorization Server-attested user public-key certificate using Rich Authorization Requests.  This document removes that certificate request model and instead defines an Authorization Server-protected binding between an OAuth Subject and one or more public signing keys conveyed to a Resource Server.</t>
    </section>
    <section>
      <name>Conventions and Terminology</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>
      <t>JSON member names and string values defined by this specification are case-sensitive.</t>
      <t>This specification uses the terms "Access Token", "Authorization Server", "Client", "Resource Owner", and "Resource Server" as defined by <xref target="RFC6749"/>.</t>
      <dl spacing="normal">
        <dt>Subject</dt>
        <dd>
          <t>The Resource Owner or other authorization subject identified by the <tt>sub</tt> value associated with an Access Token.  The <tt>sub</tt> value is interpreted within the namespace of the Authorization Server and the audience of the Access Token.  It is not necessarily a global identifier or a representation of a civil identity.</t>
        </dd>
        <dt>Subject Signing Key</dt>
        <dd>
          <t>An asymmetric public key that the Authorization Server has associated with the Subject and approved for verification of Subject-Signed Authorization Evidence by an intended Resource Server.</t>
        </dd>
        <dt>Subject Key Binding</dt>
        <dd>
          <t>The assertion, protected by the Authorization Server, that a Subject Signing Key is associated with the Subject identified by an Access Token for the audience and validity context of that token.</t>
        </dd>
        <dt>Subject-Signed Authorization Evidence</dt>
        <dd>
          <t>An application-layer object that is digitally signed using the private key corresponding to a Subject Signing Key and that expresses authorization constraints used by the Resource Server.  Its syntax and application-specific semantics are outside the scope of this specification.</t>
        </dd>
        <dt>Token Authority</dt>
        <dd>
          <t>The maximum authority represented by a validated Access Token, including its scopes, authorization details, audience, subject, Client binding, and any other authorization-relevant claims.</t>
        </dd>
        <dt>Evidence Authority</dt>
        <dd>
          <t>The maximum authority permitted by validated Subject-Signed Authorization Evidence under the applicable evidence profile.</t>
        </dd>
      </dl>
    </section>
    <section>
      <name>Applicability and Scope</name>
      <section>
        <name>Applicability</name>
        <t>This specification is applicable when all of the following conditions hold:</t>
        <ul spacing="normal">
          <li>
            <t>an Authorization Server can establish a trusted binding between a Subject and a public signing key;</t>
          </li>
          <li>
            <t>an Access Token identifies that Subject to an intended Resource Server;</t>
          </li>
          <li>
            <t>the Resource Server receives Subject-Signed Authorization Evidence through an application-specific mechanism; and</t>
          </li>
          <li>
            <t>the Resource Server needs the Subject Signing Key in order to verify that evidence.</t>
          </li>
        </ul>
        <t>This specification is not needed when the only required key is held by the Client presenting the Access Token.  In that case, a proof-of-possession mechanism such as DPoP <xref target="RFC9449"/> or mutual-TLS certificate-bound Access Tokens <xref target="RFC8705"/> is appropriate.</t>
        <t>This specification does not establish the real-world identity of the Subject.  The confidence that a Resource Server can place in a Subject Key Binding is limited by the Authorization Server's Subject authentication, key enrollment, account recovery, and key-management processes.</t>
      </section>
      <section>
        <name>Scope</name>
        <t>This specification standardizes only the conveyance and processing of a Subject Key Binding between an Authorization Server and a Resource Server.</t>
        <t>This specification does not define:</t>
        <ul spacing="normal">
          <li>
            <t>how a Subject generates, stores, or protects a signing key;</t>
          </li>
          <li>
            <t>a wire protocol for key enrollment, update, recovery, suspension, or revocation;</t>
          </li>
          <li>
            <t>the syntax of Subject-Signed Authorization Evidence;</t>
          </li>
          <li>
            <t>how a Client obtains Subject-Signed Authorization Evidence;</t>
          </li>
          <li>
            <t>a new source of OAuth authority;</t>
          </li>
          <li>
            <t>a replacement for Access Token validation;</t>
          </li>
          <li>
            <t>a mechanism for Client authentication; or</t>
          </li>
          <li>
            <t>a mechanism for sender-constraining an Access Token.</t>
          </li>
        </ul>
        <t>A specification or deployment profile that uses this specification <bcp14>MUST</bcp14> define the syntax and validation rules for its Subject-Signed Authorization Evidence, including the requirements in <xref target="evidence-profile-requirements"/>.</t>
      </section>
    </section>
    <section>
      <name>Protocol Overview</name>
      <t>A typical deployment consists of the following steps:</t>
      <artwork type="ascii-art"><![CDATA[ Subject             Client              AS                 RS
    |                  |                  |                  |
    | (1) Establish Subject Key Binding   |                  |
    |------------------------------------>|                  |
    |                  |                  |                  |
    |                  | (2) OAuth Token Request             |
    |                  |----------------->|                  |
    |                  | (3) Access Token |                  |
    |                  |<-----------------|                  |
    |                  |                  |                  |
    | (4) Subject-Signed Authorization Evidence              |
    |----------------->|                  |                  |
    |                  |                  |                  |
    |                  | (5) Access Token + Evidence         |
    |                  |------------------------------------>|
    |                  |                  |                  |
    |                  |                  | (6) Introspection|
    |                  |                  |<-----------------|
    |                  |                  | subject_keys     |
    |                  |                  |----------------->|
    |                  |                  |                  |
    |                  |                  |                  | (7) Validate,
    |                  |                  |                  |     verify, and
    |                  |                  |                  |     authorize]]></artwork>
      <ol type="1" spacing="normal">
        <li>
          <t>The Subject and the Authorization Server establish a Subject Key Binding.  The wire protocol for this step is out of scope, but the requirements in <xref target="establishing-binding"/> apply.</t>
        </li>
        <li>
          <t>The Client requests an Access Token using an OAuth grant applicable to the deployment.</t>
        </li>
        <li>
          <t>The Authorization Server issues an Access Token.  It either includes <tt>subject_keys</tt> in a JWT Access Token or associates <tt>subject_keys</tt> with the Access Token for later return through Token Introspection.</t>
        </li>
        <li>
          <t>The Subject provides Subject-Signed Authorization Evidence to the Client through an application-specific mechanism.</t>
        </li>
        <li>
          <t>The Client presents the Access Token and the Subject-Signed Authorization Evidence to the Resource Server.</t>
        </li>
        <li>
          <t>When the Subject Key Binding is not carried in the Access Token, the Resource Server obtains it through Token Introspection.  A Resource Server <bcp14>MAY</bcp14> also introspect a JWT Access Token when fresher token or key-binding status is required.</t>
        </li>
        <li>
          <t>The Resource Server validates the Access Token, obtains and validates <tt>subject_keys</tt>, verifies the Subject-Signed Authorization Evidence, and applies the authorization-composition rules in <xref target="authorization-composition"/>.</t>
        </li>
      </ol>
      <t>Steps 1 and 4 are shown only to explain the provenance and use of the key.  This specification defines no messages for either step.</t>
    </section>
    <section anchor="subject-keys">
      <name>The <tt>subject_keys</tt> Parameter</name>
      <section>
        <name>Parameter Definition</name>
        <t>The <tt>subject_keys</tt> parameter conveys a Subject Key Binding.  Its value <bcp14>MUST</bcp14> be a JWK Set as defined in <xref target="RFC7517" section="5" sectionFormat="of"/>.</t>
        <t>When an Authorization Server includes <tt>subject_keys</tt> in a JWT Access Token or an active Token Introspection response, it asserts all of the following within the context of that Access Token:</t>
        <ol type="1" spacing="normal">
          <li>
            <t>Each public key in the JWK Set is associated with the Subject identified by <tt>sub</tt>.</t>
          </li>
          <li>
            <t>The Authorization Server permits the Resource Server identified by <tt>aud</tt> to use the key to verify Subject-Signed Authorization Evidence.</t>
          </li>
          <li>
            <t>The binding is valid only within the validity context of the Access Token.</t>
          </li>
          <li>
            <t>The Authorization Server selected the key from authenticated and integrity-protected state, rather than accepting it as an untrusted value supplied in the current resource request.</t>
          </li>
        </ol>
        <t>The assertion is scoped by the tuple consisting of the Authorization Server issuer, the <tt>sub</tt> value, the Access Token audience, and the Access Token validity period.  A Resource Server <bcp14>MUST NOT</bcp14> interpret the binding as a universal statement that the key identifies the same Subject at another issuer, for another audience, or outside that validity period.</t>
        <t>The presence of <tt>subject_keys</tt> does not assert that:</t>
        <ul spacing="normal">
          <li>
            <t>the Subject has a particular civil, legal, or organizational identity;</t>
          </li>
          <li>
            <t>the Client possesses the corresponding private key;</t>
          </li>
          <li>
            <t>the Subject is currently present;</t>
          </li>
          <li>
            <t>a particular item of Subject-Signed Authorization Evidence is fresh or non-replayed;</t>
          </li>
          <li>
            <t>the key is suitable for authentication or signing in another protocol; or</t>
          </li>
          <li>
            <t>the Subject-Signed Authorization Evidence grants authority beyond the Access Token.</t>
          </li>
        </ul>
        <t>The <tt>iss</tt>, <tt>sub</tt>, <tt>aud</tt>, and <tt>exp</tt> claim names are defined by <xref target="RFC7519"/>.  The <tt>subject_keys</tt> parameter <bcp14>MUST NOT</bcp14> be present unless the token information also contains all four values.  When <tt>nbf</tt> or <tt>iat</tt> is present, it also constrains the validity context of the binding.</t>
        <t>An Authorization Server <bcp14>MUST NOT</bcp14> include <tt>subject_keys</tt> in an Access Token that represents only a Client unless the <tt>sub</tt> value unambiguously identifies the same entity to which the conveyed key is bound and a deployment profile explicitly defines that use.  In ordinary Client Credentials Grant deployments, <tt>subject_keys</tt> <bcp14>MUST</bcp14> be omitted.</t>
      </section>
      <section anchor="jwk-requirements">
        <name>JWK Set Requirements</name>
        <t>The <tt>subject_keys</tt> JWK Set <bcp14>MUST</bcp14> contain at least one key.  The JWK Set object and each JWK <bcp14>MUST NOT</bcp14> contain duplicate JSON member names.  Each JWK in the set <bcp14>MUST</bcp14> satisfy all of the following requirements:</t>
        <ul spacing="normal">
          <li>
            <t>It <bcp14>MUST</bcp14> represent an asymmetric public key.</t>
          </li>
          <li>
            <t>It <bcp14>MUST</bcp14> contain all public-key parameters required for local signature verification.</t>
          </li>
          <li>
            <t>It <bcp14>MUST NOT</bcp14> contain a symmetric key or any private-key parameter.</t>
          </li>
          <li>
            <t>It <bcp14>MUST</bcp14> contain a <tt>kid</tt> member.  The <tt>kid</tt> value <bcp14>MUST</bcp14> be unique within the JWK Set.</t>
          </li>
          <li>
            <t>The Authorization Server <bcp14>MUST NOT</bcp14> reassign a <tt>kid</tt> value to different key material within the same issuer, <tt>sub</tt>, and audience context.</t>
          </li>
          <li>
            <t>The <tt>kid</tt> value <bcp14>SHOULD</bcp14> be the base64url-encoded SHA-256 JWK Thumbprint of the public key computed according to <xref target="RFC7638"/>.  When another identifier is used, the Authorization Server <bcp14>MUST</bcp14> ensure that it is collision resistant within its key-binding namespace.</t>
          </li>
          <li>
            <t>If the <tt>use</tt> member is present, its value <bcp14>MUST</bcp14> be <tt>sig</tt>.</t>
          </li>
          <li>
            <t>If the <tt>key_ops</tt> member is present, its value <bcp14>MUST</bcp14> be an array containing exactly the single value <tt>verify</tt>.</t>
          </li>
          <li>
            <t>If the <tt>alg</tt> member is present, it <bcp14>MUST</bcp14> identify an asymmetric digital-signature algorithm registered in <xref target="IANA.JOSE.ALGS"/>.  The value <tt>none</tt> and algorithms based on a shared secret <bcp14>MUST NOT</bcp14> be used.</t>
          </li>
          <li>
            <t>The <tt>x5u</tt> member <bcp14>MUST NOT</bcp14> be present.  A Resource Server <bcp14>MUST NOT</bcp14> dereference any URI found in a JWK in order to obtain key material.</t>
          </li>
        </ul>
        <t>An Authorization Server <bcp14>SHOULD</bcp14> include only the key or keys needed by the intended Resource Server.  It <bcp14>SHOULD NOT</bcp14> include every key associated with the Subject.  Multiple keys are permitted to support controlled rotation or multiple evidence-signature algorithms, but excessive key sets increase token size, processing cost, and linkability.</t>
        <t>An Authorization Server <bcp14>SHOULD NOT</bcp14> include an <tt>x5c</tt> certificate chain.  If <tt>x5c</tt> is included, the Resource Server <bcp14>MUST</bcp14> verify that the certificate public key is identical to the public key represented directly by the JWK.  The Resource Server <bcp14>MUST NOT</bcp14> infer Subject identity, key purpose, or additional authority from the certificate unless a separate profile explicitly defines those semantics and its validation rules.</t>
        <t>The trust in a key conveyed by this specification derives from the Authorization Server's protection of the Subject Key Binding, not merely from possession of the public key or from metadata contained in the JWK.</t>
      </section>
      <section>
        <name>Example Parameter Value</name>
        <t>The following is a non-normative example of a <tt>subject_keys</tt> value.  The <tt>kid</tt> is the SHA-256 JWK Thumbprint of the illustrated public key.</t>
        <sourcecode type="json"><![CDATA[{
  "keys": [
    {
      "kty": "EC",
      "crv": "P-256",
      "x": "_08TJUimHSY1JnPxVMUZrGJKYczKhlpE7B8OPa7dUrI",
      "y": "_uep1jw-96U_vuqidgynBdM1I0p2GyflCIcoTH2xw6w",
      "kid": "W2SzHiKALVGwe34ECUSz3kGWHpFCWMt1Z8k_pFuk3TI",
      "use": "sig",
      "key_ops": ["verify"],
      "alg": "ES256"
    }
  ]
}]]></sourcecode>
      </section>
    </section>
    <section>
      <name>Conveying Subject Keys</name>
      <section anchor="jwt-conveyance">
        <name>JWT Access Tokens</name>
        <t>When a Subject Key Binding is conveyed in a JWT Access Token, the Authorization Server <bcp14>MUST</bcp14> include <tt>subject_keys</tt> as a top-level claim in a JWT Access Token conforming to <xref target="RFC9068"/>.</t>
        <t>The Resource Server <bcp14>MUST</bcp14> validate the JWT Access Token in accordance with <xref target="RFC9068"/>, <xref target="RFC8725"/>, and the security requirements applicable to its deployment before trusting <tt>subject_keys</tt>.  In particular, it <bcp14>MUST</bcp14> validate the token type, signature, issuer, audience, and time-based claims using keys and algorithms configured for the Authorization Server.</t>
        <t>The following is a non-normative example of a decoded JWT Access Token claims set:</t>
        <sourcecode type="json"><![CDATA[{
  "iss": "https://as.example.com",
  "sub": "8f7d3b1e-4c02-4fa7-a4e8-53a58f8e6729",
  "aud": "https://rs.example.com",
  "client_id": "s6BhdRkqt3",
  "iat": 1785283200,
  "exp": 1785283500,
  "scope": "orders:create orders:read",
  "subject_keys": {
    "keys": [
      {
        "kty": "EC",
        "crv": "P-256",
        "x": "_08TJUimHSY1JnPxVMUZrGJKYczKhlpE7B8OPa7dUrI",
        "y": "_uep1jw-96U_vuqidgynBdM1I0p2GyflCIcoTH2xw6w",
        "kid": "W2SzHiKALVGwe34ECUSz3kGWHpFCWMt1Z8k_pFuk3TI",
        "use": "sig",
        "key_ops": ["verify"],
        "alg": "ES256"
      }
    ]
  }
}]]></sourcecode>
        <t>When a JWT Access Token has more than one audience, the Authorization Server <bcp14>MUST NOT</bcp14> include a Subject Signing Key unless every audience receiving the token is authorized to receive the same Subject Key Binding.  Authorization Servers <bcp14>SHOULD</bcp14> issue audience-restricted Access Tokens and <bcp14>SHOULD</bcp14> use Resource Indicators <xref target="RFC8707"/> or an equivalent mechanism to identify the intended Resource Server.</t>
      </section>
      <section anchor="introspection-conveyance">
        <name>Token Introspection</name>
        <t>When a Subject Key Binding is conveyed through Token Introspection, the Authorization Server <bcp14>MUST</bcp14> include <tt>subject_keys</tt> as a top-level member of an active introspection response as defined by <xref target="RFC7662"/>.</t>
        <t>An introspection response containing <tt>subject_keys</tt> <bcp14>MUST</bcp14> also contain <tt>iss</tt>, <tt>sub</tt>, <tt>aud</tt>, and <tt>exp</tt>.  The <tt>iss</tt> value <bcp14>MUST</bcp14> identify the Authorization Server responsible for the Access Token.  The <tt>aud</tt> value <bcp14>MUST</bcp14> identify the Resource Server or Resource Servers for which the Access Token was issued.</t>
        <t>The Authorization Server <bcp14>MUST</bcp14> authenticate and authorize the introspection caller before returning <tt>subject_keys</tt>.  It <bcp14>MUST NOT</bcp14> include <tt>subject_keys</tt> in a response where <tt>active</tt> is <tt>false</tt>.  It <bcp14>MUST NOT</bcp14> disclose the Subject Key Binding to an introspection caller that is not authorized to receive token information for an intended audience of the Access Token.</t>
        <t>The following is a non-normative example:</t>
        <sourcecode type="json"><![CDATA[{
  "active": true,
  "iss": "https://as.example.com",
  "sub": "8f7d3b1e-4c02-4fa7-a4e8-53a58f8e6729",
  "aud": "https://rs.example.com",
  "client_id": "s6BhdRkqt3",
  "iat": 1785283200,
  "exp": 1785283500,
  "scope": "orders:create orders:read",
  "subject_keys": {
    "keys": [
      {
        "kty": "EC",
        "crv": "P-256",
        "x": "_08TJUimHSY1JnPxVMUZrGJKYczKhlpE7B8OPa7dUrI",
        "y": "_uep1jw-96U_vuqidgynBdM1I0p2GyflCIcoTH2xw6w",
        "kid": "W2SzHiKALVGwe34ECUSz3kGWHpFCWMt1Z8k_pFuk3TI",
        "use": "sig",
        "key_ops": ["verify"],
        "alg": "ES256"
      }
    ]
  }
}]]></sourcecode>
        <t>An Authorization Server and Resource Server <bcp14>MAY</bcp14> use a JWT-secured introspection response as defined by <xref target="RFC9701"/>.  Whether a plain JSON response protected by the requirements of <xref target="RFC7662"/> or a JWT-secured response is used, the Resource Server <bcp14>MUST</bcp14> establish that the response came from the Authorization Server responsible for the Access Token.</t>
      </section>
      <section anchor="multiple-conveyance">
        <name>Use of Multiple Conveyance Mechanisms</name>
        <t>An Authorization Server <bcp14>MAY</bcp14> convey <tt>subject_keys</tt> in a JWT Access Token, through Token Introspection, or through both mechanisms.</t>
        <t>When a Resource Server introspects a JWT Access Token for current status, the active introspection response is authoritative for that request.  The Resource Server <bcp14>MUST NOT</bcp14> combine the <tt>subject_keys</tt> JWK Set from the JWT Access Token with a JWK Set returned by introspection.  If the operation requires a Subject Key Binding and the active introspection response omits <tt>subject_keys</tt>, the Resource Server <bcp14>MUST</bcp14> treat no current Subject Key Binding as available, even if the JWT Access Token contains the claim.</t>
        <t>If both sources contain a key with the same <tt>kid</tt> but different cryptographic key material, the Resource Server <bcp14>MUST</bcp14> reject the request and <bcp14>SHOULD</bcp14> record a security event.  Comparison <bcp14>MUST</bcp14> be based on the cryptographic key material, such as an RFC 7638 JWK Thumbprint, and not on JSON serialization or member order.</t>
      </section>
      <section>
        <name>Confidentiality</name>
        <t>A signed but unencrypted JWT Access Token can expose <tt>subject_keys</tt> to the Client and to any party that obtains the token.  When that disclosure is undesirable, the Authorization Server <bcp14>SHOULD</bcp14> use an opaque Access Token with protected Token Introspection, an encrypted JWT Access Token, or another deployment-specific confidentiality mechanism.</t>
        <t>The selected conveyance mechanism <bcp14>MUST</bcp14> preserve the integrity and the issuer, subject, audience, and validity semantics defined by this specification.</t>
      </section>
    </section>
    <section>
      <name>Authorization Server Processing</name>
      <section anchor="establishing-binding">
        <name>Establishing a Subject Key Binding</name>
        <t>The wire protocol by which a Subject Signing Key is enrolled or provisioned is out of scope.  Before conveying a key under this specification, however, the Authorization Server <bcp14>MUST</bcp14> establish an authenticated binding between the key and the Subject.</t>
        <t>The binding process <bcp14>MUST</bcp14> satisfy the following requirements:</t>
        <ol type="1" spacing="normal">
          <li>
            <t>The Authorization Server <bcp14>MUST</bcp14> authenticate the Subject, or rely on an equivalent trusted administrative provisioning process, at an assurance level appropriate for the protected resource.</t>
          </li>
          <li>
            <t>The Authorization Server <bcp14>MUST</bcp14> verify control of the private key corresponding to the enrolled public key, unless an equivalent trusted provisioning process has already established that control.  Merely receiving a public key is not proof of private-key control.</t>
          </li>
          <li>
            <t>A proof-of-control ceremony <bcp14>SHOULD</bcp14> use a fresh challenge bound to the Authorization Server, the authenticated Subject account, and the intended key purpose, so that a proof generated for another account or protocol cannot be replayed to establish the binding.</t>
          </li>
          <li>
            <t>The Authorization Server <bcp14>MUST</bcp14> protect key enrollment, replacement, recovery, suspension, and revocation operations against unauthorized Clients, session compromise, and account-recovery abuse.</t>
          </li>
          <li>
            <t>Possession of an ordinary Access Token or Refresh Token by a Client <bcp14>MUST NOT</bcp14>, by itself, authorize creation, replacement, or reactivation of a Subject Signing Key.  A key-management operation requires separate authorization appropriate to its security impact.</t>
          </li>
          <li>
            <t>The Authorization Server <bcp14>MUST</bcp14> maintain the lifecycle state of the binding, including whether the key is active, replaced, expired, suspended, or revoked.</t>
          </li>
          <li>
            <t>The Authorization Server <bcp14>MUST</bcp14> associate the binding with the Resource Server audiences and key purposes for which disclosure and use are permitted.</t>
          </li>
          <li>
            <t>The Authorization Server <bcp14>MUST</bcp14> apply its disclosure policy before releasing the key to a Resource Server and, where required by the deployment, obtain Subject consent for that disclosure.</t>
          </li>
        </ol>
        <t>An Authorization Server <bcp14>SHOULD</bcp14> support audience-specific or pairwise Subject Signing Keys.  A key enrolled for one Resource Server <bcp14>SHOULD NOT</bcp14> be disclosed to another Resource Server unless the Subject and Authorization Server have authorized that reuse.</t>
      </section>
      <section>
        <name>Selecting Keys for an Access Token</name>
        <t>When issuing or introspecting an Access Token, the Authorization Server <bcp14>MUST</bcp14> perform the following processing before including <tt>subject_keys</tt>:</t>
        <ol type="1" spacing="normal">
          <li>
            <t>Determine the Subject represented by the grant and the <tt>sub</tt> value that will be exposed to the intended Resource Server.</t>
          </li>
          <li>
            <t>Determine the intended Resource Server audience.</t>
          </li>
          <li>
            <t>Retrieve only active Subject Signing Keys bound to that Subject and authorized for that audience and intended use.</t>
          </li>
          <li>
            <t>Confirm that each key satisfies <xref target="jwk-requirements"/>.</t>
          </li>
          <li>
            <t>Ensure that the Access Token expiration time does not exceed any internal expiration or authorization limit on the selected Subject Key Binding.</t>
          </li>
          <li>
            <t>Construct <tt>subject_keys</tt> only from trusted Authorization Server state.</t>
          </li>
        </ol>
        <t>The Authorization Server <bcp14>MUST NOT</bcp14> copy a public key supplied by the Client in the current authorization request, token request, or resource request into <tt>subject_keys</tt> without independently establishing that key through the binding process described in <xref target="establishing-binding"/>.</t>
        <t>This specification defines no Client parameter for requesting a particular <tt>subject_keys</tt> value.  Inclusion of the parameter is determined by Authorization Server policy, the intended Resource Server, the grant, and any applicable Subject authorization.  A deployment <bcp14>MAY</bcp14> use scopes, Resource Indicators, Rich Authorization Requests, or other policy inputs to determine that a Resource Server requires a Subject Key Binding, but those inputs do not change the syntax or semantics of <tt>subject_keys</tt>.</t>
        <t>If no valid Subject Signing Key is available, the Authorization Server <bcp14>MUST</bcp14> omit <tt>subject_keys</tt> or fail Access Token issuance according to deployment policy.  It <bcp14>MUST NOT</bcp14> emit an empty JWK Set or an unverified key.</t>
      </section>
      <section>
        <name>Rotation, Revocation, and Freshness</name>
        <t>The Authorization Server <bcp14>MUST</bcp14> re-evaluate the Subject Key Binding whenever it issues a new Access Token or produces an active introspection response.</t>
        <t>The Authorization Server <bcp14>MUST</bcp14> stop including a revoked, suspended, or expired key in newly issued Access Tokens and active introspection responses.</t>
        <t>Revoking a key does not modify a previously issued self-contained JWT Access Token.  Deployments requiring prompt revocation <bcp14>SHOULD</bcp14> use short-lived JWT Access Tokens, Token Introspection, or both.  A Resource Server <bcp14>MAY</bcp14> introspect a JWT Access Token before a high-risk operation to obtain fresher status information.</t>
        <t>During controlled rotation, the Authorization Server <bcp14>MAY</bcp14> include both an old and a new public key for a limited overlap period.  Each key <bcp14>MUST</bcp14> have a distinct <tt>kid</tt>.  The overlap period <bcp14>SHOULD</bcp14> be no longer than required to process in-flight Subject-Signed Authorization Evidence and complete deployment migration.</t>
        <t>Whether evidence signed before key revocation or rotation remains acceptable is an application-specific decision.  An evidence profile that permits such evidence <bcp14>MUST</bcp14> define how the Resource Server establishes the signing time and the key status applicable at that time.</t>
      </section>
    </section>
    <section>
      <name>Resource Server Processing</name>
      <section>
        <name>Access Token and Key-Binding Validation</name>
        <t>Before using <tt>subject_keys</tt>, the Resource Server <bcp14>MUST</bcp14> validate the Access Token using the rules applicable to its token format and deployment.  Validation of a JWT Access Token <bcp14>MUST</bcp14> include the processing required by <xref target="RFC9068"/> and <xref target="RFC8725"/>.  Validation of an opaque Access Token <bcp14>MUST</bcp14> use an authorized Token Introspection exchange or another method agreed with the Authorization Server.</t>
        <t>The Resource Server <bcp14>MUST</bcp14> perform at least the following checks:</t>
        <ol type="1" spacing="normal">
          <li>
            <t>Establish the Authorization Server responsible for the Access Token.</t>
          </li>
          <li>
            <t>Verify that the Access Token is active, has not expired, and, when an <tt>nbf</tt> value is present, is not used before that time.</t>
          </li>
          <li>
            <t>Verify that the Resource Server is an intended audience of the Access Token.</t>
          </li>
          <li>
            <t>Verify that <tt>sub</tt> is present and interpret it only within the validated issuer and audience context.  When the operation targets a Subject-specific resource, verify that <tt>sub</tt> is consistent with that resource.</t>
          </li>
          <li>
            <t>Obtain <tt>subject_keys</tt> from the validated JWT Access Token or from an active introspection response.</t>
          </li>
          <li>
            <t>Validate the JWK Set and each candidate JWK according to <xref target="jwk-requirements"/>.</t>
          </li>
          <li>
            <t>Apply local limits on the encoded size of <tt>subject_keys</tt>, the number of keys, accepted key types, and accepted algorithms.</t>
          </li>
        </ol>
        <t>If Resource Server policy requires a Subject Key Binding for an operation and no valid <tt>subject_keys</tt> value is available, the Resource Server <bcp14>MUST NOT</bcp14> perform that operation.</t>
        <t>The Resource Server <bcp14>MUST NOT</bcp14> accept a Subject Signing Key received from the Client, from the Subject-Signed Authorization Evidence itself, or from another untrusted application-layer field as a substitute for <tt>subject_keys</tt>.  An evidence object <bcp14>MAY</bcp14> carry a <tt>kid</tt> or thumbprint for selection, but the selected public key <bcp14>MUST</bcp14> come from the Authorization Server-protected binding.</t>
      </section>
      <section>
        <name>Key Selection and Signature Verification</name>
        <t>The applicable evidence profile <bcp14>MUST</bcp14> provide an integrity-protected key identifier or an otherwise unambiguous rule for selecting a Subject Signing Key.</t>
        <t>When <tt>subject_keys</tt> contains more than one key, the Resource Server <bcp14>MUST</bcp14> select exactly one key before verifying the evidence.  It <bcp14>MUST NOT</bcp14> try every key until a signature succeeds unless the evidence profile explicitly defines that behavior and bounds its resource cost.</t>
        <t>The Resource Server <bcp14>MUST</bcp14> reject the evidence if:</t>
        <ul spacing="normal">
          <li>
            <t>the evidence identifies a <tt>kid</tt> that is absent from <tt>subject_keys</tt>;</t>
          </li>
          <li>
            <t>more than one key matches the selection rule;</t>
          </li>
          <li>
            <t>the selected key is not permitted by the evidence profile or local policy;</t>
          </li>
          <li>
            <t>the evidence algorithm is not permitted by the evidence profile or local policy;</t>
          </li>
          <li>
            <t>an <tt>alg</tt> value in the JWK is inconsistent with the evidence signature algorithm; or</t>
          </li>
          <li>
            <t>signature verification fails.</t>
          </li>
        </ul>
        <t>A valid signature proves only that the evidence was produced using the private key corresponding to a Subject Signing Key.  It does not, by itself, establish that the request is fresh, that the Client is an authorized delegate, or that the requested operation is authorized.</t>
      </section>
      <section anchor="evidence-profile-requirements">
        <name>Subject-Signed Authorization Evidence Profile Requirements</name>
        <t>A specification or deployment profile using Subject-Signed Authorization Evidence <bcp14>MUST</bcp14> define all of the following:</t>
        <ul spacing="normal">
          <li>
            <t>the evidence syntax, media type or equivalent format identifier, and digital-signature structure;</t>
          </li>
          <li>
            <t>the cryptographic algorithms and key types that Resource Servers accept;</t>
          </li>
          <li>
            <t>how an integrity-protected key identifier selects a key from <tt>subject_keys</tt>;</t>
          </li>
          <li>
            <t>how the evidence is restricted to an intended Resource Server, resource, or operation;</t>
          </li>
          <li>
            <t>how the evidence identifies or is bound to the intended Client, delegate, or presenter when such a binding is required;</t>
          </li>
          <li>
            <t>how the evidence is bound to the relevant request parameters or transaction data;</t>
          </li>
          <li>
            <t>its issuance time, expiration, and acceptable clock skew;</t>
          </li>
          <li>
            <t>nonce, unique identifier, or other replay-prevention requirements;</t>
          </li>
          <li>
            <t>canonicalization and comparison rules for authorization values;</t>
          </li>
          <li>
            <t>how Evidence Authority is derived from the evidence;</t>
          </li>
          <li>
            <t>how unknown, omitted, duplicate, or conflicting fields are handled; and</t>
          </li>
          <li>
            <t>the application error returned when evidence validation fails.</t>
          </li>
        </ul>
        <t>A profile <bcp14>MUST</bcp14> use fail-closed processing.  An omitted or unrecognized authorization constraint <bcp14>MUST NOT</bcp14> be interpreted as granting additional authority unless the profile explicitly and unambiguously defines that interpretation.</t>
      </section>
      <section anchor="authorization-composition">
        <name>Authorization Composition</name>
        <t>The Resource Server <bcp14>MUST</bcp14> determine the effective authority of a request by applying all applicable authorization constraints.  At a minimum:</t>
        <artwork type="ascii-art"><![CDATA[Effective Authority =
    Token Authority
  INTERSECT Evidence Authority
  INTERSECT Resource Server Local Policy]]></artwork>
        <t>The Resource Server <bcp14>MUST</bcp14> perform the requested operation only when the complete operation, including all security-relevant parameters, is permitted by each of these three inputs.</t>
        <t>Subject-Signed Authorization Evidence <bcp14>MUST NOT</bcp14> be treated as an independent grant that can add a scope, resource, action, amount, recipient, time period, delegation right, or other permission absent from the validated Token Authority.  Likewise, the Access Token does not override a narrower constraint in valid Subject-Signed Authorization Evidence.</t>
        <t>When constraints are expressed using different vocabularies or data models, the Resource Server or an explicitly trusted policy component <bcp14>MUST</bcp14> perform a deterministic, fail-closed mapping.  If the mapping is ambiguous, incomplete, or unsupported, the Resource Server <bcp14>MUST</bcp14> reject the operation.</t>
      </section>
      <section>
        <name>Client and Presenter Binding</name>
        <t>The Subject Signing Key is distinct from a Client proof-of-possession key.  If the Access Token is sender-constrained, the Resource Server <bcp14>MUST</bcp14> validate the applicable sender-constraining mechanism independently of the Subject-Signed Authorization Evidence.</t>
        <t>When the Subject-Signed Authorization Evidence identifies an intended Client, delegate, or presenter, the Resource Server <bcp14>MUST</bcp14> compare that identifier with the validated Access Token and request context.  For example, a profile can require a value in the evidence to match <tt>client_id</tt>, an actor claim, or a proof-of-possession key thumbprint associated with the Access Token.</t>
        <t>The Resource Server <bcp14>MUST</bcp14> reject a request when a required Client or presenter binding does not match.  Successful verification of the Subject's signature does not repair or replace a failed Client authentication or sender-constraining check.</t>
      </section>
      <section>
        <name>Caching</name>
        <t>A Resource Server <bcp14>MAY</bcp14> cache public key material obtained through this specification, but it <bcp14>MUST NOT</bcp14> treat a cached key as a current Subject Key Binding for a new Access Token unless that new token independently conveys, or its introspection response independently returns, the same binding.</t>
        <t>A cached binding <bcp14>MUST</bcp14> be scoped at least by Authorization Server issuer, <tt>sub</tt>, audience, and <tt>kid</tt>.  Its use <bcp14>MUST</bcp14> be bounded by the expiration of the Access Token or introspection result from which it was obtained and by any shorter local freshness limit.</t>
        <t>A Resource Server <bcp14>MUST NOT</bcp14> use a key cached for one issuer, Subject, or audience to verify evidence in another context merely because the <tt>kid</tt> or public key material is the same.</t>
      </section>
    </section>
    <section>
      <name>Relationship to Existing OAuth and JWT Parameters</name>
      <section>
        <name>The <tt>cnf</tt> Claim</name>
        <t>The <tt>cnf</tt> claim defined by <xref target="RFC7800"/> identifies a proof-of-possession key held by the presenter of a JWT.  In OAuth deployments, it is commonly used to sender-constrain an Access Token to the Client presenting that token.</t>
        <t>The <tt>subject_keys</tt> parameter has different semantics.  It identifies a public signing key associated with the Subject for verification of a separate application-layer authorization artifact.  The Client is not assumed to possess the corresponding private key.</t>
        <t>An Access Token <bcp14>MAY</bcp14> contain both <tt>cnf</tt> and <tt>subject_keys</tt>.  A Resource Server <bcp14>MUST</bcp14> process each according to its own semantics and <bcp14>MUST NOT</bcp14> infer one binding from the other.  The use of the same key for both purposes is <bcp14>NOT RECOMMENDED</bcp14> because it weakens key separation and can create cross-protocol confusion.</t>
      </section>
      <section>
        <name>Rich Authorization Requests</name>
        <t>Rich Authorization Requests <xref target="RFC9396"/> allow a Client to express fine-grained authorization requirements using the <tt>authorization_details</tt> parameter.  Such authorization details describe requested or granted authorization.  They are not a container for Subject public-key metadata.</t>
        <t>A deployment <bcp14>MAY</bcp14> use <tt>authorization_details</tt> to express Token Authority and <bcp14>MAY</bcp14> use <tt>subject_keys</tt> in the resulting Access Token or introspection response.  The Resource Server <bcp14>MUST</bcp14> process the two independently and apply <xref target="authorization-composition"/>.  The <tt>subject_keys</tt> parameter defined by this specification <bcp14>MUST NOT</bcp14> be nested in <tt>authorization_details</tt>; it is conveyed only as the top-level JWT claim or introspection response member defined in <xref target="jwt-conveyance"/> and <xref target="introspection-conveyance"/>.</t>
      </section>
      <section>
        <name>The <tt>sub_jwk</tt> Claim</name>
        <t>The <tt>sub_jwk</tt> claim is registered in <xref target="IANA.JWT.Claims"/> for the public key used to verify the signature of a particular form of ID Token.  This specification does not change those semantics and does not repurpose <tt>sub_jwk</tt> for Access Tokens or Token Introspection responses.</t>
      </section>
    </section>
    <section>
      <name>Error Handling</name>
      <t>This specification defines no new OAuth error code.</t>
      <t>A malformed or invalid <tt>subject_keys</tt> value in a JWT Access Token makes the token unusable for an operation that relies on this specification.  When the Bearer authentication scheme is used, the Resource Server <bcp14>SHOULD</bcp14> use the <tt>invalid_token</tt> error defined by <xref target="RFC6750"/> if the token cannot be accepted.</t>
      <t>When an otherwise valid Access Token lacks a Subject Key Binding required by a particular resource operation, the Resource Server <bcp14>MAY</bcp14> use <tt>insufficient_scope</tt> as defined by <xref target="RFC6750"/> when that error accurately describes the failure.  Otherwise, it <bcp14>SHOULD</bcp14> use an application-specific error that does not incorrectly imply that the Access Token itself is malformed.</t>
      <t>Failure to validate Subject-Signed Authorization Evidence <bcp14>SHOULD</bcp14> be reported using an application-specific error defined by the evidence profile.  Error responses <bcp14>SHOULD</bcp14> avoid revealing whether a particular Subject has an enrolled key or which keys are associated with that Subject, except when such disclosure is authorized and operationally necessary.</t>
    </section>
    <section>
      <name>Security Considerations</name>
      <t>OAuth deployments implementing this specification <bcp14>MUST</bcp14> follow the security guidance in <xref target="RFC9700"/> in addition to the requirements below.</t>
      <section>
        <name>Key Substitution During Enrollment</name>
        <t>The primary threat to a Subject Key Binding is substitution of an attacker's public key for the Subject's key.  If an attacker can create or replace the binding, the attacker can produce evidence that appears to have been signed by the Subject.</t>
        <t>Authorization Servers <bcp14>MUST</bcp14> apply the authenticated binding and proof-of-control requirements in <xref target="establishing-binding"/>.  Account recovery and key recovery are security-critical operations and <bcp14>MUST</bcp14> receive protections comparable to, or stronger than, initial enrollment.  Implementations <bcp14>SHOULD</bcp14> notify the Subject when a Subject Signing Key is added, replaced, suspended, reactivated, or revoked.</t>
      </section>
      <section>
        <name>Issuer, Subject, Audience, and Key-Identifier Confusion</name>
        <t>A Subject Signing Key is not identified by <tt>kid</tt> alone.  Different Authorization Servers, Subjects, or audiences can legitimately use the same <tt>kid</tt>.  A Resource Server <bcp14>MUST</bcp14> namespace a Subject Key Binding by the Authorization Server issuer, <tt>sub</tt>, audience, and <tt>kid</tt>.</t>
        <t>The Resource Server <bcp14>MUST</bcp14> validate that it is an intended audience of the Access Token before using <tt>subject_keys</tt>.  Failure to validate the audience can disclose a key to an unintended Resource Server or allow evidence created for one service to be accepted by another.</t>
        <t>Subject identifiers can be pairwise, sector-specific, or otherwise audience-dependent.  A Resource Server <bcp14>MUST NOT</bcp14> equate Subjects across issuers or audiences solely because the same public key or <tt>kid</tt> appears in multiple tokens.</t>
      </section>
      <section>
        <name>Algorithm and JWK Validation</name>
        <t>A malicious or malformed JWK can trigger algorithm confusion, parser inconsistencies, remote retrieval, or excessive resource consumption.  Resource Servers <bcp14>MUST</bcp14> enforce <xref target="jwk-requirements"/>, maintain an explicit allowlist of acceptable signature algorithms and key types, and follow the JWT and JOSE validation guidance in <xref target="RFC8725"/> where applicable.</t>
        <t>The algorithm declared by Subject-Signed Authorization Evidence is attacker-controlled input until the evidence is verified.  A Resource Server <bcp14>MUST NOT</bcp14> accept an algorithm merely because it appears in the evidence or the JWK.  The algorithm <bcp14>MUST</bcp14> also be permitted by the evidence profile and local policy.</t>
        <t>A Resource Server <bcp14>MUST NOT</bcp14> dereference <tt>x5u</tt> or another URI obtained from an untrusted key object.  This avoids server-side request forgery and key substitution through attacker-controlled locations.</t>
      </section>
      <section>
        <name>Stale and Revoked Keys</name>
        <t>A self-contained JWT Access Token can continue to carry a Subject Signing Key that was revoked after token issuance.  The maximum stale-key window is therefore bounded by the Access Token lifetime unless the Resource Server performs Token Introspection or another current-status check.</t>
        <t>High-risk deployments <bcp14>SHOULD</bcp14> use short-lived Access Tokens and <bcp14>SHOULD</bcp14> introspect before irreversible or high-value operations.  Authorization Servers <bcp14>SHOULD</bcp14> make revocation effective immediately in active introspection responses.</t>
        <t>A Resource Server that performs introspection <bcp14>MUST</bcp14> use the current introspection result as specified in <xref target="multiple-conveyance"/> and <bcp14>MUST NOT</bcp14> restore a revoked key by merging it from the JWT Access Token.</t>
      </section>
      <section>
        <name>Replay of Subject-Signed Authorization Evidence</name>
        <t>A valid signature does not prevent replay.  An attacker who obtains a valid Access Token and previously signed evidence might replay both unless the evidence is bound to a specific audience, request, operation, parameter set, nonce, unique identifier, or time window.</t>
        <t>Every evidence profile using this specification <bcp14>MUST</bcp14> define replay protections appropriate to its operation.  Resource Servers <bcp14>MUST</bcp14> enforce those protections.  Irreversible and high-value operations <bcp14>SHOULD</bcp14> use a fresh server-provided nonce or a cryptographic binding to the exact request.</t>
      </section>
      <section>
        <name>Token Theft and Client Binding</name>
        <t>The Subject Key Binding does not sender-constrain the Access Token and does not authenticate the Client presenting it.  Bearer-token theft remains possible when bearer Access Tokens are used.  Deployments <bcp14>SHOULD</bcp14> use DPoP <xref target="RFC9449"/>, mutual-TLS certificate-bound Access Tokens <xref target="RFC8705"/>, or another sender-constraining mechanism where appropriate.</t>
        <t>When Subject-Signed Authorization Evidence identifies an intended Client, delegate, or proof-of-possession key, the Resource Server <bcp14>MUST</bcp14> compare that identity or key with the validated Access Token and request context.  Otherwise, a different Client that obtains both artifacts might be able to replay them.</t>
      </section>
      <section>
        <name>Authorization Inflation</name>
        <t>Subject-Signed Authorization Evidence can contain permissions or parameters that are broader than those in the Access Token.  Accepting that evidence as an independent grant would allow it to inflate the Client's OAuth authority.</t>
        <t>Resource Servers <bcp14>MUST</bcp14> apply <xref target="authorization-composition"/>.  Subject-Signed Authorization Evidence can narrow, but cannot enlarge, the Token Authority or bypass Resource Server policy.</t>
      </section>
      <section>
        <name>Key Separation and Cross-Protocol Use</name>
        <t>Reusing one Subject key for account authentication, Subject-Signed Authorization Evidence, Client proof of possession, and unrelated protocols increases the impact of compromise and creates cross-protocol risks.</t>
        <t>Subjects and Authorization Servers <bcp14>SHOULD</bcp14> use a dedicated key for Subject-Signed Authorization Evidence.  Evidence profiles <bcp14>SHOULD</bcp14> define a distinct media type, signature context, or domain-separation value so that a signature created for one protocol cannot be interpreted as valid evidence in another.</t>
        <t>A Resource Server <bcp14>MUST NOT</bcp14> use a Subject Signing Key for another purpose unless a separate specification explicitly authorizes that use.</t>
      </section>
      <section>
        <name>Authorization Server Compromise</name>
        <t>The Resource Server trusts the Authorization Server to establish the correct Subject Key Binding.  Compromise of the Authorization Server or its key-binding database can cause arbitrary keys to be associated with Subjects.  This specification does not reduce that trust dependency.</t>
        <t>Authorization Servers <bcp14>SHOULD</bcp14> protect key-binding records with strong access controls, integrity protection, change monitoring, and recovery procedures.  Resource Servers <bcp14>SHOULD</bcp14> monitor unexpected key changes for high-value Subjects or operations when deployment policy permits.</t>
      </section>
      <section>
        <name>Resource Exhaustion</name>
        <t>Large JWK Sets and expensive signature algorithms can be used to consume Resource Server resources.  Authorization Servers <bcp14>SHOULD</bcp14> limit the number and encoded size of keys in <tt>subject_keys</tt>.  Resource Servers <bcp14>MUST</bcp14> enforce local size and key-count limits before performing cryptographic operations and <bcp14>SHOULD</bcp14> select a key by an integrity-protected identifier rather than attempting every key.</t>
      </section>
    </section>
    <section>
      <name>Privacy Considerations</name>
      <t>A stable public key is a correlatable identifier even when no account name is disclosed.  Reusing the same Subject Signing Key at multiple Resource Servers can allow those Resource Servers, Clients, or token observers to correlate the Subject's activity.</t>
      <t>Authorization Servers <bcp14>SHOULD</bcp14> use audience-specific or pairwise Subject Signing Keys and <bcp14>SHOULD</bcp14> align them with pairwise <tt>sub</tt> values where possible.  They <bcp14>SHOULD</bcp14> disclose only the key needed by the intended Resource Server and <bcp14>SHOULD</bcp14> avoid multi-audience Access Tokens carrying Subject Key Bindings.</t>
      <t>When <tt>subject_keys</tt> is included in a signed but unencrypted JWT Access Token, the Client can inspect the key and potentially correlate it with keys seen elsewhere.  Deployments that do not want the Client to observe the key <bcp14>SHOULD</bcp14> use opaque Access Tokens with protected Token Introspection or another confidentiality-preserving mechanism.</t>
      <t>A Subject Key Binding should contain only public key material and the minimum metadata needed for verification.  Authorization Servers <bcp14>SHOULD</bcp14> avoid embedding certificates or other structures containing names, email addresses, device identifiers, or unrelated personal data unless required by a separate deployment profile.</t>
      <t>Resource Servers and Authorization Servers <bcp14>SHOULD</bcp14> minimize logging of full public keys and Subject-Signed Authorization Evidence.  When operationally sufficient, logs <bcp14>SHOULD</bcp14> record a scoped <tt>kid</tt> or JWK Thumbprint together with the issuer and audience rather than the complete key or evidence payload.</t>
    </section>
    <section>
      <name>IANA Considerations</name>
      <section>
        <name>JSON Web Token Claims Registration</name>
        <t>This specification requests registration of the following claim in the "JSON Web Token Claims" registry maintained in <xref target="IANA.JWT.Claims"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Claim Name: <tt>subject_keys</tt></t>
          </li>
          <li>
            <t>Claim Description: JWK Set containing public signing keys associated by the issuer with the token subject for the token audience</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: <xref target="subject-keys"/> of this specification</t>
          </li>
        </ul>
      </section>
      <section>
        <name>OAuth Token Introspection Response Registration</name>
        <t>This specification requests registration of the following member in the "OAuth Token Introspection Response" registry maintained in <xref target="IANA.OAuth.Params"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Name: <tt>subject_keys</tt></t>
          </li>
          <li>
            <t>Description: JWK Set containing public signing keys associated by the authorization server with the token subject for the token audience</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: <xref target="introspection-conveyance"/> of this specification</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6749.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6750.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7517.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7519.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7638.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7662.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8725.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9068.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9700.xml"/>
      <reference anchor="IANA.JOSE.ALGS" target="https://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms">
        <front>
          <title>JSON Web Signature and Encryption Algorithms</title>
          <author>
            <organization>IANA</organization>
          </author>
          <date/>
        </front>
      </reference>
      <reference anchor="IANA.JWT.Claims" target="https://www.iana.org/assignments/jwt/jwt.xhtml#claims">
        <front>
          <title>JSON Web Token Claims</title>
          <author>
            <organization>IANA</organization>
          </author>
          <date/>
        </front>
      </reference>
      <reference anchor="IANA.OAuth.Params" target="https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml">
        <front>
          <title>OAuth Parameters</title>
          <author>
            <organization>IANA</organization>
          </author>
          <date/>
        </front>
      </reference>
    </references>
    <references>
      <name>Informative References</name>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7800.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8705.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8707.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9396.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9449.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9701.xml"/>
    </references>
    <section numbered="false" toc="exclude" removeInRFC="true" anchor="document-history">
      <name>Document History</name>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Replaces <tt>draft-chu-oauth-as-attested-user-cert</tt>.</t>
        </li>
        <li>
          <t>Retitled and reframed the specification as "OAuth Subject Signing Key Binding for Resource Servers".</t>
        </li>
        <li>
          <t>Replaced the Authorization Server-attested user-certificate request model with an Authorization Server-protected Subject Key Binding conveyed in a JWT Access Token or Token Introspection response.</t>
        </li>
        <li>
          <t>Removed the Rich Authorization Requests authorization-details type and the requirement for a separately signed public-key certificate.</t>
        </li>
        <li>
          <t>Removed dependencies on a particular authorization grant, response type, Client type, and application-layer evidence format.</t>
        </li>
        <li>
          <t>Defined the <tt>subject_keys</tt> parameter as a JWK Set and distinguished Subject Signing Keys from Client proof-of-possession keys represented by <tt>cnf</tt>.</t>
        </li>
        <li>
          <t>Defined issuer, subject, audience, validity, key-enrollment, rotation, revocation, caching, Resource Server processing, and authorization-composition requirements.</t>
        </li>
        <li>
          <t>Clarified that Subject-Signed Authorization Evidence can only narrow, and cannot expand, the authority represented by an Access Token.</t>
        </li>
        <li>
          <t>Added detailed security, privacy, error-handling, and IANA considerations.</t>
        </li>
      </ul>
    </section>
  </back>
</rfc>
