<?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.21 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-wimse-s2s-protocol-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="WIMSE S2S Auth">WIMSE Service to Service Authentication</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-s2s-protocol-02"/>
    <author fullname="Brian Campbell">
      <organization>Ping Identity</organization>
      <address>
        <email>bcampbell@pingidentity.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="2025" month="January" day="17"/>
    <area>Applications and Real-Time</area>
    <workgroup>Workload Identity in Multi System Environments</workgroup>
    <keyword>workload</keyword>
    <keyword>identity</keyword>
    <abstract>
      <?line 56?>

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

<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
(numbers refer to the sequence of steps listed below):</t>
        <figure anchor="high-level-seq">
          <name>Sequence of Operations</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="368" width="352" viewBox="0 0 352 368" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,176" fill="none" stroke="black"/>
                <path d="M 8,272 L 8,352" fill="none" stroke="black"/>
                <path d="M 56,184 L 56,264" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,264" fill="none" stroke="black"/>
                <path d="M 112,32 L 112,176" fill="none" stroke="black"/>
                <path d="M 112,272 L 112,352" fill="none" stroke="black"/>
                <path d="M 240,32 L 240,176" fill="none" stroke="black"/>
                <path d="M 240,272 L 240,352" fill="none" stroke="black"/>
                <path d="M 256,184 L 256,224" fill="none" stroke="black"/>
                <path d="M 272,144 L 272,176" fill="none" stroke="black"/>
                <path d="M 304,184 L 304,264" fill="none" stroke="black"/>
                <path d="M 344,32 L 344,176" fill="none" stroke="black"/>
                <path d="M 344,272 L 344,352" 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,62 L 232,62" fill="none" stroke="black"/>
                <path d="M 120,66 L 232,66" fill="none" stroke="black"/>
                <path d="M 120,110 L 232,110" fill="none" stroke="black"/>
                <path d="M 120,114 L 232,114" fill="none" stroke="black"/>
                <path d="M 272,144 L 344,144" fill="none" stroke="black"/>
                <path d="M 120,158 L 232,158" fill="none" stroke="black"/>
                <path d="M 120,162 L 232,162" fill="none" stroke="black"/>
                <path d="M 8,176 L 112,176" fill="none" stroke="black"/>
                <path d="M 240,176 L 344,176" fill="none" stroke="black"/>
                <path d="M 72,224 L 256,224" fill="none" stroke="black"/>
                <path d="M 8,272 L 112,272" fill="none" stroke="black"/>
                <path d="M 240,272 L 344,272" fill="none" stroke="black"/>
                <path d="M 8,352 L 112,352" fill="none" stroke="black"/>
                <path d="M 240,352 L 344,352" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="312,264 300,258.4 300,269.6" fill="black" transform="rotate(90,304,264)"/>
                <polygon class="arrowhead" points="312,184 300,178.4 300,189.6" fill="black" transform="rotate(270,304,184)"/>
                <polygon class="arrowhead" points="264,184 252,178.4 252,189.6" fill="black" transform="rotate(270,256,184)"/>
                <polygon class="arrowhead" points="240,112 228,106.4 228,117.6" fill="black" transform="rotate(0,232,112)"/>
                <polygon class="arrowhead" points="240,64 228,58.4 228,69.6" fill="black" transform="rotate(0,232,64)"/>
                <polygon class="arrowhead" points="128,160 116,154.4 116,165.6" fill="black" transform="rotate(180,120,160)"/>
                <polygon class="arrowhead" points="128,64 116,58.4 116,69.6" fill="black" transform="rotate(180,120,64)"/>
                <polygon class="arrowhead" points="80,264 68,258.4 68,269.6" fill="black" transform="rotate(90,72,264)"/>
                <polygon class="arrowhead" points="64,264 52,258.4 52,269.6" fill="black" transform="rotate(90,56,264)"/>
                <polygon class="arrowhead" points="64,184 52,178.4 52,189.6" fill="black" transform="rotate(270,56,184)"/>
                <g class="text">
                  <text x="176" y="52">(1)</text>
                  <text x="52" y="100">Workload</text>
                  <text x="96" y="100">A</text>
                  <text x="176" y="100">(3)</text>
                  <text x="284" y="100">Workload</text>
                  <text x="328" y="100">B</text>
                  <text x="176" y="148">(5)</text>
                  <text x="304" y="164">PEP</text>
                  <text x="168" y="212">(2)</text>
                  <text x="32" y="228">(2)</text>
                  <text x="328" y="228">(4)</text>
                  <text x="60" y="308">Identity</text>
                  <text x="288" y="308">PDP</text>
                  <text x="60" y="324">Server</text>
                  <text x="292" y="324">(optional)</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+------------+               +------------+
