<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-wimse-arch-05" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="WIMSE Architecture">Workload Identity in a Multi System Environment (WIMSE) Architecture</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-arch-05"/>
    <author initials="J." surname="Salowey" fullname="Joseph Salowey">
      <organization>CyberArk</organization>
      <address>
        <email>joe@salowey.net</email>
      </address>
    </author>
    <author initials="Y." surname="Rosomakho" fullname="Yaroslav Rosomakho">
      <organization>Zscaler</organization>
      <address>
        <email>yaroslavros@gmail.com</email>
      </address>
    </author>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization abbrev="H-BRS">University of Applied Sciences Bonn-Rhein-Sieg</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>Hannes.Tschofenig@gmx.net</email>
      </address>
    </author>
    <date year="2025" month="July" day="07"/>
    <area>Applications and Real-Time</area>
    <workgroup>Workload Identity in Multi System Environments</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 39?>

<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>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Workload Identity in Multi System Environments Working Group mailing list (wimse@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/wimse/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/jsalowey/wimse-arch"/>.</t>
    </note>
  </front>
  <middle>
    <?line 43?>

<section anchor="introduction">
      <name>Introduction</name>
      <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 systems composed of workloads, where a workload is defined as a running instance of software executing for a specific purpose.</t>
      <t>Workloads need to be provisioned with an identity when they are started. Often, additional information needs to be provided, such as trust anchors and security context details. Workloads make use of identity information and additional context information to perform authentication and authorization. Workload identity credentials are used to authenticate communications between workloads.</t>
      <t>This architecture considers two ways to express identity information: X.509 certificates often used in the TLS layer and JSON Web Tokens (JWTs) used at the application layer. The applicability of given token format depends on application and security context and will be explored in later sections.</t>
      <t>Once the workload is started and has obtained identity information, it can start performing its functions. Once the workload is invoked it may require interaction with other workloads. An example of such interaction is shown in <xref target="I-D.ietf-oauth-transaction-tokens"/> where an externally-facing endpoint is invoked using conventional authorization mechanism, such as an OAuth 2.0 access token. The interaction with other workload may require the security context associated with the authorization to be passed along the call chain.</t>
      <t>In the rest of the document we describe terminology and use cases, discuss details of the architecture, and discuss threats.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>This document uses the following terms:</t>
      <ul spacing="normal">
        <li>
          <t>Workload</t>
        </li>
      </ul>
      <t>A workload is a running instance of software executing for a specific purpose. Workload typically interacts with other parts of a larger system. A workload may exist for a very short durations of time (fraction of a second) and run for a specific purpose such as to provide a response to an API request. Other kinds of workloads may execute for a very long duration, such as months or years. Examples include database services and machine learning training jobs.</t>
      <ul spacing="normal">
        <li>
          <t>Security Context</t>
        </li>
      </ul>
      <t>A security context provides information needed for a workload to perform its function. This information is often used for authorization, accounting and auditing purposes and often contains information about the request being made. Some examples include user information, software and hardware information or information about what processing has already happened for the request. Different pieces of context information may originate from different sources.</t>
      <ul spacing="normal">
        <li>
          <t>Identity Proxy</t>
        </li>
      </ul>
      <t>Identity proxy is an intermediary that can inspect, replace or augment workload identity and security context information. Identity proxy can be a capability of a transparent network service, such as a security gateway, or it can be implemented in a service performing explicit connection processing, such as an ingress gateway or a Content Delivery Network (CDN) service. Identity proxy <bcp14>MAY</bcp14> introduce additional context based on source identifier, communication properties and administrative policy. This context <bcp14>MAY</bcp14> be communicated as a transaction token <xref target="I-D.ietf-oauth-transaction-tokens"/>.</t>
      <ul spacing="normal">
        <li>
          <t>Remote Attestation</t>
        </li>
      </ul>
      <t>The term "attestation", as defined in <xref target="RFC9683"/>, refers to the process of generating and evaluating remote attestation Evidence. <xref target="RFC9334"/> describes Evidence and the different communication patterns.</t>
      <ul spacing="normal">
        <li>
          <t>Workload Identity Credential</t>
        </li>
      </ul>
      <t>A credential that contains a workload identifier used for service to service authentication. The credential is bound to a cryptographic key and requires that the presenter provide proof of possession of the secret key material. Examples of this credential inlcude Workload Identity Certificates and the Workload Identity Token defined in <xref target="I-D.ietf-wimse-s2s-protocol"/>. Deployments may also deploy bearer tokens as workload identity credentials to interoprate with legacy systems that do not support credentials bound to keys.</t>
      <ul spacing="normal">
        <li>
          <t>Trust Domain</t>
        </li>
      </ul>
      <t>A trust domain is a logical grouping of systems that share a common set of security controls and policies. As described in <xref target="I-D.ietf-wimse-s2s-protocol"/>, trust domains should be identified by a fully qualified domain name associated with the organization defining the trust domain.
# Architecture</t>
      <section anchor="whimsical-identity">
        <name>Workload Identity Concepts</name>
        <t>Workload identity construct consists of three basic building blocks: trust domain, workload identifier and identity credentials. These components are sufficient for establishing authentication, authorization and accounting processes. More complex workload identity constructs can be created from these basic building blocks.</t>
        <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. Workload 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 associated with the organization defining the trust domain. The FQDN format of a trust domain helps to ensure global uniqueness of the trust domain identifier. 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 domain 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>The WIMSE architecture 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>.</t>
          <t>While IP addresses are allowed as host names in the URI encoding rules, they <bcp14>MUST NOT</bcp14> be used to represent trust domains except in the case where they are needed for compatibility with legacy naming schemes.</t>
          <t>A workload identifier only has a meaning within the scope of a specific issuer. Two identities of the same value signed by different issuers may or may not refer to the same workload. In order to avoid collisions identity URIs <bcp14>SHOULD</bcp14> specify, in the URI's "authority" field, the trust domain associated with an issuer that is selected from a global name space such as host domains. However, the validator of an identity credential <bcp14>MUST</bcp14> make sure that they are using the correct issuer credential to verify the identity credential and that the issuer is trusted to issue tokens for the defined trust domain.</t>
        </section>
        <section anchor="workload-identity-credentials">
          <name>Workload Identity Credentials</name>
          <t>An agent provisions the identity credentials to the workload. These credentials are represented in form of JWT tokens and/or X.509 certificates.</t>
          <t>JWT bearer tokens are presented to another party as a proof of identity. They are signed to prevent forgery, however since these credentials are often not bound to other information it is possible that they could be stolen and reused elsewhere. To mitigate these risks and make the token more generally useful the WIMSE architecture defines a workload identity credential that binds a JWT to a cryptographic key.</t>
          <t>Both workload identity certificate and workload identity token (WIT) credentials consist of two parts:</t>
          <ul spacing="normal">
            <li>
              <t>a certificate or WIT is a signed data structure that contains a public key and identity information</t>
            </li>
            <li>
              <t>a corresponding private key</t>
            </li>
          </ul>
          <t>The workload identity certificate or WIT is presented during authentication, however the private key is kept secret and only used in cryptographic computation to prove that the presenter has access to the private key corresponding to the public key.</t>
        </section>
      </section>
      <section anchor="workload-identity-system-scenarios">
        <name>Workload Identity System Scenarios</name>
        <section anchor="basic-workload-identity-scenario">
          <name>Basic Workload Identity Scenario</name>
          <figure anchor="arch-basic">
            <name>Basic example workload application system.</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="496" width="688" viewBox="0 0 688 496" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,176 L 8,240" fill="none" stroke="black"/>
                  <path d="M 112,176 L 112,240" fill="none" stroke="black"/>
                  <path d="M 168,80 L 168,416" fill="none" stroke="black"/>
                  <path d="M 192,32 L 192,72" fill="none" stroke="black"/>
                  <path d="M 192,424 L 192,480" fill="none" stroke="black"/>
                  <path d="M 216,80 L 216,416" fill="none" stroke="black"/>
                  <path d="M 264,112 L 264,208" fill="none" stroke="black"/>
                  <path d="M 264,240 L 264,384" fill="none" stroke="black"/>
                  <path d="M 296,80 L 296,96" fill="none" stroke="black"/>
                  <path d="M 296,128 L 296,144" fill="none" stroke="black"/>
                  <path d="M 296,208 L 296,288" fill="none" stroke="black"/>
                  <path d="M 296,352 L 296,368" fill="none" stroke="black"/>
                  <path d="M 296,400 L 296,416" fill="none" stroke="black"/>
                  <path d="M 360,144 L 360,208" fill="none" stroke="black"/>
                  <path d="M 360,288 L 360,352" fill="none" stroke="black"/>
                  <path d="M 416,80 L 416,144" fill="none" stroke="black"/>
                  <path d="M 416,352 L 416,416" fill="none" stroke="black"/>
                  <path d="M 424,208 L 424,288" fill="none" stroke="black"/>
                  <path d="M 512,224 L 512,240" fill="none" stroke="black"/>
                  <path d="M 512,272 L 512,288" fill="none" stroke="black"/>
                  <path d="M 576,112 L 576,224" fill="none" stroke="black"/>
                  <path d="M 576,288 L 576,384" fill="none" stroke="black"/>
                  <path d="M 632,224 L 632,288" fill="none" stroke="black"/>
                  <path d="M 680,32 L 680,480" fill="none" stroke="black"/>
                  <path d="M 192,32 L 440,32" fill="none" stroke="black"/>
                  <path d="M 560,32 L 680,32" fill="none" stroke="black"/>
                  <path d="M 168,80 L 216,80" fill="none" stroke="black"/>
                  <path d="M 296,80 L 416,80" fill="none" stroke="black"/>
                  <path d="M 264,112 L 296,112" fill="none" stroke="black"/>
                  <path d="M 416,112 L 576,112" fill="none" stroke="black"/>
                  <path d="M 296,144 L 352,144" fill="none" stroke="black"/>
                  <path d="M 368,144 L 416,144" fill="none" stroke="black"/>
                  <path d="M 8,176 L 112,176" fill="none" stroke="black"/>
                  <path d="M 112,208 L 160,208" fill="none" stroke="black"/>
                  <path d="M 216,208 L 264,208" fill="none" stroke="black"/>
                  <path d="M 296,208 L 424,208" fill="none" stroke="black"/>
                  <path d="M 512,224 L 632,224" fill="none" stroke="black"/>
                  <path d="M 8,240 L 112,240" fill="none" stroke="black"/>
                  <path d="M 216,240 L 264,240" fill="none" stroke="black"/>
                  <path d="M 424,256 L 512,256" fill="none" stroke="black"/>
                  <path d="M 296,288 L 424,288" fill="none" stroke="black"/>
                  <path d="M 512,288 L 632,288" fill="none" stroke="black"/>
                  <path d="M 296,352 L 352,352" fill="none" stroke="black"/>
                  <path d="M 368,352 L 416,352" fill="none" stroke="black"/>
                  <path d="M 264,384 L 296,384" fill="none" stroke="black"/>
                  <path d="M 416,384 L 576,384" fill="none" stroke="black"/>
                  <path d="M 168,416 L 216,416" fill="none" stroke="black"/>
                  <path d="M 296,416 L 416,416" fill="none" stroke="black"/>
                  <path d="M 192,480 L 680,480" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="520,256 508,250.4 508,261.6" fill="black" transform="rotate(0,512,256)"/>
                  <polygon class="arrowhead" points="368,352 356,346.4 356,357.6" fill="black" transform="rotate(90,360,352)"/>
                  <polygon class="arrowhead" points="368,144 356,138.4 356,149.6" fill="black" transform="rotate(270,360,144)"/>
                  <polygon class="arrowhead" points="304,384 292,378.4 292,389.6" fill="black" transform="rotate(0,296,384)"/>
                  <polygon class="arrowhead" points="304,112 292,106.4 292,117.6" fill="black" transform="rotate(0,296,112)"/>
                  <polygon class="arrowhead" points="168,208 156,202.4 156,213.6" fill="black" transform="rotate(0,160,208)"/>
                  <g class="text">
                    <text x="464" y="36">Trust</text>
                    <text x="524" y="36">Boundary</text>
                    <text x="488" y="100">(3)</text>
                    <text x="348" y="116">Workload</text>
                    <text x="392" y="116">1</text>
                    <text x="192" y="132">G</text>
                    <text x="192" y="148">a</text>
                    <text x="192" y="164">t</text>
                    <text x="192" y="180">e</text>
                    <text x="384" y="180">(1)</text>
                    <text x="136" y="196">(2)</text>
                    <text x="192" y="196">w</text>
                    <text x="240" y="196">(3)</text>
                    <text x="32" y="212">App</text>
                    <text x="76" y="212">Client</text>
                    <text x="192" y="212">a</text>
                    <text x="192" y="228">y</text>
                    <text x="360" y="244">CA/Credential</text>
                    <text x="472" y="244">(1)</text>
                    <text x="192" y="260">S</text>
                    <text x="240" y="260">(4)</text>
                    <text x="360" y="260">Service</text>
                    <text x="572" y="260">Workload</text>
                    <text x="616" y="260">3</text>
                    <text x="192" y="276">e</text>
                    <text x="192" y="292">r</text>
                    <text x="192" y="308">v</text>
                    <text x="192" y="324">i</text>
                    <text x="384" y="324">(1)</text>
                    <text x="192" y="340">c</text>
                    <text x="192" y="356">e</text>
                    <text x="480" y="372">(4)</text>
                    <text x="348" y="388">Workload</text>
                    <text x="392" y="388">2</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
                       +-------------------------------Trust Boundary---------------+
                       |                                                            |
                       |                                                            |
                    +-----+         +--------------+                                |
                    |     |         |              |       (3)                      |
                    |     |     +--->  Workload 1  +-------------------+            |
                    |  G  |     |   |              |                   |            |
                    |  a  |     |   +-------^------+                   |            |
                    |  t  |     |           |                          |            |
+------------+      |  e  |     |           | (1)                      |            |
|            | (2)  |  w  | (3) |           |                          |            |
| App Client +----->|  a  +-----+   +-------+-------+                  |            |
|            |      |  y  |         |               |          +-------+------+     |
+------------+      |     +-----+   | CA/Credential |    (1)   |              |     |
                    |  S  | (4) |   |    Service    +---------->   Workload 3 |     |
                    |  e  |     |   |               |          |              |     |
                    |  r  |     |   +-------+-------+          +-------+------+     |
                    |  v  |     |           |                          |            |
                    |  i  |     |           | (1)                      |            |
                    |  c  |     |           |                          |            |
                    |  e  |     |   +-------v------+                   |            |
                    |     |     |   |              |      (4)          |            |
                    |     |     +--->  Workload 2  +-------------------+            |
                    |     |         |              |                                |
                    +-----+         +--------------+                                |
                       |                                                            |
                       |                                                            |
                       |                                                            |
                       +------------------------------------------------------------+
]]></artwork>
            </artset>
          </figure>
          <t>The above diagram presents a basic workload application system.  The large box represents a trust domain within which the workload application is hosted.  Within this example
