<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-wimse-s2s-protocol-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="WIMSE S2S Auth">WIMSE Service to Service Authentication</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-s2s-protocol-01"/>
    <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>SPIRL</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="October" day="18"/>
    <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://ietf-wg-wimse.github.io/draft-ietf-wimse-s2s-protocol/draft-ietf-wimse-s2s-protocol.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-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/ietf-wg-wimse/draft-ietf-wimse-s2s-protocol"/>.</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"/>.
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>
      <section anchor="trust-domain">
        <name>Trust Domain</name>
        <t>A trust domain is a logical grouping of systems that share a common set of security controls and policies. WIMSE certificates and tokens are issued under the authority of a trust domain. Trust domains <bcp14>SHOULD</bcp14> be identified by a fully qualified domain name belonging to the organization defining the trust domain.
A trust domain maps to one or more trust anchors for validating X.509 certificates and a mechanism to securely obtain a JWK Set <xref target="RFC7517"/> for validating WIMSE WIT tokens. This mapping <bcp14>MUST</bcp14> be obtained through a secure mechanism that ensures the authenticity and integrity of the mapping is fresh and not compromised. This secure mechanism is out of scope for this document.</t>
        <t>A single organization may define multiple trust domains for different purposes such as different departments or environments. Each trust domain must have a unique identifier. Workload identifiers are scoped within a trust domain. If two identifiers differ only by trust domain they still refer to two different entities.</t>
      </section>
      <section anchor="workload-identifier">
        <name>Workload Identifier</name>
        <t>This document defines a workload identifier as a URI <xref target="RFC3986"/>. This URI is used in the subject fields in the certificates and tokens defined later in this document. The URI <bcp14>MUST</bcp14> meet the criteria for the URI type of Subject Alternative Name defined in Section 4.2.1.6 of <xref target="RFC5280"/>.</t>
        <ul empty="true">
          <li>
            <t>The name <bcp14>MUST NOT</bcp14> be a relative URI, and it <bcp14>MUST</bcp14> follow the URI syntax and
  encoding rules specified in <xref target="RFC3986"/>.  The name <bcp14>MUST</bcp14> include both a
  scheme and a scheme-specific-part.</t>
          </li>
        </ul>
        <t>In addition the URI <bcp14>MUST</bcp14> include an authority that identifies the trust domain within which the identifier is scoped. The trust domain <bcp14>SHOULD</bcp14> be a fully qualified domain name belonging to the organization defining the trust domain to help provide uniqueness for the trust domain identifier. The scheme and scheme specific part are not defined by this specification. An example of an identifier format that conforms to this definition is <eref target="https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md">SPIFFE ID</eref>.
While the URI encoding rules allow host names to be specified as IP addresses, IP addresses <bcp14>MUST NOT</bcp14> be used to represent trust domains except in the case where they are needed for compatibility with existing naming schemes.</t>
      </section>
    </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.
A comparison of the two alternatives is attempted in <xref target="app-level-comparison"/>.</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>wth</tt>: Hash of the Workload Identity Token, defined in <xref target="to-wit"/>. The value is the base64url encoding of the
   SHA-256 hash of the ASCII encoding of the token's value.</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, if such a token exists.
   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[
eyJhbGciOiJFZERTQSIsInR5cCI6IndpbXNlLXByb29mK2p3dCJ9.eyJhdGgiOiJDTDR3
amZwUm1OZi1iZFlJYllMblY5ZDVyTUFSR3dLWUUxMHdVd3pDMGpJIiwiYXVkIjoiaHR0c
HM6Ly9zZXJ2aWNlLmV4YW1wbGUuY29tL3BhdGgiLCJleHAiOjE3Mjg2NTg2NzIsImlzcy
I6IndpbXNlOi8vZXhhbXBsZS5jb20vc3BlY2lmaWMtd29ya2xvYWQiLCJqdGkiOiI0YjQ
yYzVmNjExZTJiMWNmYTFkMmM0MWIzYTJmYjc4MiIsInd0aCI6Ii1KaThUbE1ORmszcW16
bXBBeEJPXzdXLVl1dGNIXzJfZnVGQUZGU1YxUmcifQ.jrUBsDjWMG_FpuhLo3lNC-IBei
PQXZ4UOuttPdNj8fRmIG4ZDFF9B10y7uGbiNIhbRdpgG_KXEPLHXWnvzLmBA
]]></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[
{
  "alg": "EdDSA",
  "typ": "wimse-proof+jwt"
}
]]></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[
{
  "ath": "CL4wjfpRmNf-bdYIbYLnV9d5rMARGwKYE10wUwzC0jI",
  "aud": "https://service.example.com/path",
  "exp": 1728658672,
  "iss": "wimse://example.com/specific-workload",
  "jti": "4b42c5f611e2b1cfa1d2c41b3a2fb782",
  "wth": "-Ji8TlMNFk3qmzmpAxBO_7W-YutcH_2_fuFAFFSV1Rg"
}
]]></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.eyJpc3MiOiJ3aW1zZTovL2V4YW1wbGUuY29tL3RydX
  N0ZWQtY2VudHJhbC1hdXRob3JpdHkiLCJleHAiOjE3MTc2MTI0NzAsInN1YiI6Indpb
  XNlOi8vZXhhbXBsZS5jb20vc3BlY2lmaWMtd29ya2xvYWQiLCJqdGkiOiJ4LV8xQ1RM
  MmNjYTNDU0U0Y3diX18iLCJjbmYiOnsiandrIjp7Imt0eSI6Ik9LUCIsImNydiI6IkV
  kMjU1MTkiLCJ4IjoiX2FtUkMzWXJZYkhoSDFSdFlyTDhjU21URE1oWXRPVVRHNzhjR1
  RSNWV6ayJ9fX0.rOSUMR8I5WhM5C704l3iVdY0zFqxhugJ8Jo2xo39G7FqUTbwTzAGd
  pz2lHp6eL1M486XmRgl3uyjj6R_iuzNOA
