<?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.17 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-sheffer-wimse-s2s-protocol-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="WIMSE S2S Auth">WIMSE Service to Service Authentication</title>
    <seriesInfo name="Internet-Draft" value="draft-sheffer-wimse-s2s-protocol-00"/>
    <author fullname="Brian Campbell">
      <organization>Ping Identity</organization>
      <address>
        <email>bcampbell@pingidentity.com</email>
      </address>
    </author>
    <author fullname="Daniel Feldman">
      <organization>Independent</organization>
      <address>
        <email>dfeldman.mn@gmail.com</email>
      </address>
    </author>
    <author fullname="Joe Salowey">
      <organization>Venafi</organization>
      <address>
        <email>joe.salowey@gmail.com</email>
      </address>
    </author>
    <author fullname="Arndt Schwenkschuster">
      <organization>Microsoft</organization>
      <address>
        <email>arndts.ietf@gmail.com</email>
      </address>
    </author>
    <author fullname="Yaron Sheffer">
      <organization>Intuit</organization>
      <address>
        <email>yaronf.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="July" day="03"/>
    <area>Applications and Real-Time</area>
    <workgroup>Workload Identity in Multi System Environments</workgroup>
    <keyword>workload</keyword>
    <keyword>identity</keyword>
    <abstract>
      <?line 60?>

<t>The WIMSE architecture defines authentication and authorization for software workloads
in a variety of runtime environments, from the most basic ones up to complex
multi-service, multi-cloud, multi-tenant deployments. This document defines the simplest, atomic unit of
this architecture: the protocol between two workloads that need to verify each other's identity
in order to communicate securely. The scope of this protocol is a single HTTP request-and-response
pair. To address the needs of different setups, we propose two protocols,
one at the application level and one that makes use of trusted TLS transport.
These two protocols are compatible, in the sense that a single call
chain can have some calls use one protocol and some use the other. Service A can call
Service B with mutual TLS authentication, while the next call from Service B to Service C
would be authenticated at the application level.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://yaronf.github.io/wimse-s2s/draft-sheffer-wimse-s2s-protocol.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-sheffer-wimse-s2s-protocol/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Workload Identity in Multi System Environments Working Group mailing list (<eref target="mailto:wimse@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/wimse/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/wimse/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/yaronf/wimse-s2s"/>.</t>
    </note>
  </front>
  <middle>
    <?line 74?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines authentication and authorization in the context of interaction between two workloads.
This is the core component of the WIMSE architecture <xref target="I-D.ietf-wimse-arch"/>.
Assume that Service A needs to call Service B. For simplicity, this document focuses on HTTP-based services,
and the service-to-service call consists of a single HTTP request and its response.
We define the credentials that both services should possess and how they are used to protect the HTTP exchange.</t>
      <t>There are multiple deployment styles in use today, and they result in different security properties.
We propose to address them differently.</t>
      <ul spacing="normal">
        <li>
          <t>Many use cases have various middleboxes inserted between pairs of services, resulting in a transport layer
that is not end-to-end encrypted. We propose to address these use cases by protecting the HTTP messages at the application
level (<xref target="app-level"/>).</t>
        </li>
        <li>
          <t>The other commonly deployed architecture has a mutual-TLS connection between each pair of services. This setup
can be addressed by a simpler solution (<xref target="mutual-tls"/>).</t>
        </li>
      </ul>
      <t>It is an explicit goal of this protocol that a service deployment can include both architectures across a multi-chain call.
In other words, Service A can call Service B with mutual TLS protection,
while the next call to Service C is protected at the application level.</t>
      <t>For application-level protection we currently propose two alternative solutions, one inspired by DPoP <xref target="RFC9449"/> in <xref target="dpop-esque-auth"/> and
one which is a profile of HTTP Message Signatures <xref target="RFC9421"/> in <xref target="http-sig-auth"/>. The design team believes that we need to pick
one of these two alternatives for standardization, once we have understood their pros and cons.</t>
      <section anchor="deployment-architecture-and-message-flow">
        <name>Deployment Architecture and Message Flow</name>
        <t>Regardless of the transport between the workloads, we assume the following logical architecture:</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="320" width="352" viewBox="0 0 352 320" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,128" fill="none" stroke="black"/>
              <path d="M 8,224 L 8,304" fill="none" stroke="black"/>
              <path d="M 56,136 L 56,216" fill="none" stroke="black"/>
              <path d="M 72,176 L 72,216" fill="none" stroke="black"/>
              <path d="M 112,32 L 112,128" fill="none" stroke="black"/>
              <path d="M 112,224 L 112,304" fill="none" stroke="black"/>
              <path d="M 240,32 L 240,128" fill="none" stroke="black"/>
              <path d="M 240,224 L 240,304" fill="none" stroke="black"/>
              <path d="M 256,136 L 256,176" fill="none" stroke="black"/>
              <path d="M 272,96 L 272,128" fill="none" stroke="black"/>
              <path d="M 304,136 L 304,216" fill="none" stroke="black"/>
              <path d="M 344,32 L 344,128" fill="none" stroke="black"/>
              <path d="M 344,224 L 344,304" fill="none" stroke="black"/>
              <path d="M 8,32 L 112,32" fill="none" stroke="black"/>
              <path d="M 240,32 L 344,32" fill="none" stroke="black"/>
              <path d="M 120,78 L 232,78" fill="none" stroke="black"/>
              <path d="M 120,82 L 232,82" fill="none" stroke="black"/>
              <path d="M 272,96 L 344,96" fill="none" stroke="black"/>
              <path d="M 8,128 L 112,128" fill="none" stroke="black"/>
              <path d="M 240,128 L 344,128" fill="none" stroke="black"/>
              <path d="M 72,176 L 256,176" fill="none" stroke="black"/>
              <path d="M 8,224 L 112,224" fill="none" stroke="black"/>
              <path d="M 240,224 L 344,224" fill="none" stroke="black"/>
              <path d="M 8,304 L 112,304" fill="none" stroke="black"/>
              <path d="M 240,304 L 344,304" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="312,216 300,210.4 300,221.6" fill="black" transform="rotate(90,304,216)"/>
              <polygon class="arrowhead" points="312,136 300,130.4 300,141.6" fill="black" transform="rotate(270,304,136)"/>
              <polygon class="arrowhead" points="264,136 252,130.4 252,141.6" fill="black" transform="rotate(270,256,136)"/>
              <polygon class="arrowhead" points="240,80 228,74.4 228,85.6" fill="black" transform="rotate(0,232,80)"/>
              <polygon class="arrowhead" points="80,216 68,210.4 68,221.6" fill="black" transform="rotate(90,72,216)"/>
              <polygon class="arrowhead" points="64,216 52,210.4 52,221.6" fill="black" transform="rotate(90,56,216)"/>
              <polygon class="arrowhead" points="64,136 52,130.4 52,141.6" fill="black" transform="rotate(270,56,136)"/>
              <g class="text">
                <text x="284" y="68">Workload</text>
                <text x="328" y="68">B</text>
                <text x="52" y="84">Workload</text>
                <text x="96" y="84">A</text>
                <text x="304" y="116">PEP</text>
                <text x="60" y="260">Identity</text>
                <text x="288" y="260">PDP</text>
                <text x="60" y="276">Server</text>
                <text x="292" y="276">(optional)</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+------------+               +------------+