there are three workloads, a gateway, that accepts external clients and a CA/credential service that issues workload identity credentials for the trust domain.  External
to the workload application system there is an application client that calls APIs on workloads.</t>
          <t>Here is a brief summary of each component</t>
          <ul spacing="normal">
            <li>
              <t>Trust Domain</t>
            </li>
          </ul>
          <t>The large box represents a trust domain of the application that is composed of several workloads.  A trust domain may have a more complex internal structure with more workloads, multiple gateways, internal infrastructure, and other services.</t>
          <ul spacing="normal">
            <li>
              <t>Workload</t>
            </li>
          </ul>
          <t>Three workloads are shown.  Each workload is an instance of running software executing for a specific purpose.  Workloads obtain their identity credentials from a Credentials Service (1) and use them to authenticate to other workloads and systems in the process
of sending and receiving requests to and from external systems or other internal workloads.</t>
          <ul spacing="normal">
            <li>
              <t>Gateway Service</t>
            </li>
          </ul>
          <t>A gateway service typically acts as an intermediary between the internal application trust domain and external systems. The gateway is responsible for ensuring appropriate isolation between external and internal domains. It also routes incoming requests to the correct workload.
The gateway <bcp14>MAY</bcp14> also implement identity proxy functionality including authentication, token exchange, and token transformation.</t>
          <ul spacing="normal">
            <li>
              <t>CA/Credential Service</t>
            </li>
          </ul>
          <t>In this diagram the token/Credential service is a service responsible for issuing workload identities to workloads in the same trust domain. The credentials are often X.509 based or JWT based.</t>
          <t>High level flows within the diagram</t>
          <ul spacing="normal">
            <li>
              <t>(1) Workload Identity Credential Distribution</t>
            </li>
          </ul>
          <t>Workloads typically retrieve their workload identity credentials early in their lifecycle from a credentials service associated with their trust domain. The protocol interaction for
