<?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-levy-wimse-headless-jwt-authentication-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="WIMSE Headless JWT Authentication and Authorization">WIMSE Headless JWT Authentication and Authorization</title>
    <seriesInfo name="Internet-Draft" value="draft-levy-wimse-headless-jwt-authentication-00"/>
    <author fullname="Marcel Levy">
      <organization>SPIRL</organization>
      <address>
        <email>heymarcel@gmail.com</email>
      </address>
    </author>
    <author fullname="Hirsch Singhal">
      <organization>GitHub</organization>
      <address>
        <email>hpsin@github.com</email>
      </address>
    </author>
    <date year="2025" month="June" day="30"/>
    <area/>
    <workgroup>Workload Identity in Multi System Environments</workgroup>
    <keyword>workload</keyword>
    <keyword>identity</keyword>
    <keyword>credential</keyword>
    <keyword>exchange</keyword>
    <abstract>
      <?line 84?>

<t>In workload-to-service communication, a common pattern is for a
workload to present a JSON Web Token (JWT) to a remote endpoint in
order to obtain a temporary credential for the service it ultimately
needs to access. It is a partial adaptation for workloads of existing
flows designed for users. Implementing this pattern combines multiple
existing standards from different working groups and standards
bodies. Since this pattern is not described in a specification, it
leads to variability in interoperability. The purpose of this document
is to capture this common workload identity practice as an RFC in
order to obtain consistency and promote interoperability in industry.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://heymarcel.github.io/draft-ietf-wimse-headless-jwt-authentication/draft-levy-wimse-headless-jwt-authentication-practices.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-levy-wimse-headless-jwt-authentication/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Workload Identity in Multi System Environments  mailing list (<eref target="mailto:wimse@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/wimse/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/wimse/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/heymarcel/draft-ietf-wimse-headless-jwt-authentication"/>.</t>
    </note>
  </front>
  <middle>
    <?line 97?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In workload-to-service communication, a common pattern is for a workload to use
a JSON Web Token (JWT) to identify and authenticate itself as part of a process
to obtain a temporary credential for the service it ultimately needs to access.
This is done by having the workload present an asynchronously-provisioned bearer
token in the form of a signed JWT to a remote endpoint that is associated with
the target service. The remote endpoint verifies the JWT and then provides a
temporary credential that the target service understands. The "bootstrap"
problem of discovering the original JWT issuer is solved by requesting a JSON
configuration document using the process described in OpenID Connect Discovery
<xref target="OIDC.Discovery"/> or OAuth 2.0 Authorization Server Metadata <xref target="RFC8414"/>.</t>
      <t>Since this pattern is not described in a specification, it leads to variability
in interoperability. The purpose of this document is to capture this common
workload identity practice as an RFC in order to obtain consistency and promote
interoperability in industry.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>All terminology in this document follows <xref target="I-D.ietf-wimse-arch"/>.</t>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<section anchor="terminology">
        <name>Terminology</name>
        <t>This document uses the following terms:</t>
        <ul spacing="normal">
          <li>
            <t>Workload Platform</t>
          </li>
        </ul>
        <t>The underlying system which manages the deployment and scheduling of a Workload.
This includes but is not limited to operating systems, orchestration services,
and cloud providers.</t>
        <ul spacing="normal">
          <li>
            <t>Tenant</t>
          </li>
        </ul>
        <t>A logically isolated entity within a Workload Platform that represents a
distinct organizational or administrative boundary <xref target="OIPD"/>. A Workload Platform
may have a single Tenant, or multiple Tenants.</t>
        <ul spacing="normal">
          <li>
            <t>Exchange Service</t>
          </li>
        </ul>
        <t>A remote endpoint responsible for authenticating the identity of its
callers, and subsequently issuing a temporary credential that is compatible with
other services within the exchange service's domain. Examples of an
exchange service include an OAuth Authorization Server and AWS Security
Token Service.</t>
        <ul spacing="normal">
          <li>
            <t>Target Service</t>
          </li>
        </ul>
        <t>The service that the workload ultimately wants to access. The target service