|            |               |            |
|            |               | Workload B |
| Workload A |==============>|            |
|            |               |   +--------+
|            |               |   |  PEP   |
+------------+               +---+--------+
      ^                        ^     ^
      |                        |     |
      | +----------------------+     |
      | |                            |
      v v                            v
+------------+               +------------+
|            |               |            |
|  Identity  |               |    PDP     |
|   Server   |               | (optional) |
|            |               |            |
+------------+               +------------+
]]></artwork>
        </artset>
        <t>The Identity Server provisions credentials to each of the workloads. At least Workload A (and possibly both) must be provisioned
with a credential before the call can proceed. Details of communication with the Identity Server are out of scope
of this document, however we do describe the credential received by the workload.</t>
        <t>PEP is a Policy Enforcement Point, the component that allows the call to go through or blocks it. PDP is an optional
Policy Decision Point, which may be deployed in architectures where policy management is centralized. All details of
policy management and message authorization are out of scope of this document.</t>
        <t>The high-level message flow is as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Workload A obtains a credential from the Identity Server. This happens periodically, e.g. once every 24 hours.</t>
          </li>
          <li>
            <t>Workload A makes an HTTP call into Workload B. This is a regular HTTP request, with the additional protection
mechanisms defined below.</t>
          </li>
          <li>
            <t>Workload B now authenticates Workload A and decides whether to authorize the call.
In certain architectures, Workload B may need to consult with an external server to decide whether to accept the call.</t>
          </li>
          <li>
            <t>Workload B returns a response to Workload A, which may be an error response or a regular one.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>This document uses "service" and "workload" interchangeably. Otherwise, all terms are as defined by <xref target="I-D.ietf-wimse-arch"/>.</t>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="whimsical-identity">
      <name>Workload Identity</name>
      <t>This document defines a workload identity as a URI <xref target="RFC3986"/>. This URI is used in the subject fields in the certificates and tokens defined later in this document. This specification treats the URI as opaque. The format of the URI and the namespace for the URI are at the discretion of the deployment at large. Other specifications may define specific URI structures for particular use cases. An example of a defined identity format is the <eref target="https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md">SPIFFE ID</eref>.</t>
      <t>A workload identity only has meaning within the scope of a specific issuer. Two identities of the same value issued by different issuers may or may not refer to the same workload. In order to avoid collisions identity URIs <bcp14>SHOULD</bcp14> specify, in the URI's "authority" field, the trust domain associated with an issuer that is selected from a global name space such as host domains. However, the validator of an identity credential <bcp14>MUST</bcp14> make sure that they are using the correct issuer credential to verify the identity credential and that the issuer is trusted to issue tokens for the defined trust domain.</t>
    </section>
    <section anchor="app-level">
      <name>Application Level Service To Service Authentication</name>
      <t>As noted in the Introduction, for many deployments communication between workloads cannot use
end-to-end TLS. For these deployment styles, this document proposes application-level protections.</t>
      <t>The current version of the document includes two alternatives, both using the newly introduced
Workload Identity Token (<xref target="to-wit"/>). The first alternative (<xref target="dpop-esque-auth"/>) is inspired by the OAuth DPoP specification.
The second (<xref target="http-sig-auth"/>) is based on the HTTP Message Signatures RFC. We present both alternatives and expect
the working group to select one of them as this document progresses towards IETF consensus.</t>
      <section anchor="to-wit">
        <name>The Workload Identity Token</name>
        <t>The Workload Identity Token (WIT) is a JWS <xref target="RFC7515"/> signed JWT <xref target="RFC7519"/> that represents the identity of a workload.
It is issued by the Identity Server and binds a public key to the workload identity.
A WIT <bcp14>MUST</bcp14> contain the following:</t>
        <ul spacing="normal">
          <li>
            <t>in the JOSE header:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>alg</tt>: An identifier for a JWS asymmetric digital signature algorithm
   (registered algorithm identifiers are listed in the IANA JOSE Algorithms registry <xref target="IANA.JOSE.ALGS"/>). The value <tt>none</tt> <bcp14>MUST NOT</bcp14> be used.</t>
              </li>
              <li>
                <t><tt>typ</tt>: the WIT is explicitly typed, as recommended in <xref section="3.11" sectionFormat="of" target="RFC8725"/>, using the <tt>wimse-id+jwt</tt> media type.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>in the JWT claims:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>iss</tt>: The issuer of the token, which is the Identity Server, represented by a URI.</t>
              </li>
              <li>
                <t><tt>sub</tt>: The subject of the token, which is the identity of the workload, represented by a URI.</t>
              </li>
              <li>
                <t><tt>exp</tt>: The expiration time of the token (as defined in <xref section="4.1.4" sectionFormat="of" target="RFC7519"/>).