obtaining credentials varies with deployment and is not detailed here.</t>
          <ul spacing="normal">
            <li>
              <t>(2) Application client Requests</t>
            </li>
          </ul>
          <t>Clients send API requests to the application. In the example above, the gateway routes the request to the correct workload. In addition, the gateway may assist in authenticating the incoming request and provide information resulting from the authentication to the target workload. The authentication exchange is not covered in detail in this example.
The client request is typically made over HTTPS, but other protocols may be used in some systems. The gateway usually terminates the TLS session so it has visibility into the request in order to route it correctly.</t>
          <ul spacing="normal">
            <li>
              <t>(3) API request to workload 1</t>
            </li>
          </ul>
          <t>The gateway is configured to forward requests to the correct workload.  The gateway often modifies the request to include specific authentication information about the application client and to remove any information that should not be forwarded internally.  The gateway authenticates the workload before forwarding the request.  This authentication usually uses TLS. The target workload may authenticate the gateway using TLS or some other means. As part of servicing the request the workload must make a request to another workload in the system.  In this scenario the workload is making a request to workload 3 over HTTPS.  Workload 1 may be able to authenticate the identity of workload 3 through the TLS protocol to ensure it is making a request of the right party.  Workload 3 will authenticate workload 1 using its workload identity credentials. If the Workload Identity Credentials are workload identity certificates then this can happen through TLS client authentication (mutual TLS). Alternatively, the workloads can use a JWT based authentication mechanism to authenticate on another. Workload three can use the authenticated identity of workload 1 to determine which APIs workload 1 is authorized 2 and to associated the authenticated identity with logs and other audit information.</t>
          <ul spacing="normal">
            <li>
              <t>(4) API request to workload 2</t>
            </li>
          </ul>
          <t>Similarly to the previous flow, the gateway may determine that for another API call, the application client's request needs to be handled by workload 2. The case behaves the same as the previous flow except that the gateway may need to authenticate workload 2 before forwarding traffic to it. Workload 3 will then authorize and audit the request based on the authenticated identity of workload 2. Workload 2 and workload 1 may be authorized to use different APIs on workload 3. If workload 1 or 2 makes an API request that it is not authorized for, then workload 3 will reject the request.</t>
        </section>
        <section anchor="context-and-workload-identity">
          <name>Context and workload Identity</name>
          <figure anchor="arch-context">
            <name>Context example workload application system.</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="512" width="528" viewBox="0 0 528 512" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,208 L 8,256" fill="none" stroke="black"/>
                  <path d="M 72,208 L 72,256" fill="none" stroke="black"/>
                  <path d="M 120,80 L 120,416" fill="none" stroke="black"/>
                  <path d="M 144,32 L 144,80" fill="none" stroke="black"/>
                  <path d="M 144,416 L 144,480" fill="none" stroke="black"/>
                  <path d="M 168,80 L 168,416" fill="none" stroke="black"/>
                  <path d="M 224,208 L 224,272" fill="none" stroke="black"/>
                  <path d="M 328,64 L 328,160" fill="none" stroke="black"/>
                  <path d="M 328,208 L 328,272" fill="none" stroke="black"/>
                  <path d="M 384,208 L 384,272" fill="none" stroke="black"/>
                  <path d="M 464,64 L 464,160" fill="none" stroke="black"/>
                  <path d="M 496,208 L 496,272" fill="none" stroke="black"/>
                  <path d="M 520,32 L 520,480" fill="none" stroke="black"/>
                  <path d="M 144,32 L 328,32" fill="none" stroke="black"/>
                  <path d="M 448,32 L 520,32" fill="none" stroke="black"/>
                  <path d="M 328,64 L 464,64" fill="none" stroke="black"/>
                  <path d="M 120,80 L 168,80" fill="none" stroke="black"/>
                  <path d="M 168,96 L 320,96" fill="none" stroke="black"/>
                  <path d="M 176,128 L 328,128" fill="none" stroke="black"/>
                  <path d="M 328,160 L 464,160" fill="none" stroke="black"/>
                  <path d="M 8,208 L 72,208" fill="none" stroke="black"/>
                  <path d="M 224,208 L 328,208" fill="none" stroke="black"/>
                  <path d="M 384,208 L 496,208" fill="none" stroke="black"/>
                  <path d="M 72,240 L 112,240" fill="none" stroke="black"/>
                  <path d="M 168,240 L 216,240" fill="none" stroke="black"/>
                  <path d="M 328,240 L 376,240" fill="none" stroke="black"/>
                  <path d="M 8,256 L 72,256" fill="none" stroke="black"/>
                  <path d="M 224,272 L 328,272" fill="none" stroke="black"/>
                  <path d="M 384,272 L 496,272" fill="none" stroke="black"/>
                  <path d="M 120,416 L 168,416" fill="none" stroke="black"/>
                  <path d="M 144,480 L 520,480" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="384,240 372,234.4 372,245.6" fill="black" transform="rotate(0,376,240)"/>
                  <polygon class="arrowhead" points="328,96 316,90.4 316,101.6" fill="black" transform="rotate(0,320,96)"/>
                  <polygon class="arrowhead" points="224,240 212,234.4 212,245.6" fill="black" transform="rotate(0,216,240)"/>
                  <polygon class="arrowhead" points="184,128 172,122.4 172,133.6" fill="black" transform="rotate(180,176,128)"/>
                  <polygon class="arrowhead" points="120,240 108,234.4 108,245.6" fill="black" transform="rotate(0,112,240)"/>
                  <g class="text">
                    <text x="352" y="36">Trust</text>
                    <text x="412" y="36">Boundary</text>
                    <text x="392" y="100">Context</text>
                    <text x="256" y="116">(3)</text>
                    <text x="392" y="132">Service</text>
                    <text x="256" y="148">(c)</text>
                    <text x="144" y="164">G</text>
                    <text x="144" y="180">a</text>
                    <text x="40" y="196">(1)</text>
                    <text x="144" y="196">t</text>
                    <text x="144" y="212">e</text>
                    <text x="48" y="228">App</text>
                    <text x="96" y="228">(2)</text>
                    <text x="144" y="228">w</text>
                    <text x="192" y="228">(4)</text>
                    <text x="360" y="228">(5)</text>
                    <text x="44" y="244">Client</text>
                    <text x="144" y="244">a</text>
                    <text x="268" y="244">workload</text>
                    <text x="312" y="244">1</text>
                    <text x="436" y="244">workload</text>
                    <text x="480" y="244">2</text>
                    <text x="96" y="260">(a)</text>
                    <text x="144" y="260">y</text>
                    <text x="192" y="260">(c)</text>
                    <text x="360" y="260">(c)</text>
                    <text x="144" y="292">S</text>
                    <text x="144" y="308">e</text>
                    <text x="144" y="324">r</text>
                    <text x="144" y="340">v</text>
                    <text x="144" y="356">i</text>
                    <text x="144" y="372">c</text>
                    <text x="144" y="388">e</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
                 +-----------------------Trust Boundary---------+
                 |                                              |
                 |                      +----------------+      |
              +--+--+                   |                |      |
              |     +------------------>|    Context     |      |
              |     |         (3)       |                |      |
              |     |<------------------+    Service     |      |
              |     |         (c)       |                |      |
              |  G  |                   +----------------+      |
              |  a  |                                           |
   (1)        |  t  |                                           |