accepts temporary credentials issued to the workload by the exchange service.
Examples include an OAuth resource server or AWS S3.</t>
      </section>
    </section>
    <section anchor="architecture-and-message-flow">
      <name>Architecture and Message Flow</name>
      <t><xref target="fig-message-flow"/> illustrates the OIDC-based message flow described in <xref target="jwt-authentication"/>:</t>
      <figure anchor="fig-message-flow">
        <name>OIDC message flow when used in a headless environment</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="528" width="424" viewBox="0 0 424 528" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 48,80 L 48,160" fill="none" stroke="black"/>
              <path d="M 56,288 L 56,352" fill="none" stroke="black"/>
              <path d="M 80,432 L 80,512" fill="none" stroke="black"/>
              <path d="M 88,168 L 88,288" fill="none" stroke="black"/>
              <path d="M 128,352 L 128,424" fill="none" stroke="black"/>
              <path d="M 152,160 L 152,280" fill="none" stroke="black"/>
              <path d="M 184,80 L 184,160" fill="none" stroke="black"/>
              <path d="M 184,432 L 184,512" fill="none" stroke="black"/>
              <path d="M 200,288 L 200,352" fill="none" stroke="black"/>
              <path d="M 296,224 L 296,288" fill="none" stroke="black"/>
              <path d="M 360,112 L 360,216" fill="none" stroke="black"/>
              <path d="M 360,288 L 360,320" fill="none" stroke="black"/>
              <path d="M 416,224 L 416,288" fill="none" stroke="black"/>
              <path d="M 48,80 L 184,80" fill="none" stroke="black"/>
              <path d="M 192,112 L 360,112" fill="none" stroke="black"/>
              <path d="M 48,160 L 184,160" fill="none" stroke="black"/>
              <path d="M 296,224 L 416,224" fill="none" stroke="black"/>
              <path d="M 56,288 L 200,288" fill="none" stroke="black"/>
              <path d="M 296,288 L 416,288" fill="none" stroke="black"/>
              <path d="M 208,320 L 360,320" fill="none" stroke="black"/>
              <path d="M 56,352 L 200,352" fill="none" stroke="black"/>
              <path d="M 80,432 L 184,432" fill="none" stroke="black"/>
              <path d="M 80,512 L 184,512" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="368,216 356,210.4 356,221.6" fill="black" transform="rotate(90,360,216)"/>
              <polygon class="arrowhead" points="216,320 204,314.4 204,325.6" fill="black" transform="rotate(180,208,320)"/>
              <polygon class="arrowhead" points="200,112 188,106.4 188,117.6" fill="black" transform="rotate(180,192,112)"/>
              <polygon class="arrowhead" points="160,280 148,274.4 148,285.6" fill="black" transform="rotate(90,152,280)"/>
              <polygon class="arrowhead" points="136,424 124,418.4 124,429.6" fill="black" transform="rotate(90,128,424)"/>
              <polygon class="arrowhead" points="96,168 84,162.4 84,173.6" fill="black" transform="rotate(270,88,168)"/>
              <g class="text">
                <text x="60" y="36">4)</text>
                <text x="100" y="36">Verify</text>
                <text x="168" y="36">signature</text>
                <text x="96" y="52">using</text>
                <text x="136" y="52">JWK</text>
                <text x="204" y="84">3)</text>
                <text x="252" y="84">Retrieve</text>
                <text x="308" y="84">JWKs</text>
                <text x="236" y="100">from</text>
                <text x="300" y="100">"jwks_uri"</text>
                <text x="116" y="116">Exchange</text>
                <text x="112" y="132">Service</text>
                <text x="12" y="196">2)</text>
                <text x="40" y="196">JWT</text>
                <text x="172" y="196">5)</text>
                <text x="216" y="196">Provide</text>
                <text x="52" y="212">Bearer</text>
                <text x="224" y="212">Temporary</text>
                <text x="48" y="228">Token</text>
                <text x="232" y="228">Credentials</text>
                <text x="328" y="260">JWT</text>
                <text x="372" y="260">Issuer</text>
                <text x="124" y="324">Workload</text>
                <text x="228" y="340">1)</text>
                <text x="272" y="340">Initial</text>
                <text x="356" y="340">provisioning</text>
                <text x="156" y="388">6)</text>
                <text x="220" y="388">Authenticate</text>
                <text x="292" y="388">with</text>
                <text x="208" y="404">temporary</text>
                <text x="292" y="404">credential</text>
                <text x="132" y="468">Target</text>
                <text x="136" y="484">Service</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
      4) Verify signature
         using JWK

     +----------------+ 3) Retrieve JWKs
     |                |    from "jwks_uri"
     |    Exchange    +<--------------------.
     |    Service     |                     |
     |                |                     |
     +----+-------+---+                     |
          ^       |                         |