WITs should be refreshed regularly, e.g. on the order of hours.</t>
              </li>
              <li>
                <t><tt>jti</tt>: A unique identifier for the token.</t>
              </li>
              <li>
                <t><tt>cnf</tt>: A confirmation claim containing the public key of the workload using the <tt>jwk</tt> member as defined in <xref section="3.2" sectionFormat="of" target="RFC7800"/>.
   The workload <bcp14>MUST</bcp14> prove possession of the corresponding private key when presenting the WIT to another party, which can be accomplished by using it in conjunction with one of the methods in <xref target="dpop-esque-auth"/> or <xref target="http-sig-auth"/>. As such, it <bcp14>MUST NOT</bcp14> be used as a bearer token and is not intended for use in the <tt>Authorization</tt> header.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>An example WIT might look like this (all examples, of course, are non-normative and with line breaks and extra space for readability):</t>
        <figure anchor="example-wit">
          <name>An example Workload Identity Token (WIT)</name>
          <sourcecode type="jwt"><![CDATA[
eyJ0eXAiOiJ3aW1zZS1pZCtqd3QiLCJhbGciOiJFUzI1NiIsImtpZCI6Ikp1bmUgNSJ9.
eyJpc3MiOiJ3aW1zZTovL2V4YW1wbGUuY29tL3RydXN0ZWQtY2VudHJhbC1hdXRob3Jpd
HkiLCJleHAiOjE3MTc2MTI0NzAsInN1YiI6IndpbXNlOi8vZXhhbXBsZS5jb20vc3BlY2
lmaWMtd29ya2xvYWQiLCJqdGkiOiJ4LV8xQ1RMMmNjYTNDU0U0Y3diX18iLCJjbmYiOns
iandrIjp7Imt0eSI6Ik9LUCIsImNydiI6IkVkMjU1MTkiLCJ4IjoiX2FtUkMzWXJZYkho
SDFSdFlyTDhjU21URE1oWXRPVVRHNzhjR1RSNWV6ayJ9fX0.rOSUMR8I5WhM5C704l3iV
dY0zFqxhugJ8Jo2xo39G7FqUTbwTzAGdpz2lHp6eL1M486XmRgl3uyjj6R_iuzNOA
]]></sourcecode>
        </figure>
        <t>The decoded JOSE header of the WIT from the example above is shown here:</t>
        <figure>
          <name>Example WIT JOSE Header</name>
          <sourcecode type="json"><![CDATA[
{
 "typ": "wimse-id+jwt",
 "alg": "ES256",
 "kid": "June 5"
}
]]></sourcecode>
        </figure>
        <t>The decoded JWT claims of the WIT from the example above are shown here:</t>
        <figure>
          <name>Example WIT Claims</name>
          <sourcecode type="json"><![CDATA[
{
 "iss": "wimse://example.com/trusted-central-authority",
 "exp": 1717612470,
 "sub": "wimse://example.com/specific-workload",
 "jti": "x-_1CTL2cca3CSE4cwb__",
 "cnf": {
  "jwk": {
   "kty": "OKP",
   "crv": "Ed25519",
   "x": "_amRC3YrYbHhH1RtYrL8cSmTDMhYtOUTG78cGTR5ezk"
  }
 }
}
]]></sourcecode>
        </figure>
        <t>The claims indicate that the example WIT:</t>
        <ul spacing="normal">
          <li>
            <t>was issued by an Identity Server known as <tt>wimse://example.com/trusted-central-authority</tt>.</t>
          </li>
          <li>
            <t>is valid until May 15, 2024 3:28:45 PM GMT-06:00 (represented as NumericDate <xref section="2" sectionFormat="of" target="RFC7519"/> value <tt>1717612470</tt>).</t>
          </li>
          <li>
            <t>identifies the workload to which the token was issued as <tt>wimse://example.com/specific-workload</tt>.</t>
          </li>
          <li>
            <t>has a unique identifier of <tt>x-_1CTL2cca3CSE4cwb__</tt>.</t>
          </li>
          <li>
            <t>binds the public key represented by the <tt>jwk</tt> confirmation method to the workload <tt>wimse://example.com/specific-workload</tt>.</t>
          </li>
        </ul>
        <t>For elucidative purposes only, the workload's key, including the private part, is shown below in JWK <xref target="RFC7517"/> format:</t>
        <figure anchor="example-caller-jwk">
          <name>Example Workload's Key</name>
          <sourcecode type="jwk"><![CDATA[
{
 "kty":"OKP",
 "crv":"Ed25519",
 "x":"_amRC3YrYbHhH1RtYrL8cSmTDMhYtOUTG78cGTR5ezk",
 "d":"G4lGAYFtFq5rwyjlgSIRznIoCF7MtKDHByyUUZCqLiA"
}
]]></sourcecode>
        </figure>
        <t>The afore-exampled WIT is signed with the private key of the Identity Server.
The public key(s) of the Identity Server need to be known to all workloads in order to verify the signature of the WIT.
The Identity Server's public key from this example is shown below in JWK <xref target="RFC7517"/> format:</t>
        <figure>
          <name>Example Identity Server Key</name>
          <sourcecode type="jwk"><![CDATA[
{
 "kty":"EC",
 "kid":"June 5",
 "x":"kXqnA2Op7hgd4zRMbw0iFcc_hDxUxhojxOFVGjE2gks",
 "y":"n__VndPMR021-59UAs0b9qDTFT-EZtT6xSNs_xFskLo",
 "crv":"P-256"
}
]]></sourcecode>
        </figure>
        <section anchor="wit-http-header">
          <name>The WIT HTTP Header</name>
          <t>A WIT is conveyed in an HTTP header field named <tt>Workload-Identity-Token</tt>.</t>
          <t>For those who celebrate, ABNF <xref target="RFC5234"/> for the value of <tt>Workload-Identity-Token</tt> header field is provided in <xref target="wit-header-abnf"/>:</t>
          <figure anchor="wit-header-abnf">
            <name>Workload-Identity-Token Header Field ABNF</name>
            <sourcecode type="abnf"><![CDATA[
ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
DIGIT = %x30-39 ; 0-9
base64url = 1*(ALPHA / DIGIT / "-" / "_")
WIT =  base64url "." base64url "." base64url
]]></sourcecode>
          </figure>
          <t>The following shows the WIT from <xref target="example-wit"/> in an example of a <tt>Workload-Identity-Token</tt> header field:</t>
          <figure>
            <name>An example Workload Identity Token HTTP Header Field</name>
            <sourcecode type="http-message"><![CDATA[
Workload-Identity-Token: eyJ0eXAiOiJ3aW1zZS1pZCtqd3QiLCJhbGciOiJFUzI1
 NiIsImtpZCI6Ikp1bmUgNSJ9.eyJpc3MiOiJ3aW1zZTovL2V4YW1wbGUuY29tL3RydXN
 0ZWQtY2VudHJhbC1hdXRob3JpdHkiLCJleHAiOjE3MTc2MTI0NzAsInN1YiI6IndpbXN
 lOi8vZXhhbXBsZS5jb20vc3BlY2lmaWMtd29ya2xvYWQiLCJqdGkiOiJ4LV8xQ1RMMmN
 jYTNDU0U0Y3diX18iLCJjbmYiOnsiandrIjp7Imt0eSI6Ik9LUCIsImNydiI6IkVkMjU
 1MTkiLCJ4IjoiX2FtUkMzWXJZYkhoSDFSdFlyTDhjU21URE1oWXRPVVRHNzhjR1RSNWV
 6ayJ9fX0.rOSUMR8I5WhM5C704l3iVdY0zFqxhugJ8Jo2xo39G7FqUTbwTzAGdpz2lHp
 6eL1M486XmRgl3uyjj6R_iuzNOA
]]></sourcecode>
          </figure>
          <t>Note that per <xref target="RFC9110"/>, header field names are case insensitive;