+-------+     |  e  |      +------------+      +-------------+  |
|   App | (2) |  w  | (4)  |            |  (5) |             |  |
| Client+---->|  a  +----->| workload 1 +----->|  workload 2 |  |
+-------+ (a) |  y  | (c)  |            |  (c) |             |  |
              |     |      +------------+      +-------------+  |
              |  S  |                                           |
              |  e  |                                           |
              |  r  |                                           |
              |  v  |                                           |
              |  i  |                                           |
              |  c  |                                           |
              |  e  |                                           |
              |     |                                           |
              +--+--+                                           |
                 |                                              |
                 |                                              |
                 |                                              |
                 +----------------------------------------------+

]]></artwork>
            </artset>
          </figure>
          <t>In many cases the application system uses other security context information about the request during authorization and auditing.  The following is a basic scenario that illustrates the propagation of security context in the workload system.
Some of the components and interactions have been removed from the previous scenario for simplicity.</t>
          <ul spacing="normal">
            <li>
              <t>Context Service
This scenario adds a context service component which is responsible for creating security context based on authentication and other calculations. Context can be represented in many ways; it can be a plaintext data structure, a signed data structure such as a jwt or a pointer used to lookup the context as a data structure stored somewhere else. In one common example, creating the context may involve a token exchange converting an OAuth 2.0 access token into a different token format, such as a transaction token,  that is understood by internal services.</t>
            </li>
            <li>
              <t>(1) Initial Authentication
In the initial authentication the gateway service obtains credentials it can use with the gateway service. This authentication may involve several steps and may be performed by an external entity such as an identity provider. The authentication process will result in a credential that the gateway service can evaluate. For example, the credential could be an OAuth Access token.
If the client already has an access token that it can use to authenticate to the gateway, such as an X.509 certificate, then it may skip this step.</t>
            </li>
            <li>
              <t>(2) Application Client Request
The application client makes a request to the gateway over HTTPS.  The client may be authenticated to the gateway through TLS client authentication (mutual TLS) or through a credential such as an access token obtained in step 1.</t>
            </li>
            <li>
              <t>(3) Establishing the request context
The gateway service requests a security context token (c) from a token service. This process may entail sending an access token (a) along with other information to a token exchange endpoint to obtain the context token, which contains information about the entity accessing the system. This context is typically only relevant to the internal system and is not returned to the client.
The gateway may use alternative mechanisms to get the internal security context information (c).</t>
            </li>
            <li>
              <t>(4) Forwarding Request to Workload
The gateway forwards the request along with the context information (c) to the appropriate workload. A bearer token, such as an access token (a), is not usually forwarded as it is only meant for external access. The workload uses information in the context token in applying authorization policy to the application client's request.
If the workload does not receive a context token, then it will deny requests that rely on information from the token.</t>
            </li>
            <li>
              <t>(5) Making Additional Workload Originated Requests
The workload may need to make requests of other workloads. When making these requests, the workload includes the context information so Workload 2 can authorize and audit the request. Workload 2 may have a policy requiring Workload 1 to authenticate its service identity and provide valid context information (c) to access certain APIs.</t>
            </li>
          </ul>
        </section>
        <section anchor="cross-domain-communication">
          <name>Cross-Domain Communication</name>
          <figure anchor="arch-cross">
            <name>External request workload application system.</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="608" width="528" viewBox="0 0 528 608" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,144 L 8,192" fill="none" stroke="black"/>
                  <path d="M 72,144 L 72,192" fill="none" stroke="black"/>
                  <path d="M 120,64 L 120,352" fill="none" stroke="black"/>
                  <path d="M 144,32 L 144,64" fill="none" stroke="black"/>
                  <path d="M 144,352 L 144,416" fill="none" stroke="black"/>
                  <path d="M 168,64 L 168,352" fill="none" stroke="black"/>
                  <path d="M 176,512 L 176,576" fill="none" stroke="black"/>
                  <path d="M 224,144 L 224,208" fill="none" stroke="black"/>
                  <path d="M 240,208 L 240,512" fill="none" stroke="black"/>
                  <path d="M 304,272 L 304,336" fill="none" stroke="black"/>
                  <path d="M 312,512 L 312,576" fill="none" stroke="black"/>
                  <path d="M 328,144 L 328,208" fill="none" stroke="black"/>
                  <path d="M 360,512 L 360,576" fill="none" stroke="black"/>
                  <path d="M 384,144 L 384,208" fill="none" stroke="black"/>
                  <path d="M 392,208 L 392,272" fill="none" stroke="black"/>
                  <path d="M 400,272 L 400,336" fill="none" stroke="black"/>
                  <path d="M 464,208 L 464,512" fill="none" stroke="black"/>
                  <path d="M 488,512 L 488,576" fill="none" stroke="black"/>
                  <path d="M 496,144 L 496,208" fill="none" stroke="black"/>
                  <path d="M 520,32 L 520,416" fill="none" stroke="black"/>
                  <path d="M 144,32 L 352,32" fill="none" stroke="black"/>
                  <path d="M 472,32 L 520,32" fill="none" stroke="black"/>
                  <path d="M 120,64 L 168,64" fill="none" stroke="black"/>
                  <path d="M 8,144 L 72,144" fill="none" stroke="black"/>
                  <path d="M 224,144 L 328,144" fill="none" stroke="black"/>
                  <path d="M 384,144 L 496,144" fill="none" stroke="black"/>
                  <path d="M 72,176 L 112,176" fill="none" stroke="black"/>
                  <path d="M 168,176 L 216,176" fill="none" stroke="black"/>
                  <path d="M 328,176 L 376,176" fill="none" stroke="black"/>
                  <path d="M 8,192 L 72,192" fill="none" stroke="black"/>
                  <path d="M 224,208 L 328,208" fill="none" stroke="black"/>
                  <path d="M 384,208 L 496,208" fill="none" stroke="black"/>
                  <path d="M 304,272 L 400,272" fill="none" stroke="black"/>
                  <path d="M 304,336 L 400,336" fill="none" stroke="black"/>
                  <path d="M 120,352 L 168,352" fill="none" stroke="black"/>
                  <path d="M 144,416 L 520,416" fill="none" stroke="black"/>
                  <path d="M 176,512 L 232,512" fill="none" stroke="black"/>
                  <path d="M 248,512 L 312,512" fill="none" stroke="black"/>
                  <path d="M 360,512 L 456,512" fill="none" stroke="black"/>
                  <path d="M 472,512 L 488,512" fill="none" stroke="black"/>
                  <path d="M 176,576 L 312,576" fill="none" stroke="black"/>
                  <path d="M 360,576 L 488,576" fill="none" stroke="black"/>
                  <path d="M 312,208 C 320.83064,208 328,200.83064 328,192" fill="none" stroke="black"/>
                  <path d="M 400,208 C 391.16936,208 384,200.83064 384,192" fill="none" stroke="black"/>
                  <path d="M 384,272 C 392.83064,272 400,279.16936 400,288" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="472,512 460,506.4 460,517.6" fill="black" transform="rotate(90,464,512)"/>
                  <polygon class="arrowhead" points="384,176 372,170.4 372,181.6" fill="black" transform="rotate(0,376,176)"/>
                  <polygon class="arrowhead" points="248,512 236,506.4 236,517.6" fill="black" transform="rotate(90,240,512)"/>
                  <polygon class="arrowhead" points="224,176 212,170.4 212,181.6" fill="black" transform="rotate(0,216,176)"/>
                  <polygon class="arrowhead" points="120,176 108,170.4 108,181.6" fill="black" transform="rotate(0,112,176)"/>
                  <g class="text">
                    <text x="376" y="36">Trust</text>
                    <text x="436" y="36">Boundary</text>
                    <text x="144" y="100">G</text>
                    <text x="144" y="116">a</text>
                    <text x="144" y="132">t</text>
                    <text x="144" y="148">e</text>
                    <text x="48" y="164">App</text>
                    <text x="96" y="164">(1)</text>
                    <text x="144" y="164">w</text>
                    <text x="192" y="164">(2)</text>
                    <text x="360" y="164">(4)</text>
                    <text x="44" y="180">Client</text>
                    <text x="144" y="180">a</text>
                    <text x="268" y="180">workload</text>
                    <text x="312" y="180">1</text>
                    <text x="436" y="180">workload</text>
                    <text x="480" y="180">2</text>
                    <text x="96" y="196">(a)</text>
                    <text x="144" y="196">y</text>
                    <text x="192" y="196">(c)</text>
                    <text x="360" y="196">(c)</text>
                    <text x="144" y="228">S</text>
                    <text x="144" y="244">e</text>
                    <text x="224" y="244">(3)</text>
                    <text x="376" y="244">(5)</text>
                    <text x="408" y="244">(c)</text>
                    <text x="144" y="260">r</text>
                    <text x="144" y="276">v</text>
                    <text x="144" y="292">i</text>
                    <text x="352" y="292">Token</text>
                    <text x="144" y="308">c</text>
                    <text x="448" y="308">(6)</text>
                    <text x="480" y="308">(t)</text>
                    <text x="144" y="324">e</text>
                    <text x="352" y="324">Service</text>
                    <text x="244" y="532">Infrastructure</text>
                    <text x="428" y="532">External</text>
                    <text x="240" y="564">Service</text>
                    <text x="424" y="564">Service</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
                 +--------------------------Trust Boundary------+
                 |                                              |
              +--+--+                                           |
              |     |                                           |
              |  G  |                                           |
              |  a  |                                           |
              |  t  |                                           |