Workload-Proof-Token: eyJhbGciOiJFZERTQSIsInR5cCI6IndpbXNlLXByb29mK2p
  3dCJ9.eyJhdGgiOiJDTDR3amZwUm1OZi1iZFlJYllMblY5ZDVyTUFSR3dLWUUxMHdVd
  3pDMGpJIiwiYXVkIjoiaHR0cHM6Ly9zZXJ2aWNlLmV4YW1wbGUuY29tL3BhdGgiLCJl
  eHAiOjE3Mjg2NTg2NzIsImlzcyI6IndpbXNlOi8vZXhhbXBsZS5jb20vc3BlY2lmaWM
  td29ya2xvYWQiLCJqdGkiOiI0YjQyYzVmNjExZTJiMWNmYTFkMmM0MWIzYTJmYjc4Mi
  IsInd0aCI6Ii1KaThUbE1ORmszcW16bXBBeEJPXzdXLVl1dGNIXzJfZnVGQUZGU1YxU
  mcifQ.jrUBsDjWMG_FpuhLo3lNC-IBeiPQXZ4UOuttPdNj8fRmIG4ZDFF9B10y7uGbi
  NIhbRdpgG_KXEPLHXWnvzLmBA

{"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>The <tt>wth</tt> claim is present and matches the hash of the token value conveyed in the <tt>Workload-Identity-Token</tt> header.</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 section 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 document.</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 anchor="app-level-comparison">
        <name>Comparing the DPoP Inspired Option with Message Signatures</name>
        <t><cref>
This section is temporarily part of the draft, while we expect the working group
to select one of these options.
</cref></t>
        <t>The two workload protection options have different strengths and weaknesses regarding implementation
complexity, extensibility, and security.
Here is a summary of the main differences between
<xref target="dpop-esque-auth"/> and <xref target="http-sig-auth"/>.</t>
        <ul spacing="normal">
          <li>
            <t>The DPoP-inspired solution is less HTTP-specific, making it easier to adapt for
other protocols beyond HTTP. This flexibility is particularly valuable for
asynchronous communication scenarios, such as event-driven systems.</t>
          </li>
          <li>
            <t>Message Signatures, on the other hand, benefit from an existing HTTP-specific RFC with
some established implementations. This existing groundwork means that this option could
be simpler to deploy, to the extent such implementations are available and easily integrated.</t>
          </li>
          <li>
            <t>Given that the WIT (Workload Identity Token) is a type of JWT, the
DPoP-inspired approach that also uses JWT is less complex and technology-intensive than Message
Signatures. In contrast, Message Signatures introduce an additional layer of
technology, potentially increasing the complexity of the overall system.</t>
          </li>
          <li>
            <t>Message Signatures offer superior integrity protection, particularly by mitigating
message modification by middleboxes. See also <xref target="middleboxes"/>.</t>
          </li>
          <li>
            <t>A key advantage of Message Signatures is that they support response signing.
This opens up the possibility for future decisions about whether to make
response signing mandatory, allowing for flexibility in the specification
and/or in specific deployment scenarios.</t>
          </li>
          <li>
            <t>In general, Message Signatures provide greater flexibility compared to
the DPoP-inspired approach. Future versions of this draft (and subsequent implementations) can decide
whether specific aspects of message signing, such as coverage of particular fields,
should be mandatory or optional. Covering more fields will constrain the proof
so it cannot be easily reused in another context, which is often a security improvement. The DPoP inspired approach could
be designed to include extensibility to sign other fields, but this would make it closer to
trying to reinvent Message Signatures.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="mutual-tls">
      <name>Using Mutual TLS for Service To Service Authentication</name>
      <t>As noted in the introduction, for many deployments, transport-level protection
of application traffic using TLS is ideal.</t>
      <t>In this solution, 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.
If the workload will act as a TLS server for clients that do not understand WIMSE workload
identities it is <bcp14>RECOMMENDED</bcp14> that the WIMSE certificate contain a SubjectAltName of type
DNSName with the appropriate DNS names for the server.
The certificate may contain SubjectAltName extensions of other types.</t>
      <t>WIMSE certificates may be used to authenticate both the server and client side of the connections.  When validating a WIMSE certificate, the relying party <bcp14>MUST</bcp14> use the trust anchors configured for the trust domain in the WIMSE identity to validate the peer's certificate.  Other PKIX <xref target="RFC5280"/> path validation rules apply. 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>
      <t>Servers wishing to use the WIMSE certificate 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 server certificates <bcp14>SHOULD</bcp14> have the <tt>id-kp-serverAuth</tt> extended key usage <xref target="RFC5280"/> field set and WIMSE client certificates <bcp14>SHOULD</bcp14> have the <tt>id-kp-clientAuth</tt> extended key usage field set. A certificate that is used for both client and server connections may have both fields set. This specification does not make any other requirements beyond <xref target="RFC5280"/> on the contents of WIMSE certificates or on the certification authorities that issue WIMSE certificates.</t>
      <section anchor="server-name">
        <name>Server Name Validation</name>
        <t>If the WIMSE client uses a hostname to connect to the server and the server certificate contain a DNS SAN the client <bcp14>MUST</bcp14> perform standard host name validation (<xref section="6.3" sectionFormat="of" target="RFC9525"/>) unless it is configured with the information necessary to validate the peer's WIMSE identity. If the client did not perform standard host name validation then the WIMSE client <bcp14>SHOULD</bcp14> further use the WIMSE workload identifier to validate the server.  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 workload identifier in a deployment specific way. Validating the WIMSE workload identity could be a simple match on the trust domain and path portions of the identifier or validation may be based on the specific details on how the identifier is constructed. The path portion of the WIMSE identifier <bcp14>MUST</bcp14> always be considered in the scope of the trust domain.</t>
      </section>
      <section anchor="client-name">
        <name>Client Authorization Using the WIMSE Identity</name>
        <t>The server application retrieves the client certificate WIMSE URI subjectAltName from the TLS layer for use in authorization, accounting and auditing.  For example, the full WIMSE URI may be matched against ACLs to authorize actions requested by the peer and the URI may be included in log messages to associate actions to the client workload for audit purposes. A deployment may specify other authorization policies based on the specific details of how the WIMSE identifier is constructed. The path portion of the WIMSE identifier <bcp14>MUST</bcp14> always be considered in the scope of the trust domain.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="wimse-identity">
        <name>WIMSE Identity</name>
        <t>The WIMSE Identifier is scoped within an issuer and therefore any sub-components (path portion of Identifier) are only unique within a trust domain defined by the issuer. Using a WIMSE Identifier 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 anchor through some mechanism such as a JWKS or X.509 certificate chain. The association of an issuer, trust domain and a cryptographic trust anchor <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-identity-token-and-proof-of-possession">
        <name>Workload Identity Token and Proof of Possession</name>
        <t>The Workload Identity 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="middleboxes">
        <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>, <tt>wth</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 anchor="sec-combined-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="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </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="https://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="8" month="July" 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-01"/>
        </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="3" month="July" 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-03"/>
        </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 688?>

<section anchor="document-history">
      <name>Document History</name>
      <t><cref>RFC Editor: please remove before publication.</cref></t>
      <section anchor="draft-ietf-wimse-s2s-protocol-01">
        <name>draft-ietf-wimse-s2s-protocol-01</name>
        <ul spacing="normal">
          <li>
            <t>Addressed multiple comments from Pieter.</t>
          </li>
          <li>
            <t>Clarified WIMSE identity concepts, specifically "trust domain"
and "workload identifier".</t>
          </li>
          <li>
            <t>Much more detail around mTLS, including some normative language.</t>
          </li>
          <li>
            <t>WIT (the identity token) is now included in the WPT proof of possession.</t>
          </li>
          <li>
            <t>Added a section comparing the DPoP-inspired app-level security option to
the Message Signature-based alternative.</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-ietf-wimse-s2s-protocol-00">
        <name>draft-ietf-wimse-s2s-protocol-00</name>
        <ul spacing="normal">
          <li>
            <t>Initial WG draft, an exact copy of draft-sheffer-wimse-s2s-protocol-00</t>
          </li>
          <li>
            <t>Added this document history section</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t><cref>TODO acknowledge.</cref></t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