thus, <tt>Workload-Identity-Token</tt>, <tt>workload-identity-token</tt>, <tt>WORKLOAD-IDENTITY-TOKEN</tt>,
etc., are all valid and equivalent header field names. However, case is significant in the header field value.</t>
        </section>
      </section>
      <section anchor="dpop-esque-auth">
        <name>Option 1: DPoP-Inspired Authentication</name>
        <t>This option, inspired by the OAuth DPoP specification <xref target="RFC9449"/>, uses a DPoP-like mechanism to authenticate
the calling workload in the context of the request. The WIMSE Identity Token (<xref target="to-wit"/>) is sent in the request as
described in <xref target="wit-http-header"/>. An additional JWT, the Workload Proof Token (WPT), is signed by the private key
corresponding to the public key in the WIT. The WPT is sent in the <tt>Workload-Proof-Token</tt> header field of the request.
A WPT contains the following:</t>
        <ul spacing="normal">
          <li>
            <t>in the JOSE header:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>alg</tt>: An identifier for an appropriate JWS asymmetric digital signature algorithm corresponding to
   the confirmation key in the associated WIT.</t>
              </li>
              <li>
                <t><tt>typ</tt>: the WPT is explicitly typed, as recommended in <xref section="3.11" sectionFormat="of" target="RFC8725"/>,
   using the <tt>application/wimse-proof+jwt</tt> media type.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>in the JWT claims:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>iss</tt>: The issuer of the token, which is the calling workload, represented by the same value as the <tt>sub</tt> claim
   of the associated WIT.</t>
              </li>
              <li>
                <t><tt>aud</tt>: The audience of the token contains the HTTP target URI (<xref section="7.1" sectionFormat="of" target="RFC9110"/>) of the request
   to which the WPT is attached, without query or fragment parts.</t>
              </li>
              <li>
                <t><tt>exp</tt>: The expiration time of the WIT (as defined in <xref section="4.1.4" sectionFormat="of" target="RFC7519"/>). WPT lifetimes <bcp14>MUST</bcp14> be short,
   e.g., on the order of minutes or seconds.</t>
              </li>
              <li>
                <t><tt>jti</tt>: A unique identifier for the token.</t>
              </li>
              <li>
                <t><tt>ath</tt>: Hash of the OAuth access token, if present in the request, which might convey end-user identity and
   authorization context of the request. The value, as per <xref section="4.1" sectionFormat="of" target="RFC9449"/>,
   is the base64url encoding of the SHA-256 hash of the ASCII encoding of the access token's value.</t>
              </li>
              <li>
                <t><tt>tth</tt>: Hash of the Txn-Token <xref target="I-D.ietf-oauth-transaction-tokens"/>, if present in the request,
   which might convey end-user identity and authorization context of the request. The value <bcp14>MUST</bcp14> be the result of
   a base64url encoding (as defined in <xref section="2" sectionFormat="of" target="RFC7515"/>) of the SHA-256 hash of
   the ASCII encoding of the associated token's value.</t>
              </li>
              <li>
                <t><tt>oth</tt>: Hash of any other token in the request that might convey end-user identity and authorization context of the
   request. The value <bcp14>MUST</bcp14> be the result of a base64url encoding (as defined in <xref section="2" sectionFormat="of" target="RFC7515"/>) of the
   SHA-256 hash of the ASCII encoding of the associated token's value.
   (note: this is less than ideal but seems we need something like this for extensibility)</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>An example WPT might look like the following:</t>
        <figure anchor="example-wpt">
          <name>Example Workload Proof Token (WPT)</name>
          <sourcecode type="jwt"><![CDATA[
eyJ0eXAiOiJ3aW1zZS1wcm9vZitqd3QiLCJhbGciOiJFZERTQSJ9.eyJpc3MiOiJ3aW1z
ZTovL2V4YW1wbGUuY29tL3NwZWNpZmljLXdvcmtsb2FkIiwiYXVkIjoiaHR0cHM6Ly9zZ
XJ2aWNlLmV4YW1wbGUuY29tL3BhdGgiLCJleHAiOjE3MTc2MTI4MjAsImp0aSI6Il9fYn
djNEVTQzNhY2MyTFRDMS1feCIsImF0aCI6IkNMNHdqZnBSbU5mLWJkWUliWUxuVjlkNXJ
NQVJHd0tZRTEwd1V3ekMwakkifQ.Zq50mcIVTUykQhOBS7lyF93py3q5QOSPIbnI_oESv
j6zSTWi-p0QNNHpKeB4IAgmC8Mt3dBM_rufwCxiKHSmDA
]]></sourcecode>
        </figure>
        <t>The decoded JOSE header of the WPT from the example above is shown here:</t>
        <figure>
          <name>Example WPT JOSE Header</name>
          <sourcecode type="json"><![CDATA[
{
 "typ": "wimse-proof+jwt",
 "alg": "EdDSA"
}
]]></sourcecode>
        </figure>
        <t>The decoded JWT claims of the WPT from the example above are shown here:</t>
        <figure>
          <name>Example WPT Claims</name>
          <sourcecode type="json"><![CDATA[
{
 "iss": "wimse://example.com/specific-workload",
 "aud": "https://service.example.com/path",
 "exp": 1717612820,
 "jti": "__bwc4ESC3acc2LTC1-_x",
 "ath": "CL4wjfpRmNf-bdYIbYLnV9d5rMARGwKYE10wUwzC0jI"
}
]]></sourcecode>
        </figure>
        <t>An example of an HTTP request with both the WIT and WPT from prior examples is shown below:</t>
        <figure>
          <name>Example HTTP Request with WIT and WPT</name>
          <sourcecode type="http-message"><![CDATA[
POST /path HTTP/1.1
Host: service.example.com
Content-Type: application/json
Authorization: Bearer 16_mAd0GiwaZokU26_0902100
Workload-Identity-Token: eyJ0eXAiOiJ3aW1zZS1pZCtqd3QiLCJhbGciOiJFUzI1
 NiIsImtpZCI6Ikp1bmUgNSJ9.eyJpc3MiOiJ3aW1zZTovL2V4YW1wbGUuY29tL3RydXN
 0ZWQtY2VudHJhbC1hdXRob3JpdHkiLCJleHAiOjE3MTc2MTI0NzAsInN1YiI6IndpbXN
 lOi8vZXhhbXBsZS5jb20vc3BlY2lmaWMtd29ya2xvYWQiLCJqdGkiOiJ4LV8xQ1RMMmN
 jYTNDU0U0Y3diX18iLCJjbmYiOnsiandrIjp7Imt0eSI6Ik9LUCIsImNydiI6IkVkMjU
 1MTkiLCJ4IjoiX2FtUkMzWXJZYkhoSDFSdFlyTDhjU21URE1oWXRPVVRHNzhjR1RSNWV
 6ayJ9fX0.rOSUMR8I5WhM5C704l3iVdY0zFqxhugJ8Jo2xo39G7FqUTbwTzAGdpz2lHp
 6eL1M486XmRgl3uyjj6R_iuzNOA
Workload-Proof-Token: eyJ0eXAiOiJ3aW1zZS1wcm9vZitqd3QiLCJhbGciOiJFZER
 TQSJ9.eyJpc3MiOiJ3aW1zZTovL2V4YW1wbGUuY29tL3NwZWNpZmljLXdvcmtsb2FkIi
 wiYXVkIjoiaHR0cHM6Ly9zZXJ2aWNlLmV4YW1wbGUuY29tL3BhdGgiLCJleHAiOjE3MT
 c2MTI4MjAsImp0aSI6Il9fYndjNEVTQzNhY2MyTFRDMS1feCIsImF0aCI6IkNMNHdqZn
 BSbU5mLWJkWUliWUxuVjlkNXJNQVJHd0tZRTEwd1V3ekMwakkifQ.Zq50mcIVTUykQhO
 BS7lyF93py3q5QOSPIbnI_oESvj6zSTWi-p0QNNHpKeB4IAgmC8Mt3dBM_rufwCxiKHS
 mDA

{"do stuff":"please"}
]]></sourcecode>
        </figure>
        <t>To validate the WPT in the request, the recipient <bcp14>MUST</bcp14> ensure the following:</t>
        <ul spacing="normal">
          <li>
            <t>There is exactly one <tt>Workload-Proof-Token</tt> header field in the request.</t>
          </li>
          <li>
            <t>The <tt>Workload-Proof-Token</tt> header field value is a single and well-formed JWT.</t>
          </li>
          <li>
            <t>The WPT signature is valid using the public key from the confirmation claim of the WIT.</t>
          </li>
          <li>
            <t>The <tt>typ</tt> JOSE header parameter of the WPT conveys a media type of <tt>wimse-proof+jwt</tt>.</t>
          </li>
          <li>
            <t>The <tt>iss</tt> claim of the WPT matches the <tt>sub</tt> claim of the WIT. (note: not sure <tt>iss</tt> in the WPT is useful or necessary)</t>
          </li>
          <li>
            <t>The <tt>aud</tt> claim of the WPT matches the target URI, or an acceptable alias or normalization thereof, of the HTTP request
 in which the WPT was received, ignoring any query and fragment parts.</t>
          </li>
          <li>
            <t>The <tt>exp</tt> claim is present and conveys a time that has not passed. WPTs with an expiration time unreasonably
 far in the future <bcp14>SHOULD</bcp14> be rejected.</t>
          </li>
          <li>
            <t>Optionally, check that the value of the <tt>jti</tt> claim has not been used before in the time window in which the
 respective WPT would be considered valid.</t>
          </li>
          <li>
            <t>If presented in conjunction with an OAuth access token, the value of the <tt>ath</tt> claim matches the hash of that token's value.</t>
          </li>
          <li>
            <t>If presented in conjunction with a Txn-Token, the value of the <tt>tth</tt> claim matches the hash of that token's value.</t>
          </li>
          <li>
            <t>If presented in conjunction with a token conveying end-user identity or authorization context, the value of
 the <tt>oth</tt> claim matches the hash of that token's value.</t>
          </li>
        </ul>
      </section>
      <section anchor="http-sig-auth">
        <name>Option 2: Authentication Based on HTTP Message Signatures</name>
        <t>This option uses the WIMSE Identity Token (<xref target="to-wit"/>) to sign the request and optionally, the response.