+-------+     |  e  |      +------------+      +-------------+  |
|   App | (1) |  w  | (2)  |            |  (4) |             |  |
| Client+---->|  a  +----->| workload 1 +----->|  workload 2 |  |
+-------+ (a) |  y  | (c)  |            |  (c) |             |  |
              |     |      +-+---------++      ++--------+---+  |
              |  S  |        |                  |        |      |
              |  e  |     (3)|               (5)|(c)     |      |
              |  r  |        |                  |        |      |
              |  v  |        |       +-+--------++       |      |
              |  i  |        |       |   Token   |       |      |
              |  c  |        |       |           |    (6)|(t)   |
              |  e  |        |       |  Service  |       |      |
              |     |        |       +-----------+       |      |
              +--+--+        |                           |      |
                 |           |                           |      |
                 |           |                           |      |
                 |           |                           |      |
                 +-----------+---------------------------+------+
                             |                           |
                             |                           |
                             |                           |
                             |                           |
                             |                           |
                     +-------v--------+     +------------v--+
                     | Infrastructure |     |    External   |
                     |                |     |               |
                     |    Service     |     |    Service    |
                     +----------------+     +---------------+

]]></artwork>
            </artset>
          </figure>
          <t>In many applications workloads must make requests of infrastructure that operates as a different trust domain or external services that are in a separate trust domain. Figure <xref target="arch-cross"/> shows this scenario. The scenario shows some new components described below.
Components and interactions from previous scenarios are still relevant to this example, but are omitted for simplicity.</t>
          <ul spacing="normal">
            <li>
              <t>Token Service - the token service is responsible for exchanging information that is internal to the system such as service identity and/or security context information for a token that can be presented to an external service to gain access to infrastructure or an external service.  Note that in some cases the token service may reside in a different trust domain or there may be token services in multiple trust domains.  In some cases the workload will need to contact token services in various domains in order to gain access to infrastructure or external service.</t>
            </li>
            <li>
              <t>Infrastructure Service - this service is often part of the application, but it is managed by an infrastructure provider and may require different information to access it.</t>
            </li>
            <li>
              <t>External Service - this service is distinct from the application and hosted in a separate trust domain.  This trust domain often has different access requirements that workloads in the internal trust domain.</t>
            </li>
          </ul>
          <t>Some example interactions in this scenario:</t>
          <ul spacing="normal">
            <li>
              <t>(1) The application client is making requests with authentication information as in the other scenarios</t>
            </li>
            <li>
              <t>(2) The gateway forwards the request to the appropriate workload with the security context information</t>
            </li>
            <li>
              <t>(3) The workload needs to access an infrastructure service and, because it is managed by the same organization, it authenticates to the service directly using its workload credentials.</t>
            </li>
            <li>
              <t>(4) Workload 1 contacts Workload 2 to perform an operation. This request is accompanied by a security context as in the other scenarios.</t>
            </li>
            <li>
              <t>(5) Workload 2 determines it needs to communicate with an external service.  In order to gain access to this service it must first obtain a token/credential (t) that it can use externally.  It authenticates to the token service using its workload identity and provides security context information.  The token service determines what type of externally usable token to issue to the workload.</t>
            </li>
            <li>
              <t>(6) Workload 2 uses this new token/credential (t) to access the external service.</t>
            </li>
            <li>
              <t>Note that in (3) and (6) the workload may need to authenticate to an external token service to obtain an access token to access the system in the foreign trust domain.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="workload-identity-use-cases">
        <name>Workload Identity Use Cases</name>
        <section anchor="bootstrapping-workload-identifiers-and-credentials">
          <name>Bootstrapping Workload Identifiers and Credentials</name>
          <t>A workload needs to obtain its identifier and associated credentials early in its lifecycle. It also needs to learn what trust domain it belongs to. The identifier, trust domain and credentials forms the basis from which further credentials, attributes, identifiers and security context are derived.</t>
          <t>Identifier and credential bootstrapping often utilizes attribute information
provisioned through mechanisms specific to hosting platforms and
orchestration services. This initial bootstrapping information is
used to issue specific credentials for a workload. This
process may use attestation to ensure the workload receives the
correct identity credentials. An example of a bootstrapping process
follows.</t>
          <t><xref target="arch-fig"/> provides an example of software layering at a host running