2) JWT    |       | 5) Provide              |
   Bearer |       |    Temporary            v
   Token  |       |    Credentials  +-------+------+
          |       |                 |              |
          |       |                 |  JWT Issuer  |
          |       v                 |              |
      +---+-------+-----+           +-------+------+
      |                 |                   |
      |    Workload     |<------------------'
      |                 |  1) Initial provisioning
      +--------+--------+
               |
               |  6) Authenticate with
               |     temporary credential
               v
         +------------+
         |            |
         |   Target   |
         |   Service  |
         |            |
         +------------+
]]></artwork>
        </artset>
      </figure>
    </section>
    <section anchor="jwt-authentication">
      <name>JWT used for Authentication</name>
      <t>The overall message flow is seen in <xref target="fig-message-flow"/>, and this
section explains it in more detail. It assumes the workload has
previously acquired a JWT adhering to the profile specified in
<xref target="RFC7523"/>. JWT provisioning assumptions are described in more detail
in <xref target="jwt-provisioning"/>.</t>
      <ol spacing="normal" type="1"><li>
          <t>The workload calls a remote Exchange Service that is associated with
the target service and presents a JWT Bearer Token as specified in Section 4
of <xref target="RFC7523"/>.</t>
        </li>
        <li>
          <t>The Exchange Service takes the value from the <tt>iss</tt> claim and appends
<tt>/.well-known/openid-configuration</tt> to retrieve the JWT Issuer's
configuration via HTTP, as specified in <xref target="OIDC.Discovery"/>. Alternatively, the
OAuth 2.0 Authorization Server Metadata endpoint <xref target="RFC8414"/> may be used.</t>
        </li>
        <li>
          <t>The Exchange Service then retrieves the JWKs via HTTP from the <tt>jwks_uri</tt>
declared in the JWT Issuer's configuration response.</t>
        </li>
        <li>
          <t>Using the appropiate issuer key, the Exchange Service verifies the
signature of the JWT Bearer Token, and validates that the workload is
authorized to receive a temporary credential in its domain.</t>
        </li>
        <li>
          <t>Assuming successful verification, the Exchange Service then
responds to the workload with a temporary credential suitable for
use with the target service.</t>
        </li>
        <li>
          <t>The Workload then authenticates with the target service using the
temporary credential.</t>
        </li>
      </ol>
      <t>This document limits discussion to HTTP, as this is the protocol predominantly
used. Although other protocols are out of scope, this should not be read as a
limit on their future use.</t>
    </section>
    <section anchor="key-discovery">
      <name>Key Discovery</name>
      <t>Issuer key discovery follows the steps outlined in Section 4 of
<xref target="OIDC.Discovery"/>. The Exchange Service makes a request to a location that is
well-known according to <xref target="RFC5785"/>:</t>
      <figure anchor="example-config-request">
        <name>Example request to issuer to obtain OIDC configuration</name>
        <sourcecode type="text"><![CDATA[
GET /.well-known/openid-configuration HTTP/1.1
Host: example.com
]]></sourcecode>
      </figure>
      <t>For OAuth 2.0, the equivalent location is
<tt>/.well-known/oauth-authorization-server</tt>. In both cases, the requester expects
a JSON document containing configuration information. An example is provided
here:</t>
      <figure anchor="example-config-response">
        <name>Example issuer configuration response</name>
        <sourcecode type="json"><![CDATA[
{
  "issuer": "https://example.com",
  "jwks_uri": "https://example.com/.well-known/jwks.json",
  "authorization_endpoint": "https://example.com/auth",
  "token_endpoint": "https://example.com/token"
}
]]></sourcecode>
      </figure>
      <t>For the sake of the pattern described in this document, only the <tt>issuer</tt> and
<tt>jwks_uri</tt> fields are relevant.</t>
      <t>Note that this key discovery mechanism does not address the question of whether