This specification defines a profile of the Message Signatures specification <xref target="RFC9421"/>.</t>
        <t>The request is signed as per <xref target="RFC9421"/>. The following derived components <bcp14>MUST</bcp14> be signed:</t>
        <ul spacing="normal">
          <li>
            <t><tt>@method</tt></t>
          </li>
          <li>
            <t><tt>@request-target</tt></t>
          </li>
        </ul>
        <t>In addition, the following request headers <bcp14>MUST</bcp14> be signed when they exist:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Content-Type</tt></t>
          </li>
          <li>
            <t><tt>Content-Digest</tt></t>
          </li>
          <li>
            <t><tt>Authorization</tt></t>
          </li>
          <li>
            <t><tt>Txn-Token</tt> <xref target="I-D.ietf-oauth-transaction-tokens"/></t>
          </li>
          <li>
            <t><tt>Workload-Identity-Token</tt></t>
          </li>
        </ul>
        <t>If the response is signed, the following components <bcp14>MUST</bcp14> be signed:</t>
        <ul spacing="normal">
          <li>
            <t><tt>@status</tt></t>
          </li>
          <li>
            <t><tt>@method;req</tt></t>
          </li>
          <li>
            <t><tt>@request-target;req</tt></t>
          </li>
          <li>
            <t><tt>Content-Type</tt> if it exists</t>
          </li>
          <li>
            <t><tt>Content-Digest</tt> if it exists</t>
          </li>
          <li>
            <t><tt>Workload-Identity-Token</tt></t>
          </li>
        </ul>
        <t>For both requests and responses, the following signature parameters <bcp14>MUST</bcp14> be included:</t>
        <ul spacing="normal">
          <li>
            <t><tt>created</tt></t>
          </li>
          <li>
            <t><tt>expires</tt> - expiration <bcp14>MUST</bcp14> be short, e.g. on the order of minutes. The WIMSE architecture will provide separate
mechanisms in support of long-lived compute processes.</t>
          </li>
          <li>
            <t><tt>nonce</tt></t>
          </li>
          <li>
            <t><tt>tag</tt> - the value for implementations of this specification is <tt>wimse-service-to-service</tt></t>
          </li>
        </ul>
        <t>Since the signing key is sent along with the message, the <tt>keyid</tt> parameter <bcp14>SHOULD NOT</bcp14> be used.</t>
        <t>It is <bcp14>RECOMMENDED</bcp14> to include only one signature with the HTTP message.