workloads. During startup, workloads bootstrap their identifiers and credentials with
the help of an agent. The agent may be associated with one or more
workloads to help ensure that workloads are provisioned with the
correct identifiers and credentials. The agent provides attestation evidence and other
relevant information to a server. The server validates this
information and provides the agent with identifiers and credentials for the
workloads it is associated with. The server can use a variety of
internal and external means to validate the request against policy.
After obtaining credentials from the server, the agent
passes them to the workload.</t>
          <figure anchor="arch-fig">
            <name>Host Software Layering in a Workload Identity Architecture.</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="480" width="472" viewBox="0 0 472 480" 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,448" fill="none" stroke="black"/>
                  <path d="M 24,80 L 24,112" fill="none" stroke="black"/>
                  <path d="M 32,272 L 32,336" fill="none" stroke="black"/>
                  <path d="M 72,136 L 72,272" fill="none" stroke="black"/>
                  <path d="M 88,128 L 88,264" fill="none" stroke="black"/>
                  <path d="M 136,80 L 136,112" fill="none" stroke="black"/>
                  <path d="M 136,320 L 136,408" fill="none" stroke="black"/>
                  <path d="M 152,32 L 152,128" fill="none" stroke="black"/>
                  <path d="M 160,272 L 160,336" fill="none" stroke="black"/>
                  <path d="M 280,272 L 280,336" fill="none" stroke="black"/>
                  <path d="M 296,256 L 296,272" fill="none" stroke="black"/>
                  <path d="M 304,320 L 304,408" fill="none" stroke="black"/>
                  <path d="M 336,144 L 336,248" fill="none" stroke="black"/>
                  <path d="M 352,144 L 352,248" fill="none" stroke="black"/>
                  <path d="M 416,272 L 416,336" fill="none" stroke="black"/>
                  <path d="M 432,256 L 432,320" fill="none" stroke="black"/>
                  <path d="M 448,224 L 448,448" fill="none" stroke="black"/>
                  <path d="M 8,32 L 152,32" fill="none" stroke="black"/>
                  <path d="M 24,80 L 136,80" fill="none" stroke="black"/>
                  <path d="M 24,112 L 136,112" fill="none" stroke="black"/>
                  <path d="M 8,128 L 152,128" fill="none" stroke="black"/>
                  <path d="M 8,224 L 448,224" fill="none" stroke="black"/>
                  <path d="M 296,256 L 432,256" fill="none" stroke="black"/>
                  <path d="M 32,272 L 160,272" fill="none" stroke="black"/>
                  <path d="M 280,272 L 416,272" fill="none" stroke="black"/>
                  <path d="M 152,304 L 288,304" fill="none" stroke="black"/>
                  <path d="M 416,320 L 432,320" fill="none" stroke="black"/>
                  <path d="M 32,336 L 160,336" fill="none" stroke="black"/>
                  <path d="M 280,336 L 416,336" fill="none" stroke="black"/>
                  <path d="M 8,416 L 448,416" fill="none" stroke="black"/>
                  <path d="M 8,448 L 448,448" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="360,248 348,242.4 348,253.6" fill="black" transform="rotate(90,352,248)"/>
                  <polygon class="arrowhead" points="344,248 332,242.4 332,253.6" fill="black" transform="rotate(90,336,248)"/>
                  <polygon class="arrowhead" points="312,408 300,402.4 300,413.6" fill="black" transform="rotate(90,304,408)"/>
                  <polygon class="arrowhead" points="312,320 300,314.4 300,325.6" fill="black" transform="rotate(270,304,320)"/>
                  <polygon class="arrowhead" points="296,304 284,298.4 284,309.6" fill="black" transform="rotate(0,288,304)"/>
                  <polygon class="arrowhead" points="160,304 148,298.4 148,309.6" fill="black" transform="rotate(180,152,304)"/>
                  <polygon class="arrowhead" points="144,408 132,402.4 132,413.6" fill="black" transform="rotate(90,136,408)"/>
                  <polygon class="arrowhead" points="144,320 132,314.4 132,325.6" fill="black" transform="rotate(270,136,320)"/>
                  <polygon class="arrowhead" points="96,264 84,258.4 84,269.6" fill="black" transform="rotate(90,88,264)"/>
                  <polygon class="arrowhead" points="80,136 68,130.4 68,141.6" fill="black" transform="rotate(270,72,136)"/>
                  <g class="text">
                    <text x="76" y="52">Server</text>
                    <text x="80" y="100">Attestation</text>
                    <text x="132" y="164">Identity</text>
                    <text x="396" y="164">Workload</text>
                    <text x="144" y="180">Credentials</text>
                    <text x="396" y="180">to</text>
                    <text x="396" y="196">Workload</text>
                    <text x="416" y="212">Communication</text>
                    <text x="64" y="292">Agent</text>
                    <text x="328" y="292">Workloads</text>
                    <text x="212" y="324">Identity</text>
                    <text x="224" y="340">Credentials</text>
                    <text x="348" y="372">Identity</text>
                    <text x="80" y="388">Attestation</text>
                    <text x="360" y="388">Credentials</text>
                    <text x="36" y="436">Host</text>
                    <text x="96" y="436">Operating</text>
                    <text x="164" y="436">System</text>
                    <text x="208" y="436">and</text>
                    <text x="260" y="436">Hardware</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
  +-----------------+
  |     Server      |
  |                 |
  | +-------------+ |
  | | Attestation | |
  | +-------------+ |
  +---------+-------+
          ^ |                              . .
          | | Identity                     | | Workload
          | | Credentials                  | |    to
          | |                              | | Workload
          | |                              | | Communication
  +-------+-+------------------------------+-+-----------+
  |       | |                              v V           |
  |       | v                         +----------------+ |
  |  +----+----------+              +-+--------------+ | |
  |  | Agent         |              | Workloads      | | |
  |  |              <+--------------+>               | | |
  |  |            ^  |  Identity    |  ^             +-+ |
  |  +------------+--+  Credentials +--+-------------+   |
  |               |                    |                 |
  |               |                    | Identity        |
  |   Attestation |                    | Credentials     |
  |               v                    v                 |
  +------------------------------------------------------+
  | Host Operating System and Hardware                   |
  +------------------------------------------------------+
]]></artwork>
            </artset>
          </figure>
          <t>How the workload obtains its identity credentials and interacts with the agent is subject to different implementations. Some common mechanisms for obtaining this initial identity include:</t>
          <ul spacing="normal">
            <li>
              <t>File System - in this mechanism the identity credential is provisioned to the workload via the filesystem.</t>
            </li>
            <li>
              <t>Local API - the identity credential is provided through an API, such as a local domain socket (for example SPIFFE or QEMU guest agent) or network API (for example Cloud Provider Metadata Server).</t>
            </li>
            <li>
              <t>Environment Variables - identity credential may also be injected into workloads using operating system environment variables.</t>
            </li>
          </ul>
        </section>
        <section anchor="service-authentication">
          <name>Service Authentication</name>
          <t>One of the most basic use cases for workload identity is authentication of one workload to another, such as in the case where one service is making a request to another service as part of a larger, more complex application. Following authentication, the identity of the peer can be used to enforce fine-grained authorization policies as described in <xref target="authorization"/> and generate audit trails as described in <xref target="audit-trails"/>.</t>
          <t>Authentication mechanisms are used to establish the identity of the peer workload. There are several methods defined to perform service-to-service authentication. The most common mechanisms include:</t>
          <ul spacing="normal">
            <li>
              <t>TLS authentication of the server using X.509 certificates and client bearer token, encoded as JWTs.</t>
            </li>
            <li>
              <t>Mutual TLS authentication using X.509 certificate for both client and server.</t>
            </li>
            <li>
              <t>TLS authentication of the server and HTTP request signing using a secret key.</t>
            </li>
          </ul>
          <t>These authentication mechanisms establish a cryptographically verifiable identity for the communicating party, which can then be used for further policy enforcement.</t>
          <t><xref target="arch-chain"/> illustrates the communication between different workloads. Two aspects are important