the key itself should be trusted. This is a registration problem, and is
discussed further in <xref target="interoperability-considerations"/>.</t>
    </section>
    <section anchor="jwt-format-and-processing">
      <name>JWT Format and Processing Requirements</name>
      <section anchor="jwt-format">
        <name>JWT Format</name>
        <t>An example JWT adhering to <xref target="RFC7523"/> is seen in <xref target="example-jwt"/>. Although the
example uses a WIMSE workload identifier (<xref target="I-D.ietf-wimse-s2s-protocol"/>) in
the subject ("sub") claim, this is not a requirement.</t>
        <figure anchor="example-jwt">
          <name>Example RFC7523 JWT</name>
          <sourcecode type="json"><![CDATA[
{
  "iss": "https://issuer.example.org",
  "sub": "spiffe://example.org/ns/default/sa/customer-router-agent",
  "aud": "https://auth.example.com/token",
  "jti": "jwt-grant-id-x1y2z3a4",
  "exp": 1744845092,
  "iat": 1744841036
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="jwt-processing">
        <name>JWT Processsing</name>
        <section anchor="exchange-service-processing">
          <name>Exchange Service Processing</name>
          <t>The Exchange Service validates the JWT according to Section 3 in <xref target="RFC7523"/>,
with the following exceptions:</t>
          <ol spacing="normal" type="1"><li>
              <t>The "sub" (subject) claim does not identify either a resource owner or an
anonymous user.</t>
            </li>
            <li>
              <t>The "sub" claim need not correspond to the "client id" of an OAuth client.</t>
            </li>
          </ol>
          <t>The Exchange Service validates the signature using the key discovered by the
process described in <xref target="key-discovery"/>.</t>
        </section>
        <section anchor="workload-processing">
          <name>Workload Processing</name>
          <t>The workload is considered the client in this interaction. It can treat the JWT
acquired during provisioning as an opaque token. It must handle any error
reponse from the exchange service as per Section 3.2 in <xref target="RFC7523"/>.</t>
        </section>
      </section>
      <section anchor="jwt-provisioning">
        <name>JWT Provisioning</name>
        <t>The workload is provisioned with a JWT from a trusted source. This can be the
underlying Workload Platform, or a separate issuing system. Regardless of the
actual mechanism, JWT provisioning relies on a registration mechanism that
establishes mutually-trusted, secure connections between the workload and the
JWT provisioner.</t>
        <t>This provisioning mechanism illustrates a key difference from flows defined in
<xref target="RFC6749"/> and <xref target="OIDC.Core"/>, in that there are no client credentials or other
shared secrets required to bootstrap the flow.</t>
      </section>
    </section>
    <section anchor="trust-relationships">
      <name>Trust Relationships</name>
      <t>For functional headless JWT authentication, trust must be established
at multiple levels for the authentication flow to function. For an
authorization server to issue an access token to a workload, two
distinct trust relationships must exist:</t>
      <ol spacing="normal" type="1"><li>
          <t>The authorization server <bcp14>MUST</bcp14> trust the JWT issuer.</t>
        </li>
        <li>
          <t>The authorization server <bcp14>MUST</bcp14> trust the specific workload based on
claims within the JWT bearer token.</t>
        </li>
      </ol>
      <t>These two trust relationships serve different purposes and <bcp14>SHOULD</bcp14> be
managed independently as outlined below.</t>
      <t>An example of the differences between issuer and workload trust
relationships are three workload instances (A, B and C) that are all
presenting JWT Bearer Tokens issued from the same JWT Issuer. This
means that they build upon the trust relationship between the JWT
issuer and authorization server. One workload instance has a specific
workload trust relationship with the authorization server based on its
subject identifier (the <tt>sub</tt> claim). It requires a very specific
identifier which needs to match exactly. Another one makes use of a
hierarchy within the subject identifier and the last one uses a
combination of subject, audience and a custom claim as a basis for the
trust relationship.</t>
      <artwork><![CDATA[
           ┌──────────────────────┐
           │                      │
           │ Authorization Server │◄─────────────────┐
           │                      │                  │
           └──────────────────────┘        Issuer trust relationship
                ▲     ▲     ▲                        │
                │     │     │                        │
                │     │     │                        ▼
             Individual workload              ┌─────────────┐
             trust relationships              │             │
                │     │     │                 │ JWT Issuer  │
       ┌────────┘     │     └─────────┐       │             │
       │              │               │       └──────┬──────┘
       │              │               │              │
       │              │               │              │
       ▼              ▼               ▼              │
┌────────────┐  ┌────────────┐  ┌────────────┐   Issue JWT
│            │  │            │  │            │  Bearer Tokens
│ Workload A │  │ Workload B │  │ Workload C │       │
│            │  │            │  │            │       │
└────────────┘  └────────────┘  └────────────┘       │
       ▲              ▲                ▲             │
       └──────────────┴────────────────┴─────────────┘
]]></artwork>
      <section anchor="issuer-trust-relationship">
        <name>Issuer Trust Relationship</name>
        <t>This trust relationship is between the Authorization Server and the
JWT Issuer only. It represents the foundational level of trust and
determines if the JWT Bearer Token a workload presents is accepted.</t>
        <t>How this relationship is established is out of scope for this
document. A possible approach for this implementation is maintaining a
list of OAuth Authorization Server Metadata endpoints which instruct
the authorization server to trust a specific issuer including the
discovery of valid keys for that issuer via <tt>jwks</tt>.</t>
        <t>This trust is typically established at a global or tenant-wide level,
is subject to organizational policy and governance controls. Changes
to issuer trust affect all workloads associated with that issuer
simultaneously.</t>
      </section>
      <section anchor="workload-trust-relationship">
        <name>Workload Trust Relationship</name>
        <t>Workload trust establishment builds upon issuer trust and focuses
specifically on the relationship between the authorization server and
individual workloads. Once the Bearer JWT token is authenticated the
authorization server must determine if the specific workload
identified in the JWT claims should be authorized.</t>
        <t>The specifics of the claims are described in <xref target="jwt-format"/>.</t>
        <t>This trust is typically established individually and subject to
different policy and governance controls.</t>
      </section>
    </section>
    <section anchor="interoperability-considerations">
      <name>Interoperability Considerations</name>
      <t>In order for the workload to access the target service,</t>
      <ol spacing="normal" type="1"><li>
          <t>The JWT Issuer must be recognized by the Exchange Service,</t>
        </li>
        <li>
          <t>Claims in the JWT are inspected and used to determine the subject, or
principal, of the temporary credential issued to access the target service,</t>
        </li>
        <li>
          <t>And the resulting temporary credential must be authorized to access the
target service.</t>
        </li>
      </ol>
      <t>Step #1 requires the prior configuration of an explicit trust relationship
between the Exchange Service and the JWT Issuer, and depends on
vendor-specific configuration. Dynamic client registration standards (<xref target="RFC7591"/>
and <xref target="OIDC.Dynamic"/>) explicitly place it out of scope.</t>
      <t>Step #2 is a processing rule that is also previously-configured in an
implementation-dependent manner. As an example of current practice for
configuration of Steps #2 and #3, see <xref target="GitHub"/>.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document illustrates a common pattern in trust domain federation. However,
the "identity exchange" Step #2 in <xref target="interoperability-considerations"/> is not
standardized. In practice, the Workload Platform and the Resource Server
platform define principals differently, and the translation mechanism between
the two identities is implemented differently by each Resource Server platform.
This lack of standardization is not merely inconvenient; it is a rich source of
privilege escalation attacks. This is particularly true when both the Workload
Platform and the Resource Server platform are multi-tenanted.</t>
      <t>The following recommendations apply to configurations that control the
"identity exchange" step that controls the translation of the workload
JWT to a Resource Server identity:</t>
      <ol spacing="normal" type="1"><li>
          <t>When a Workload Platform contains multiple Tenants, the configuration <bcp14>SHOULD</bcp14>
rely on a JWT issuing key bound to a single Tenant of the workload platform,
rather than a single JWT issuing key for the Workload Platform.</t>
        </li>
        <li>
          <t>The configuration <bcp14>SHOULD</bcp14> use specific JWT claims to prevent any JWT signed by
the JWT Issuer from being used to impersonate any Resource Server principal.</t>
        </li>
        <li>
          <t>When a Workload Platform contains multiple Tenants, the configuration <bcp14>SHOULD
NOT</bcp14> solely rely on JWT claims that can be controlled by any Tenant. The
configuration <bcp14>MAY</bcp14> rely on a "tenant" claim, if the claim value is
issuer-controlled and corresponds to a single Tenant.</t>
        </li>
        <li>
          <t>The configuration <bcp14>SHOULD NOT</bcp14> permit the transcription of JWT claims to the
Resource Server principal without performing additional validation.</t>
        </li>
      </ol>
      <t>The security considerations in section 8 of <xref target="RFC7521"/> generally apply. As bearer
tokens, stolen JWTs are particularly valuable to attackers:</t>
      <ol spacing="normal" type="1"><li>
          <t>A secure channel (e.g. TLS) <bcp14>MUST</bcp14> be used when providing a JWT for
authentication.</t>
        </li>
        <li>
          <t>JWTs <bcp14>SHOULD</bcp14> be protected from unauthorized access using operating system or
platform access controls.</t>
        </li>
        <li>
          <t>JWT validity <bcp14>SHOULD</bcp14> be set to the shortest possible duration allowable by
overall system availability constraints.</t>
        </li>
      </ol>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>This section documents examples of the JWT headless authentication and
authorization pattern in use with various target service types.</t>
      <section anchor="oauth-resource-server">
        <name>OAuth Resource Server</name>
        <t>To use headless JWT authentication and authorization with a protected resource,
workloads use the following steps to obtain a suitable access token:</t>
        <ol spacing="normal" type="1"><li>
            <t>The workload calls an authorization server's token endpoint and presents a
JWT bearer token as specified in Section 4 of <xref target="RFC7523"/>.</t>
          </li>
          <li>
            <t>The authorization server verifies the signature of the JWT bearer token
following the procedure specified in this document, and validates that the
workload is authorized to receive an access token.</t>
          </li>
          <li>
            <t>Assuming successful verification, the authorization server then responds to
the workload with an access token suitable for use with the resource server.</t>
          </li>
        </ol>
      </section>
      <section anchor="aws-service-eg-s3">
        <name>AWS Service (e.g. S3)</name>
        <t>To use headless JWT authentication and authorization with an AWS service such
as S3, workloads use the following steps to obtain a suitable access token:</t>
        <ol spacing="normal" type="1"><li>
            <t>The workload makes an AssumeRoleWithWebIdentity call to the AWS STS
service and presents a JWT bearer token in addition to the ARN of the role
that the workload wishes to assume.</t>
          </li>
          <li>
            <t>AWS STS verifies the signature of the JWT bearer token following the
procedure specified in this document, and validates that the workload is
authorized to assume the requested role.</t>
          </li>
          <li>
            <t>Assuming successful verification, AWS STS then responds to the workload with
temporary credentials, including a secret access key, for use with any
further AWS service.</t>
          </li>
        </ol>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC5785">
          <front>
            <title>Defining Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="E. Hammer-Lahav" initials="E." surname="Hammer-Lahav"/>
            <date month="April" year="2010"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5785"/>
          <seriesInfo name="DOI" value="10.17487/RFC5785"/>
        </reference>
        <reference anchor="RFC6749">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6749"/>
          <seriesInfo name="DOI" value="10.17487/RFC6749"/>
        </reference>
        <reference anchor="RFC7521">
          <front>
            <title>Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants</title>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="Y. Goland" initials="Y." surname="Goland"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification provides a framework for the use of assertions with OAuth 2.0 in the form of a new client authentication mechanism and a new authorization grant type. Mechanisms are specified for transporting assertions during interactions with a token endpoint; general processing rules are also specified.</t>
              <t>The intent of this specification is to provide a common framework for OAuth 2.0 to interwork with other identity systems using assertions and to provide alternative client authentication mechanisms.</t>
              <t>Note that this specification only defines abstract message flows and processing rules. In order to be implementable, companion specifications are necessary to provide the corresponding concrete instantiations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7521"/>
          <seriesInfo name="DOI" value="10.17487/RFC7521"/>
        </reference>
        <reference anchor="RFC7523">
          <front>
            <title>JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification defines the use of a JSON Web Token (JWT) Bearer Token as a means for requesting an OAuth 2.0 access token as well as for client authentication.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7523"/>
          <seriesInfo name="DOI" value="10.17487/RFC7523"/>
        </reference>
        <reference anchor="RFC7591">
          <front>
            <title>OAuth 2.0 Dynamic Client Registration Protocol</title>
            <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="M. Machulak" initials="M." surname="Machulak"/>
            <author fullname="P. Hunt" initials="P." surname="Hunt"/>
            <date month="July" year="2015"/>
            <abstract>
              <t>This specification defines mechanisms for dynamically registering OAuth 2.0 clients with authorization servers. Registration requests send a set of desired client metadata values to the authorization server. The resulting registration responses return a client identifier to use at the authorization server and the client metadata values registered for the client. The client can then use this registration information to communicate with the authorization server using the OAuth 2.0 protocol. This specification also defines a set of common client metadata fields and values for clients to use during registration.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7591"/>
          <seriesInfo name="DOI" value="10.17487/RFC7591"/>
        </reference>
        <reference anchor="RFC8414">
          <front>
            <title>OAuth 2.0 Authorization Server Metadata</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <date month="June" year="2018"/>
            <abstract>
              <t>This specification defines a metadata format that an OAuth 2.0 client can use to obtain the information needed to interact with an OAuth 2.0 authorization server, including its endpoint locations and authorization server capabilities.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8414"/>
          <seriesInfo name="DOI" value="10.17487/RFC8414"/>
        </reference>
        <reference anchor="OIDC.Core" target="https://openid.net/specs/openid-connect-core-1_0.html">
          <front>
            <title>OpenID Connect Core 1.0 incorporating errata set 2</title>
            <author initials="N." surname="Sakimura">
              <organization/>
            </author>
            <author initials="J." surname="Bradley">
              <organization/>
            </author>
            <author initials="M." surname="Jones">
              <organization/>
            </author>
            <author initials="B." surname="de Medeiros">
              <organization/>
            </author>
            <author initials="C." surname="Mortimore">
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="OIDC.Discovery" target="https://openid.net/specs/openid-connect-discovery-1_0.html">
          <front>
            <title>OpenID Connect Discovery 1.0 incorporating errata set 2</title>
            <author initials="N." surname="Sakimura">
              <organization/>
            </author>
            <author initials="J." surname="Bradley">
              <organization/>
            </author>
            <author initials="M." surname="Jones">
              <organization/>
            </author>
            <author initials="E." surname="Jay">
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="OIDC.Dynamic" target="https://openid.net/specs/openid-connect-registration-1_0.html">
          <front>
            <title>OpenID Connect Dynamic Client Registration 1.0 incorporating errata set 2</title>
            <author initials="N." surname="Sakimura">
              <organization/>
            </author>
            <author initials="J." surname="Bradley">
              <organization/>
            </author>
            <author initials="M." surname="Jones">
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-wimse-arch">
          <front>
            <title>Workload Identity in a Multi System Environment (WIMSE) Architecture</title>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>Venafi</organization>
            </author>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
            </author>
            <date day="2" month="March" year="2025"/>
            <abstract>
              <t>   The increasing prevalence of cloud computing and micro service
   architectures has led to the rise of complex software functions being
   built and deployed as workloads, where a workload is defined as a
   running instance of software executing for a specific purpose.  This
   document discusses an architecture for designing and standardizing
   protocols and payloads for conveying workload identity and security
   context information.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-arch-04"/>
        </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="Joe Salowey" initials="J." surname="Salowey">
              <organization>Venafi</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="19" month="June" 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-05"/>
        </reference>
        <reference anchor="GitHub" target="https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/about-security-hardening-with-openid-connect">
          <front>
            <title>About security hardening with OpenID Connect</title>
            <author>
              <organization/>
            </author>
            <date year="2025"/>
          </front>
        </reference>
        <reference anchor="OIPD" target="https://openid.net/specs/openid-provider-commands-1_0.html">
          <front>
            <title>OpenID Provider Commands 1.0</title>
            <author>
              <organization/>
            </author>
            <date year="2025"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 501?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank the following people for contributions
to this document: Evan Gilman, Pieter Kasselman, Darin McAdams, and
Arndt Schwenkschuster.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
8rdmOsf2KxDb/wek7b0tTlQAAA==

-->

</rfc>