If multiple ones are included, then the signature label included in both the <tt>Signature-Input</tt> and <tt>Signature</tt> headers <bcp14>SHOULD</bcp14>
be <tt>wimse</tt>.</t>
        <t>A sender <bcp14>MUST</bcp14> ensure that each nonce it generates is unique, at least among messages sent to the same recipient.
To detect message replays,
a recipient <bcp14>MAY</bcp14> reject a message (request or response) if a nonce is repeated.</t>
        <t>To promote interoperability, the <tt>ecdsa-p256-sha256</tt> signing algorithm <bcp14>MUST</bcp14> be implemented
by general purpose implementations of this spec.</t>
        <t><cref>OPEN ISSUE: do we use the `Accept-Signature` field to signal that the response must be signed?</cref></t>
        <t>Following is a non-normative example of a signed request and a signed response,
where the caller is using the keys specified in <xref target="example-caller-jwk"/>.</t>
        <figure>
          <name>Signed Request</name>
          <sourcecode type="http"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

GET /gimme-ice-cream?flavor=vanilla HTTP/1.1
Host: example.com
Signature: wimse=:K4dfGnguF5f1L4DKBSp5XeFXosLGj8Y9fiUX06rL/wdOF+x3zT\
WmsvKWiY0B1oFZaOtm2FHru+YLjdkqa2WfCQ==:
Signature-Input: wimse=("@method" "@request-target" "workload-identi\
ty-token");created=1718291357;expires=1718291657;nonce="abcd1111";ta\
g="wimse-service-to-service"
Workload-Identity-Token: aGVhZGVyCg.VGhpcyBpcyBub3QgYSByZWFsIHRva2Vu\
Lgo.c2lnbmF0dXJlCg

]]></sourcecode>
        </figure>
        <t>Assuming that the workload being called has the following keypair:</t>
        <figure>
          <name>Callee Private Key</name>
          <sourcecode type="jwk"><![CDATA[
{
 "kty":"OKP",
 "crv":"Ed25519",
 "x":"CfaY1XX-aHJpenRP8ATm3yGlbcKA_treqOfwKrilwyg",
 "d":"fycSKS-iHZ6TC1BNwN6cE0sOBP3-4KgR-eqxNpnyhws"
}
]]></sourcecode>
        </figure>
        <t>A signed response would be:</t>
        <figure>
          <name>Signed Response</name>
          <sourcecode type="http"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

HTTP/1.1 404 Not Found
Connection: close
Content-Digest: sha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU\
=:
Content-Type: text/plain
Signature: wimse=:NMrMn3xhI6m9PI8mKVfpnH5qFGcEfuFxiCmsB5PJhGjUHT/5J4\
612EZwRw3V4kU4gGJmO+ER8RC4DM2HKVOYDQ==:
Signature-Input: wimse=("@status" "workload-identity-token" "content\
-type" "content-digest" "@method";req "@request-target";req);created\
=1718295368;expires=1718295670;nonce="abcd2222";tag="wimse-service-t\
o-service"
Workload-Identity-Token: aGVhZGVyCg.VGhpcyBhaW4ndCBvbmUsIHRvby4K.c2l\
nbmF0dXJlCg

No ice cream today.

]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="mutual-tls">
      <name>Using Mutual TLS for Service To Service Authentication</name>
      <t>The WIMSE workload identity may be carried within an X.509 certificate. The WIMSE workload identity <bcp14>MUST</bcp14> be encoded in a SubjectAltName extension of type URI.  There <bcp14>MUST</bcp14> be only one SubjectAltName extension of type URI in a WIMSE certificate.  The WIMSE certificate may contain SubjectAltName extensions of other types such as DNSName.</t>
      <t>WIMSE identities may be used to validate server and client connections.  When validating a WIMSE identity the relying party <bcp14>MUST</bcp14> validate that the CA issuer for the WIMSE identity is authorized to issue certificates for the trust domain of the WIMSE identity in the certificate. Other PKIX path validation rules apply.</t>
      <t>Servers wishing to use the WIMSE identity for authorizing the client <bcp14>MUST</bcp14> require client certificate authentication in the TLS handshake. Other methods of post handshake authentication are not specified by this document.</t>
      <t>WIMSE clients and servers <bcp14>MUST</bcp14> validate that the trust domain portion of the WIMSE certificate matches the expected trust domain for the other side of the connection.</t>
      <section anchor="host-name-validation">
        <name>Host Name Validation</name>
        <t><cref>TODO: need to define trust root used to validate the certificate is appropriate for the trust domain.</cref></t>
        <t>It is <bcp14>RECOMMENDED</bcp14> that the server certificate contain a DNS SAN that the client can use to perform standard host name validation (<xref section="6.3" sectionFormat="of" target="RFC9525"/>).  The client <bcp14>SHOULD</bcp14> also extract the WIMSE identity from the certificate if it is present and validate that the WIMSE trust domain matches the intended trust domain for the server.  The client <bcp14>MAY</bcp14> then further use the WIMSE identity in applying authorization policy to the server.  If the client does not use the DNS SAN then the client <bcp14>MUST</bcp14> match the WIMSE identity in the certificate against the WIMSE identity of the workload of the intended server according to a locally defined policy. The host portion of the WIMSE URI is NOT treated as a host name as specified in section 6.4 of <xref target="RFC9525"/> but rather as a trust domain. The server identity is encoded in the path portion of the WIMSE identity in a deployment specific way.</t>
      </section>
      <section anchor="authorization-using-the-wimse-identity">
        <name>Authorization Using the WIMSE Identity</name>
        <t>The client or server application may retrieve the WIMSE identity from the TLS layer for use in authorization, accounting and auditing.  For example, the full URI may be matched against ACLs and other policy constructs to authorize actions requested by the peer.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="wimse-identity">
        <name>WIMSE Identity</name>
        <t>The WIMSE ID is scoped within an issuer and therefore any sub-components (path portion of ID) are only unique within a trust domain defined by the issuer. Using a WIMSE ID without taking into account the trust domain could allow one domain to issue tokens to spoof identities in another domain.  Additionally, the trust domain must be tied to an authorized issuer cryptographic trust root through some mechanism such as a JWKS or X.509 certificate chain. The association of an issuer, trust domain and a cryptographic trust root <bcp14>MUST</bcp14> be communicated securely out of band.</t>
        <t><cref>TODO: Should there be a DNS name to Trust domain mapping defined or some other discovery mechanism?</cref></t>
      </section>
      <section anchor="workload-id-token-and-proof-of-possession">
        <name>Workload ID Token and Proof of Possession</name>
        <t>The Workload ID token (WIT) is bound to a secret cryptographic key and is always presented with a proof of possession as described in <xref target="to-wit"/>. The WIT is a general purpose token that can be presented in multiple contexts. The WIT and its PoP are only used in the application-level options, and both are not used in MTLS. The WIT <bcp14>MUST NOT</bcp14> be used as a bearer token. While this helps reduce the sensitivity of the token it is still possible that a token and its proof of possession may be captured and replayed within the PoP's lifetime. The following are some mitigations for the capture and reuse of the proof of possession (PoP):</t>
        <ul spacing="normal">
          <li>
            <t>Preventing Eavesdropping and Interception with TLS</t>
          </li>
        </ul>
        <t>An attacker observing or intercepting the communication channel can view the token and its proof of possession and attempt to replay it to gain an advantage. In order to prevent this the