to highlight: First, there is a need to consider the interaction with workloads that are external
to the trust domain (sometimes called cross-domain). Second, the interaction does
not only occur between workloads that directly interact with each other but instead may also
take place across intermediate workloads (in an end-to-end style).</t>
          <figure anchor="arch-chain">
            <name>Workload-to-Workload Communication.</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="384" width="520" viewBox="0 0 520 384" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,32 L 8,96" fill="none" stroke="black"/>
                  <path d="M 8,144 L 8,352" fill="none" stroke="black"/>
                  <path d="M 32,192 L 32,304" fill="none" stroke="black"/>
                  <path d="M 72,80 L 72,208" fill="none" stroke="black"/>
                  <path d="M 128,192 L 128,304" fill="none" stroke="black"/>
                  <path d="M 152,32 L 152,96" fill="none" stroke="black"/>
                  <path d="M 216,192 L 216,304" fill="none" stroke="black"/>
                  <path d="M 312,192 L 312,304" fill="none" stroke="black"/>
                  <path d="M 400,192 L 400,304" fill="none" stroke="black"/>
                  <path d="M 496,192 L 496,304" fill="none" stroke="black"/>
                  <path d="M 512,144 L 512,352" fill="none" stroke="black"/>
                  <path d="M 8,32 L 152,32" fill="none" stroke="black"/>
                  <path d="M 8,96 L 152,96" fill="none" stroke="black"/>
                  <path d="M 8,144 L 272,144" fill="none" stroke="black"/>
                  <path d="M 392,144 L 512,144" fill="none" stroke="black"/>
                  <path d="M 32,192 L 128,192" fill="none" stroke="black"/>
                  <path d="M 216,192 L 312,192" fill="none" stroke="black"/>
                  <path d="M 400,192 L 496,192" fill="none" stroke="black"/>
                  <path d="M 120,240 L 224,240" fill="none" stroke="black"/>
                  <path d="M 304,240 L 408,240" fill="none" stroke="black"/>
                  <path d="M 80,288 L 440,288" fill="none" stroke="black"/>
                  <path d="M 32,304 L 128,304" fill="none" stroke="black"/>
                  <path d="M 216,304 L 312,304" fill="none" stroke="black"/>
                  <path d="M 400,304 L 496,304" fill="none" stroke="black"/>
                  <path d="M 8,352 L 512,352" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="448,288 436,282.4 436,293.6" fill="black" transform="rotate(0,440,288)"/>
                  <polygon class="arrowhead" points="416,240 404,234.4 404,245.6" fill="black" transform="rotate(0,408,240)"/>
                  <polygon class="arrowhead" points="312,240 300,234.4 300,245.6" fill="black" transform="rotate(180,304,240)"/>
                  <polygon class="arrowhead" points="232,240 220,234.4 220,245.6" fill="black" transform="rotate(0,224,240)"/>
                  <polygon class="arrowhead" points="128,240 116,234.4 116,245.6" fill="black" transform="rotate(180,120,240)"/>
                  <polygon class="arrowhead" points="88,288 76,282.4 76,293.6" fill="black" transform="rotate(180,80,288)"/>
                  <polygon class="arrowhead" points="80,208 68,202.4 68,213.6" fill="black" transform="rotate(90,72,208)"/>
                  <polygon class="arrowhead" points="80,80 68,74.4 68,85.6" fill="black" transform="rotate(270,72,80)"/>
                  <g class="text">
                    <text x="84" y="52">Workload</text>
                    <text x="84" y="68">(external)</text>
                    <text x="296" y="148">Trust</text>
                    <text x="356" y="148">Boundary</text>
                    <text x="168" y="196">Hop-by-</text>
                    <text x="352" y="196">Hop-by-</text>
                    <text x="152" y="212">Hop</text>
                    <text x="336" y="212">Hop</text>
                    <text x="76" y="228">Workload</text>
                    <text x="172" y="228">Security</text>
                    <text x="260" y="228">Workload</text>
                    <text x="356" y="228">Security</text>
                    <text x="444" y="228">Workload</text>
                    <text x="72" y="292">O</text>
                    <text x="448" y="292">O</text>
                    <text x="168" y="308">E2E</text>
                    <text x="352" y="308">E2E</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
  +-----------------+
  |     Workload    |
  |    (external)   |
  |       ^         |
  +-------+---------+
          |
          |
  +-------+-------------------------Trust Boundary---------------+
  |       |                                                      |
  |       |                                                      |
  |  +----+------+ Hop-by-  +-----------+ Hop-by-  +-----------+ |
  |  |    v      | Hop      |           | Hop      |           | |
  |  | Workload  | Security | Workload  | Security | Workload  | |
  |  |          <+----------+>         <+----------+>          | |
  |  |           |          |           |          |           | |
  |  |           |          |           |          |           | |
  |  |    O<-----+----------+-----------+----------+---->O     | |
  |  +-----------+   E2E    +-----------+   E2E    +-----------+ |
  |                                                              |
  |                                                              |
  +--------------------------------------------------------------+
]]></artwork>
            </artset>
          </figure>
        </section>
        <section anchor="authorization">
          <name>Service Authorization</name>
          <t>Once authentication has successfully established the identity of a peer workload, authorization mechanisms determine whether the authenticated identity is permitted to perform the requested action on the target workload.</t>
          <t>Authorization specified by WIMSE is context-aware. It relies on attributes carried in the security context, which may originate from upstream systems such as gateways or identity proxies. This context may be derived from end-user attributes, trust domain policies, or deployment-specific metadata (e.g., environment, service role, workload instance).</t>
          <t>Authorization decisions typically include:</t>
          <ul spacing="normal">
            <li>
              <t>Validating the integrity and provenance of the security context.</t>
            </li>
            <li>
              <t>Ensuring the authenticated identity has the correct role and attributes to access the requested API or resource.</t>
            </li>
            <li>
              <t>Applying fine-grained policy rules, which may include path, method, action type, and contextual constraints (e.g., geographic location, time of day).</t>
            </li>
          </ul>
          <t>Authorization checks may also incorporate delegation and impersonation semantics, as described in <xref target="delegation"/>, where upstream workloads are authorized to act on behalf of end-users or other services, within the scope of their issued credentials and policy.</t>
        </section>
        <section anchor="audit-trails">
          <name>Audit Trails</name>
          <t>Auditability is a critical requirement in systems that rely on workload identities and security context. Each authenticated request <bcp14>MUST</bcp14> leave a verifiable and inspectable trace regardless of authentication and authorization decision.</t>
          <t>Audit trails are typically generated at multiple points:</t>
          <ul spacing="normal">
            <li>
              <t>Gateway Services: Log incoming client requests and their authenticated identities, including access tokens or client certificates used.</t>
            </li>
            <li>
              <t>Workloads: Log authenticated peer identities, security context attributes, requested resources, and authorization outcomes.</t>
            </li>
            <li>
              <t>Identity and Token Services: Log issuance and validation events for workload identity credentials and context tokens.</t>
            </li>
          </ul>
          <t>Audit records may include:</t>
          <ul spacing="normal">
            <li>
              <t>Timestamp of the request</t>
            </li>
            <li>
              <t>Source workload identifier</t>
            </li>
            <li>
              <t>Target workload identifier</t>
            </li>
            <li>
              <t>Authentication method used</t>
            </li>
            <li>
              <t>Decision outcome (authorized/denied)</t>
            </li>
            <li>
              <t>Security context claims</t>
            </li>
            <li>
              <t>Delegation/impersonation metadata (if present)</t>
            </li>
          </ul>
          <t>To avoid inadvertent disclosure of sensitive information, workloads and services generating audit logs <bcp14>MUST NOT</bcp14> log secrets such as bearer tokens, private keys, or passwords. If logging of credential-related data is necessary for diagnostic or policy purposes, these values <bcp14>MUST</bcp14> be redacted, hashed, or otherwise sanitised to prevent misuse.</t>
          <t>WIMSE systems <bcp14>SHOULD</bcp14> ensure audit logs are tamper-evident and securely stored. Logs may be forwarded to centralized security information and event management (SIEM) systems to enable compliance, threat detection, and incident response.</t>
        </section>
        <section anchor="security-context-establishment-and-propagation">
          <name>Security Context Establishment and Propagation</name>
          <t>In a typical system of workloads additional information is needed in order for the workload to perform its function. For example, it is common for a workload to require information about a user or other entity that originated the request. Other types of information may include information about the hardware or software that the workload is running or information about what processing and validation has already been done to the request. This type of information is part of the security context that the workload uses during authorization, accounting and auditing. This context is propagated and possibly augmented from workload to workload using tokens. The context may be associated with a specific source or target workload by binding it to a specific workload identifier. This may indicate that the context originated from a specific workload, or that only a specific workload may make use of the context. A workload may also use a workload identity credential to bind a context to one or more transaction so the receiver can verify which workload initiated the transaction and the context that was intended for the transaction.</t>
        </section>
        <section anchor="service-authorization">
          <name>Service Authorization</name>
          <t>After authentication of the peer, a workload can perform authorization by verifying that the authenticated identity has the appropriate permissions to access the requested resources and perform required actions. This process involves evaluating the security context described previously. The workload validates the security context, and checks the validity of permissions against its security policies to ensure that only authorized actions are allowed.</t>
        </section>
        <section anchor="delegation">
          <name>Delegation and Impersonation</name>
          <t>When source workloads send authenticated requests to destination workloads, those destination workloads may rely on upstream dependencies to fulfill such requests. Such access patterns are increasingly common in a microservices architecture. While X.509 certificates can be used for point-to-point authentication, such services relying on upstream microservices for answers, may use delegation and/or impersonation semantics as described in RFC 8693 OAuth 2.0 Access Token Exchange.</t>
          <t>WIMSE credentials constrain the subjects and actors identified in delegation and impersonation tokens to be bound by a trust domain, and to follow their issuing authorities' trust configurations. Upstream workloads should consider the security context of delegation and/or impersonation tokens within and across trust domains, when arriving at authorization decisions.</t>
        </section>
        <section anchor="asynchronous-and-batch-requests">
          <name>Asynchronous and Batch Requests</name>
          <t>Source workloads may send authenticated asynchronous and batch requests to destination workloads. A destination workload may need to fulfill such requests with requests to authorized upstream protected resources and workloads, after the source workload credentials have expired. Credentials identifying the original source workload as subject may need to be obtained from the credential issuing authority with appropriately-downscoped context needed access to upstream workloads. These credentials should identify the workload as the actor in the actor chain, but may also identify other principals that the action is taken on behalf. To mitigate risks associated with long-duration credentials, these credentials should be bound to the Workload Identity Credential such as an workload identity certificate or Workload Identity Token (WIT) of the acting service performing asynchronous computation on the source workload's behalf.</t>
        </section>
        <section anchor="cross-boundary-workload-identity">
          <name>Cross-boundary Workload Identity</name>
          <t>As workloads often need to communicate across trust boundaries, extra care needs to be taken when it comes to identity communication to ensure scalability and privacy. (TODO: align with OAuth cross domain identity and authorization)</t>
          <section anchor="egress-identity-generalization">
            <name>Egress Identity Generalization</name>
            <t>A workload communicating with a service or another workload located outside the trust boundary may need to provide modified identity information. The detailed identity of an internal workload originating the communication is relevant inside the trust boundary but could be excessive for the outside world and expose potentially sensitive internal topology information.</t>
            <t>For example, in a microservices architecture, an internal service may use workload-specific identities that include fine-grained details such as instance names or deployment-specific attributes. When interacting with external systems, exposing such details may inadvertently provide attackers with insights into the internal deployment structure, scaling strategies, security policies, technologies in use, or failover mechanisms, potentially giving them a tactical advantage. In such cases, an identity proxy at the trust boundary can generalize the Workload Identity by replacing the specific microservice instance name with the name of the overall service. This allows external parties to recognize the service while abstracting internal deployment details.</t>
            <t>A security gateway implementing Identity Proxy functionality at the edge of a trust boundary can validate identity information of the workload, perform context-specific authorization of the transaction, and replace workload-specific identity with a generalized one for a given trust domain. This approach ensures that external communications adhere to security and privacy requirements while maintaining interoperability across trust boundaries.</t>
          </section>
          <section anchor="inbound-gateway-identity-validation">
            <name>Inbound Gateway Identity Validation</name>
            <t>Inbound security gateway is a common design pattern for service protection. This functionality is often found in CDN services, API gateways, load balancers, Web Application Firewalls (WAFs) and other security solutions. Workload identity verification of inbound requests should be performed as a part of these security services. After validation of workload identity, the gateway may either leave it unmodified or replace it with its own identity to be validated by the destination.</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="traffic-interception">
        <name>Traffic Interception</name>
        <t>Workloads communicating with applications may face different threats to traffic interception in different deployments. In many deployments security controls are deployed for internal communications at lower layers to reduce the risk of traffic observation and modification for network communications. When a security layer, such as TLS, is deployed in these environments. TLS may be terminated in various places, including the workload itself, and in various middleware devices, such as load balancers, gateways, proxies, and firewalls. Therefore, protection is provided only between each adjacent pair of TLS endpoints. There are no guarantees of confidentiality, integrity and correct identity passthrough in those middleware devices and services.</t>
      </section>
      <section anchor="information-disclosure">
        <name>Information Disclosure</name>
        <t>Observation and interception of network traffic is not the only means of disclosure in these systems. Other vectors of information leakage is through disclosure in log files and other observability and troubleshooting mechanisms. For example, an application may log the contents of HTTP headers containing JWT bearer tokens, user names, email addresses and other sensitive information. The information in these logs may be made available to other systems with less stringent access controls, which may result in this information falling into an attackers hands. This creates privacy risks and potential surface for reconnaissance attacks.</t>
      </section>
      <section anchor="credential-theft">
        <name>Credential Theft</name>
        <t>When the information disclosed to an attacker is a credential, the attacker may be able to use that credential to escalate their privilege, attack another system via lateral movement within the organization or to impersonate a workload.  Bearer credentials are particularly vulnerable to disclosure since they are communicated between systems and may be revealed in communication channels or application logs. Credentials bound to a cryptographic key are typically less vulnerable because the key is not disclosed in the authentication process. However, care must still be taken to prevent disclosure during key management operations.</t>
      </section>
      <section anchor="workload-compromise">
        <name>Workload Compromise</name>
        <t>Even the most well-designed and implemented workloads may contain security flaws that allow an attacker to gain limited or full compromise. For example, a server side request forgery may result in the ability for an attacker to force the workload to make requests of other parts of a system even though the rest of the workload functionality may be unaffected. An attacker with this advantage may be able to utilize privileges of the compromised workload to attack other parts of the system. Therefore it is important that communicating workloads apply the principle of least privilege through security controls such as authorization.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </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="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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <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="3" month="March" year="2025"/>
            <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 initiate transactions with protected user identity an
   authorization context throughout the call chain of the workloads
   required to complete the request.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-transaction-tokens-05"/>
        </reference>
        <reference anchor="RFC9683">
          <front>
            <title>Remote Integrity Verification of Network Devices Containing Trusted Platform Modules</title>
            <author fullname="G. C. Fedorkow" initials="G. C." role="editor" surname="Fedorkow"/>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <author fullname="J. Fitzgerald-McKay" initials="J." surname="Fitzgerald-McKay"/>
            <date month="December" year="2024"/>
            <abstract>
              <t>This document describes a workflow for remote attestation of the integrity of firmware and software installed on network devices that contain Trusted Platform Modules (TPMs), as defined by the Trusted Computing Group (TCG), or equivalent hardware implementations that include the protected capabilities, as provided by TPMs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9683"/>
          <seriesInfo name="DOI" value="10.17487/RFC9683"/>
        </reference>
        <reference anchor="I-D.ietf-wimse-s2s-protocol">
          <front>
            <title>WIMSE Workload to Workload Authentication</title>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>CyberArk</organization>
            </author>
            <author fullname="Arndt Schwenkschuster" initials="A." surname="Schwenkschuster">
              <organization>SPIRL</organization>
            </author>
            <author fullname="Yaron Sheffer" initials="Y." surname="Sheffer">
              <organization>Intuit</organization>
            </author>
            <date day="4" month="July" year="2025"/>
            <abstract>
              <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.  Workload A can call Workload B with mutual TLS
   authentication, while the next call from Workload B to Workload C
   would be authenticated at the application level.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-s2s-protocol-06"/>
        </reference>
      </references>
    </references>
    <?line 555?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Todo: Add your name here.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1965Ybx5HmfzxFLfXD3SIAiqQkSxyPPC1exNaIF7Nb5np9