|            |      (1)      |            |
|            |<=============>|            |
|            |               |            |
| Workload A |      (3)      | Workload B |
|            |==============>|            |
|            |               |            |
|            |      (5)      |   +--------+
|            |<==============|   |  PEP   |
+------------+               +---+--------+
      ^                        ^     ^
      |            (2)         |     |
  (2) | +----------------------+     | (4)
      | |                            |
      v v                            v
+------------+               +------------+
|            |               |            |
|  Identity  |               |    PDP     |
|   Server   |               | (optional) |
|            |               |            |
+------------+               +------------+
]]></artwork>
          </artset>
        </figure>
        <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>
        <ol spacing="normal" type="1"><li>
            <t>A transport connection is set up. In the case of mutual TLS, this includes authentication of both workloads to
one another. In the case of application-level security, the TLS connection is typically one-way authenticated,
and workload-level authentication does not yet take place.</t>
          </li>
          <li>
            <t>Workload A (and similarly, Workload B) 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>In the case of application-level security, Workload B authenticates Workload A (when using mutual TLS, this happened in step 1).
In either case, Workload B decides whether to authorize the call.
In certain architectures, Workload B may need to consult with an external server when making this decision.</t>
          </li>
          <li>
            <t>Workload B returns a response to Workload A, which may be an error response or a regular one.</t>
          </li>
        </ol>
      </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 / "-" / "_")
JWT =  base64url "." base64url "." base64url
WIT =  JWT
]]></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.
The ABNF syntax of the <tt>Workload-Proof-Token</tt> header field is:</t>
        <figure anchor="wpt-header-abnf">
          <name>Workload-Proof-Token Header Field ABNF</name>
          <sourcecode type="abnf"><![CDATA[
WPT =  JWT
]]></sourcecode>
        </figure>
        <t>where the <tt>JWT</tt> projection is defined in <xref target="wit-header-abnf"/>.</t>
        <t>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"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