token and proof of possession <bcp14>MUST</bcp14> be sent over a secure, server authenticated TLS connection unless a secure channel is provided by some other mechanisms. Host name validation according
to <xref target="mutual-tls"/> <bcp14>MUST</bcp14> be performed. The WIT itself is not usable without a proof of possession.</t>
        <ul spacing="normal">
          <li>
            <t>Limiting Proof of Possession Lifespan</t>
          </li>
        </ul>
        <t>The proof of possession <bcp14>MUST</bcp14> be time limited. A PoP should only be valid over the time necessary for it to be successfully used for the purpose it is needed. This will typically be on the order of minutes.  PoPs received outside their validity time <bcp14>MUST</bcp14> be rejected.</t>
        <ul spacing="normal">
          <li>
            <t>Limiting Proof of Possession Scope</t>
          </li>
        </ul>
        <t>In order to reduce the risk of theft and replay the PoP should have a limited scope. For example, a PoP may be targeted for use with a specific workload and even a specific transaction to reduce the impact of a stolen PoP. In some cases a workload may wish to reuse a PoP for a period of time or have it accepted by multiple target workloads. A careful analysis is warranted to understand the impacts to the system if a PoP is disclosed allowing it to be presented by an attacker along with a captured WIT.</t>
        <ul spacing="normal">
          <li>
            <t>Binding to a Timestamp or Nonce</t>
          </li>
        </ul>
        <t>A proof of possession should include information that can be used to uniquely identify it such as a unique timestamp or nonce.  This can be used by the receiver to perform basic replay protection against tokens it has already seen. Depending upon the design of the system it may be difficult to synchronize the replay cache across all token validators. In this case, if the PoP is not sufficiently scoped it may be usable with another workload.