7DkFIAGUWKiCKwvdhEn5WfZZ9skmrpmRVYXupuj1ePYsj4/VAKryGhkZ8cVt
MpmM2qIt3YPs1uu6eVPW+SI7XbgKvtxnRZXl2bNd2RbZ2d63bpM9ri6Kpq42
8EB29Pr02dnj4+ykma+L1s3bXeNujfLZrHEX2Bz+2vlxUc+rfAOdLZp82U4K
1y4nl8XGu0kOz00++2I0z1u3qpv9A+h8WY/8brYpvC/q6ny/hfdOH58/GY2K
bfMga5udb+999tnXn90b5Y3LocuT7bYsoAV43Gd5tcheubycnBcb6PoSZrdq
6t320EwPzdPfGr1xe3h9Ad1XrWsq104e4fhHI99CL/+Rl3UFY9s7P/KbvGn/
4y+7unX+QVbVo23xIPtjW8/Hma+btnFLD3/tN/jHn0ajfNeu6+bBKJuMMvhX
VPDS99PsDFq8dHv6jtfr+9q77Tr5oW5WeVX8lWb7IHu4n7nmpHlDP7lNXpQP
sp9q92+e35jCoJNe/jDNXtW+3uRv1rXp5w95U/syv+j8mPb1v/w8L11ju9rL
e/D//7bCr6bzepN0+HSanfv5ul66qliZHp/mVeV89zeloqeTb1+dDQzhx6q4
cI3HrauXGe27W2Rn88JVc2jt27qqJq/WrqgmZ4XjJuf1rmqRsL5zzSav9nb4
PIhpHARM4i2t2aiq4ekWenswQooMH0aTyQSG6dsmn8Nj52sH85wDHfqiWmVb
GD2sEQwGxzcv690CBrDZ7lr8FUlzU8ybOvOuuSjgodwcE5+tc5+VMJ+2zlpo
tyk8NwMNlO4tUNKyvQSSz5a7as7EPnPY7mxXlC21vnDbst5DE9DSpVA7UN7l
2sFrefgqKzw8uiwqfjLPml1VYUuwZUDaPPrQnXvr5jwBWAd42G/dvFgW82y7
a7ZAoNMsO19ji/V8RxxiUfj5znuHhzGZIjWwcL5YVboedJTyZlH8ldevhkNT
l3yMt/meJkCvzevqwu3xoTgLPcbUEAyywQ/wYOvetlnYtrqa8rZtisWidKPR
J3igm3qxo1X8p95ET3zJ0+uw1Ats6h+3saORskyfVY4nNXO4SxcFMmf45rJo
17jNYS9gSBXOHHYFuoBem9YtptmLZeuqcZYvFgXOOi/t/lDj3ra+cAtgmLv5
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
g3W2r3d8q0lF3v8Eo3EFtNyzAAA=

-->

</rfc>