POST /path HTTP/1.1
Host: service.example.com
Content-Type: application/json
Authorization: Bearer 16_mAd0GiwaZokU26_0902100
Workload-Identity-Token: eyJ0eXAiOiJ3aW1zZS1pZCtqd3QiLCJhbGciOiJFUzI\
1NiIsImtpZCI6Ikp1bmUgNSJ9.eyJpc3MiOiJ3aW1zZTovL2V4YW1wbGUuY29tL3RydX\
N0ZWQtY2VudHJhbC1hdXRob3JpdHkiLCJleHAiOjE3MTc2MTI0NzAsInN1YiI6IndpbX\
NlOi8vZXhhbXBsZS5jb20vc3BlY2lmaWMtd29ya2xvYWQiLCJqdGkiOiJ4LV8xQ1RMMm\
NjYTNDU0U0Y3diX18iLCJjbmYiOnsiandrIjp7Imt0eSI6Ik9LUCIsImNydiI6IkVkMj\
U1MTkiLCJ4IjoiX2FtUkMzWXJZYkhoSDFSdFlyTDhjU21URE1oWXRPVVRHNzhjR1RSNW\
V6ayJ9fX0.rOSUMR8I5WhM5C704l3iVdY0zFqxhugJ8Jo2xo39G7FqUTbwTzAGdpz2lH\
p6eL1M486XmRgl3uyjj6R_iuzNOA
Workload-Proof-Token: eyJhbGciOiJFZERTQSIsInR5cCI6IndpbXNlLXByb29mK2\
p3dCJ9.eyJhdGgiOiJDTDR3amZwUm1OZi1iZFlJYllMblY5ZDVyTUFSR3dLWUUxMHdVd\
3pDMGpJIiwiYXVkIjoiaHR0cHM6Ly9zZXJ2aWNlLmV4YW1wbGUuY29tL3BhdGgiLCJle\
HAiOjE3Mjg2NTg2NzIsImlzcyI6IndpbXNlOi8vZXhhbXBsZS5jb20vc3BlY2lmaWMtd\
29ya2xvYWQiLCJqdGkiOiI0YjQyYzVmNjExZTJiMWNmYTFkMmM0MWIzYTJmYjc4MiIsI\
nd0aCI6Ii1KaThUbE1ORmszcW16bXBBeEJPXzdXLVl1dGNIXzJfZnVGQUZGU1YxUmcif\
Q.jrUBsDjWMG_FpuhLo3lNC-IBeiPQXZ4UOuttPdNj8fRmIG4ZDFF9B10y7uGbiNIhbR\
dpgG_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>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 anchor="coexist">
        <name>Coexistence with JWT Bearer Tokens</name>
        <t>The WIT and WPT define new HTTP headers. They can therefore be presented along with existing headers used for JWT bearer tokens. This
property allows for transition from mechanisms using identity tokens based on bearer JWTs to proof of possession based WITs.
A workload may implement a policy that accepts both bearer tokens and WITs during a transition period. This policy may be configurable
per-caller to allow the workload to reject bearer tokens from callers that support WITs. Once a deployment fully supports WITs, then the use of
bearer tokens for identity can be disabled through policy.  Implementations should be careful when implementing such a transition strategy,
since the decision which token to prefer is made when the caller's identity has still not been authenticated, and needs to be revalidated following the authentication step.</t>
        <t>The WIT can also coexist with tokens used to establish security context, such as transaction tokens <xref target="I-D.ietf-oauth-transaction-tokens"/>. In this case a workload's
authorization policy may take into account both the sending workload's identity and the information in the context token. For example, the
identity in the WIT may be used to establish which API calls can be made and information in the context token may be used to determine
which specific resources can be accessed.</t>
      </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 workload identifier 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 WIMSE workload identifier from the client certificate subjectAltName, which in turn is obtained from the TLS layer. The identifier is used in authorization, accounting and auditing.
For example, the full WIMSE workload identifier may be matched against ACLs to authorize actions requested by the peer and the identifier 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="7" month="January" year="2025"/>
            <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-03"/>
        </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>SPIRL</organization>
            </author>
            <date day="30" month="December" 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-04"/>
        </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 719?>

<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-02">
        <name>draft-ietf-wimse-s2s-protocol-02</name>
        <ul spacing="normal">
          <li>
            <t>Coexistence with bearer tokens.</t>
          </li>
          <li>
            <t>Improve the architecture diagram.</t>
          </li>
          <li>
            <t>Some more ABNF.</t>
          </li>
          <li>
            <t>Clarified identifiers and URIs.</t>
          </li>
          <li>
            <t>Moved an author to acknowledgments.</t>
          </li>
        </ul>
      </section>
      <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>The authors would like to thank Pieter Kasselman for his detailed comments.</t>
      <t>We thank Daniel Feldman for his contributions to earlier versions of this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
IkNTgpdAdSEGsaaPbOjEpf8HF1C3XWqhAAA=

-->

</rfc>