While a fresh nonce could be included in the PoP, a mechanism for distributing a fresh challenge nonce from the validator to provide single use properties of a PoP is outside the scope of this specification.</t>
        <ul spacing="normal">
          <li>
            <t>Binding to TLS Endpoint</t>
          </li>
        </ul>
        <t>The POP <bcp14>MAY</bcp14> be bound to a transport layer sender such as the client identity of a TLS session or TLS channel binding parameters. The mechanisms for binding are outside the scope of this specification.</t>
      </section>
      <section anchor="middle-boxes">
        <name>Middle Boxes</name>
        <t>In some deployments the WIMSE token and proof of possession may pass through multiple systems. The communication between the systems is over TLS, but the token and PoP are available in the clear at each intermediary.  While the intermediary cannot modify the token or the information within the PoP they can attempt to capture and replay the token or modify the data not protected by the PoP. Mitigations listed in the previous section can be used to provide some protection from middle boxes. Deployments should perform analysis on their situation to determine if it is appropriate to trust and allow traffic to pass through a middle box.</t>
      </section>
      <section anchor="privacy-considerations">
        <name>Privacy Considerations</name>
        <t>WITs and the proofs of possession may contain private information such as user names or other identities. Care should be taken to prevent the disclosure of this information. The use of TLS helps protect the privacy of WITs and proofs of possession.</t>
        <t>WITs and certificates with WIMSE identifiers are typically associated with a workload and not a specific user, however in some deployments the workload may be associated directly to a user. While these are exceptional cases a deployment should evaluate if the disclosure of WITs or certificates can be used to track a user.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TODO: maybe a URI Scheme registration of <tt>wimse</tt> in <eref target="https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml">URI schemes</eref> per <xref target="RFC7595"/> but it's only being used in an example right now and might not even be appropriate. Or maybe use an ietf URI scheme a la <eref target="https://www.iana.org/assignments/params/params.xhtml">URN Namespace for IETF Use</eref> somehow. Or maybe nothing. Or maybe something else.</t>
      <t>TODO: <tt>tth</tt> and maybe <tt>oth</tt> claim in <eref target="https://www.iana.org/assignments/jwt/jwt.xhtml">JSON Web Token Claims Registry</eref></t>
      <section anchor="media-type-registration">
        <name>Media Type Registration</name>
        <t>TODO: <tt>application/wimse-id+jwt</tt> or appropriately bikeshedded media type name (despite my ongoing unease with using media types for typing JWTs) in <eref target="https://www.iana.org/assignments/media-types/media-types.xhtml">Media Types</eref>.</t>
        <t>TODO: <tt>application/wimse-proof+jwt</tt> ...</t>
      </section>
      <section anchor="hypertext-transfer-protocol-http-field-name-registration">
        <name>Hypertext Transfer Protocol (HTTP) Field Name Registration</name>
        <t>TODO: <tt>Workload-Identity-Token</tt> from <xref target="wit-http-header"/></t>
        <t>TODO: <tt>Workload-Proof-Token</tt> from <xref target="dpop-esque-auth"/></t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC7515">
          <front>
            <title>JSON Web Signature (JWS)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </reference>
        <reference anchor="RFC7517">
          <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="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC7800">
          <front>
            <title>Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This specification describes how to declare in a JSON Web Token (JWT) that the presenter of the JWT possesses a particular proof-of- possession key and how the recipient can cryptographically confirm proof of possession of the key by the presenter. Being able to prove possession of a key is also sometimes described as the presenter being a holder-of-key.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7800"/>
          <seriesInfo name="DOI" value="10.17487/RFC7800"/>
        </reference>
        <reference anchor="RFC8725">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>JSON Web Tokens, also known as JWTs, are URL-safe JSON-based security tokens that contain a set of claims that can be signed and/or encrypted. JWTs are being widely used and deployed as a simple security token format in numerous protocols and applications, both in the area of digital identity and in other application areas. This Best Current Practices document updates RFC 7519 to provide actionable guidance leading to secure implementation and deployment of JWTs.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="225"/>
          <seriesInfo name="RFC" value="8725"/>
          <seriesInfo name="DOI" value="10.17487/RFC8725"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9421">
          <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="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="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC9525">
          <front>
            <title>Service Identity in TLS</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="R. Salz" initials="R." surname="Salz"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>Many application technologies enable secure communication between two entities by means of Transport Layer Security (TLS) with Internet Public Key Infrastructure using X.509 (PKIX) certificates. This document specifies procedures for representing and verifying the identity of application services in such interactions.</t>
              <t>This document obsoletes RFC 6125.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9525"/>
          <seriesInfo name="DOI" value="10.17487/RFC9525"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="IANA.JOSE.ALGS" target="http://www.iana.org/assignments/jose">
          <front>
            <title>JSON Web Signature and Encryption Algorithms</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="I-D.ietf-wimse-arch">
          <front>
            <title>Workload Identity in a Multi System Environment (WIMSE) Architecture</title>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>Venafi</organization>
            </author>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         </author>
            <date day="18" month="April" year="2024"/>
            <abstract>
              <t>   The increasing prevalence of cloud computing and micro service
   architectures has led to the rise of complex software functions being
   built and deployed as workloads, where a workload is defined as a
   running instance of software executing for a specific purpose.  This
   document discusses an architecture for designing and standardizing
   protocols and payloads for conveying workload identity and security
   context information.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-arch-00"/>
        </reference>
        <reference anchor="RFC9449">
          <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="I-D.ietf-oauth-transaction-tokens">
          <front>
            <title>Transaction Tokens</title>
            <author fullname="Atul Tulshibagwale" initials="A." surname="Tulshibagwale">
              <organization>SGNL</organization>
            </author>
            <author fullname="George Fletcher" initials="G." surname="Fletcher">
              <organization>Capital One</organization>
            </author>
            <author fullname="Pieter Kasselman" initials="P." surname="Kasselman">
              <organization>Microsoft</organization>
            </author>
            <date day="21" month="June" year="2024"/>
            <abstract>
              <t>   Transaction Tokens (Txn-Tokens) enable workloads in a trusted domain
   to ensure that user identity and authorization context of an external
   programmatic request, such as an API invocation, are preserved and
   available to all workloads that are invoked as part of processing
   such a request.  Txn-Tokens also enable workloads within the trusted
   domain to optionally immutably assert to downstream workloads that
   they were invoked in the call chain of the request.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-transaction-tokens-02"/>
        </reference>
        <reference anchor="RFC7595">
          <front>
            <title>Guidelines and Registration Procedures for URI Schemes</title>
            <author fullname="D. Thaler" initials="D." role="editor" surname="Thaler"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <date month="June" year="2015"/>
            <abstract>
              <t>This document updates the guidelines and recommendations, as well as the IANA registration processes, for the definition of Uniform Resource Identifier (URI) schemes. It obsoletes RFC 4395.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="35"/>
          <seriesInfo name="RFC" value="7595"/>
          <seriesInfo name="DOI" value="10.17487/RFC7595"/>
        </reference>
      </references>
    </references>
    <?line 619?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t><cref>TODO acknowledge.</cref></t>
    </section>
  </back>
  <!-- ##markdown-source:
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
MpjmsSXD6eAYeVPyIiaOwdqyXSwvwTjBn9ij7Q8f91GfiSFBoCbEnwIDdjoL
Ap4lAIbrDdFwYzrJzHRmWcRj3oFt7mGmHu1H9ZMxrLCefS815UKj3RBgNXSa
molxErSti/luzRNCLz2GQDaPTBmJaMOiWVNRS8tm8eO+TFj1EPUqLA6siOUn
LtmgIHVB8mAZhCuirF0ZHt6o1Gq4hTIv//37msHQj8LW99xfnqbZI6hc17Np
0IqBbqAVx7fhRo1t2HwAqZeLaRX6RPJbywPES0hjLSczlRMAfagXC0acHFmZ
c68MbVKoSVd/MAfgT84Bn7xEGneY2jfnYu8MD6mA0c1KrbIpUSr4531FxvJg
h3TyDPYR7AgAYwQDSIfPcN9FSpcsCRhKOvASwqfMQ2rGpP6XCZ+naQ2ivt8J
B3Q/sA7I2UCsiPZMcZPacIMZ55BmUsXTdIzEgAVcbBUWNip1hYPdahU9RcJA
zxySaBqDZ1ylEg39Q6YCOsUuzhsn3jPWEZCnOcKsm9hABRPSPlpcoUjPoD07
U+SgUk0OVVt4hPD+TC7IozQioOFpEjp55C0X1bBQMMSEx7As7QEYX5KzANMA
Las1HH+edYXn0gd3kcxEJCbKx4qEIDqoxKa4l2iMSz57bJjBqEcp4dBKzq10
xELgDUfgE0TRGKTQmAst8w6dUnkX5ngw2ggUhV4/SCuQMGVd20OwEA7IheuD
VzNWGi5LbJa7KvCLa/c9H1jsvUxEgJiw+Oy8yu8a3qV3vmHf1r4+dGvxw2H2
xd345F0cno/6pw7+dnL9tVlre820GWTwe3O7OY5r/eB62O6e71VwlNjZaOWj
9KLni/rN5v1tbdo/vZ7c1/eyi42rmXvXrj7cfsru6zcT9wxGP6yN3LurqL9x
HrvW2Rin9PkZgPN0vNHqOfVWr1ltf22kzbBdu/dg2tCN+3dt/9LbfX64G436
dwfpQ3frqV+vPjsbB/593fID+7aVufW9mV1/eb6/pXV8cU/HCN3mxc3uy6fa
VasVtJ/ue+2j6+p19X7D9e5qu3jfUz+49y7D1PIAh0nzKd6BBVd5Fxe8d3F9
iAhoz1yEZHwzbj1d11o9gnqz+RR5d/WT7Hrc+np7d/5wPx5FVvfopOue+LPe
0ejpul67vjquRbd3V52bm6uz9tfR01Xtqtu+vdm2Z+d7g7tqJbnsXreudptb
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
gAAA

-->

</rfc>
