<?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.43 (Ruby 3.2.3) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-rasmussen-acme-wif-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="ACME Workload Identity Challenge">A Federated Workload Identity Challenge for the Automated Certificate Management Environment (ACME)</title>
    <seriesInfo name="Internet-Draft" value="draft-rasmussen-acme-wif-00"/>
    <author initials="S." surname="Rasmussen" fullname="Scott Rasmussen">
      <organization>Independent</organization>
      <address>
        <email>scott@zaita.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="06"/>
    <area>Security</area>
    <workgroup>ACME Working Group</workgroup>
    <keyword>ACME</keyword>
    <keyword>workload identity</keyword>
    <keyword>federation</keyword>
    <keyword>OpenID Connect</keyword>
    <keyword>certificate issuance</keyword>
    <keyword>CI/CD</keyword>
    <abstract>
      <?line 97?>

<t>The Automated Certificate Management Environment (ACME, RFC 8555) establishes
that a requester has authority over an identifier by means of a challenge that
demonstrates control of that identifier, such as publishing a DNS record or
serving an HTTP resource. It authenticates the requester by means of an account
key whose provenance is outside the protocol's scope.</t>
      <t>Neither mechanism is a good fit for automated workloads running in
continuous-integration systems, container orchestrators, and cloud compute
platforms. Such workloads typically possess no long-lived secret and no ability
to publish DNS records, but they do possess a short-lived, cryptographically
verifiable identity assertion issued by their execution platform.</t>
      <t>This document defines a new ACME challenge type, "wif-01", by which an ACME
server authorizes issuance for an identifier on the basis of a platform-issued
identity token. The token is bound to the ACME account key, and to the specific
authorization it satisfies, using the token's audience claim. The mechanism
therefore requires no new claims, no new endpoints, and no changes of any kind
to existing identity providers.</t>
      <t>Because the workload's identity is established for each authorization, the
mechanism also removes any need for External Account Binding: an ordinary ACME
account, created by the workload with no pre-shared secret, suffices. The
mechanism uses only extension points that ACME already defines.</t>
    </abstract>
  </front>
  <middle>
    <?line 123?>

<section anchor="introduction">
      <name>Introduction</name>
      <section anchor="motivation">
        <name>Motivation</name>
        <t>A certificate issuance system must answer two questions: who is asking, and are
they entitled to the identifier they are asking for.</t>
        <t>ACME <xref target="RFC8555"/> answers the second question with challenges that demonstrate
practical control over the identifier -- the ability to publish a DNS TXT record
under the name, or to serve a resource at the name over HTTP. It largely
declines to answer the first: an ACME account is identified by a key pair the
client generates for itself, and RFC 8555 places no requirement on where that
key came from. Where a Certification Authority (CA) does need to know who its
subscriber is, RFC 8555 Section 7.3.4 provides External Account Binding (EAB),
in which the CA issues the subscriber a key identifier and a MAC key out of
band.</t>
        <t>Both answers assume a deployment shape that has become less common. A workload
running in a CI/CD pipeline or a container orchestrator is typically:</t>
        <ul spacing="normal">
          <li>
            <t>ephemeral, with no persistent filesystem across executions and therefore
nowhere to keep an ACME account key between runs;</t>
          </li>
          <li>
            <t>unable to publish DNS records or serve HTTP on the name it needs a
certificate for, because the name belongs to a service the workload is
building or deploying rather than one it is running;</t>
          </li>
          <li>
            <t>explicitly designed to hold no long-lived secrets, because secret
distribution to ephemeral compute is the problem its operators are trying to
eliminate; and</t>
          </li>
          <li>
            <t>already in possession of a short-lived, asymmetrically signed identity
assertion, issued automatically by the execution platform, that names the
workload with considerable precision.</t>
          </li>
        </ul>
        <t>That last property is the opportunity. Every major compute and CI platform now
issues such an assertion, in the form of a JSON Web Token <xref target="RFC7519"/> signed
with a key published at a well-known JWKS endpoint, and permits the relying
party to verify it using OpenID Connect Discovery <xref target="OIDC-DISCOVERY"/>. The
industry term for consuming such an assertion is "workload identity
federation", abbreviated in this document as WIF.</t>
        <t>Operators currently bridge the gap between a WIF token and an ACME client by
running a private broker: a service that verifies the platform token and hands
back an EAB key identifier and MAC key, or that issues a certificate directly
through a non-ACME interface. Every such broker is a bespoke, unaudited
reimplementation of the same token-validation and policy-mapping logic, and the
resulting deployments are not interoperable with each other or with off-the-shelf
ACME clients.</t>
        <t>This document specifies that bridge once, and without the EAB credential the
broker exists to mint: the Workload's identity is checked at the point where
each identifier is authorized, so the account needs no binding at all.</t>
      </section>
      <section anchor="constraints">
        <name>Design Constraints</name>
        <t>The central design constraint is that identity providers cannot be changed.
GitHub, Amazon Web Services, Microsoft Azure, Google Cloud, and Kubernetes each
issue tokens with a claim set they control. A specification that requires a new
claim, a new endpoint, or a new token type from those providers will not be
deployable, regardless of its technical merits.</t>
        <t>This rules out the obvious approach of reusing the ACME Authority Token
<xref target="RFC9447"/>, which requires the token to carry an "atc" claim containing a
fingerprint of the ACME account key (<xref section="3.3" sectionFormat="of" target="RFC9447"/>). No general
purpose identity provider will emit such a claim, and none can, because the
provider has no knowledge of the ACME account key. <xref target="compare"/> discusses the
relationship in more detail.</t>
        <t>The obstacle is not that the binding value means anything to the token issuer.
<xref target="I-D.ietf-acme-authority-token-jwtclaimcon"/> is explicit that it does not: the
fingerprint "is not meant to be verified by the Token Authority", but only
signed as part of the token, so that the ACME server can establish that the
party which requested the token is the party presenting it. The obstacle is
that an opaque value must still be accepted by the issuer as an input and
emitted as a claim, and a general-purpose identity provider does neither. Its
claim set is fixed and its inputs are few.</t>
        <t>What every provider does permit is control over the token's audience: the
workload requests a token for a specific relying party, and the provider places
that value in the "aud" claim. This document therefore carries the binding to
the ACME account key in the audience, using a value derived from the existing
key authorization construction of <xref section="8.1" sectionFormat="of" target="RFC8555"/>. The result
requires nothing of the identity provider that it does not already do.</t>
        <t>A secondary constraint is that authorization policy -- which workload may
obtain a certificate for which identifier -- is a CA configuration matter and
varies enormously between deployments. This document specifies the mechanism by
which a token is validated and bound, and the abstract model by which claims are
mapped to permitted identifiers, but deliberately does not specify the policy
language. <xref target="policy"/> discusses the boundary.</t>
      </section>
      <section anchor="scope">
        <name>Scope</name>
        <t>This document defines:</t>
        <ul spacing="normal">
          <li>
            <t>a new ACME challenge type, "wif-01" (<xref target="challenge"/>), by which an ACME server
may mark an authorization valid on the basis of a WIF token rather than a
demonstration of identifier control;</t>
          </li>
          <li>
            <t>the audience binding construction (<xref target="audience"/>) that ties a WIF token to a
specific ACME account key and to a specific authorization;</t>
          </li>
          <li>
            <t>the lifetime rule (<xref target="authz-reuse"/>) that keeps a federated authorization from
outliving the assertion that produced it;</t>
          </li>
          <li>
            <t>the account model (<xref target="accounts"/>) under which an ordinary ACME account,
created without External Account Binding, is sufficient; and</t>
          </li>
          <li>
            <t>directory metadata (<xref target="metadata"/>) by which a server advertises which identity
providers it accepts and under what conditions.</t>
          </li>
        </ul>
        <t>This document does not define a policy language, a certificate profile, or a
mechanism for provisioning trust in an identity provider. It does not replace
proof-of-control challenges; a CA may reasonably require both.</t>
        <t>Everything this document adds to ACME uses an extension point that <xref target="RFC8555"/>
already provides: one validation method, five error types, and one directory
metadata field, each entered in the registry <xref section="9.7" sectionFormat="of" target="RFC8555"/>
established for it; a challenge type, whose object fields are defined with it
as <xref section="8" sectionFormat="of" target="RFC8555"/> anticipates; and a label beneath the
"urn:ietf:params:acme" namespace (<xref section="9.6" sectionFormat="of" target="RFC8555"/>). It changes no
existing request, resource, or state transition.</t>
      </section>
      <section anchor="related">
        <name>Relationship to Other Work</name>
        <t>ACME Authority Token <xref target="RFC9447"/> and its TNAuthList profile <xref target="RFC9448"/> define a
challenge in which a Token Authority, in a pre-existing business relationship
with the CA, issues a purpose-built JWT authorizing a specific ACME account to
obtain a specific identifier. The present document addresses the case where the
token issuer is a general-purpose identity provider that has no relationship
with the CA, no knowledge of ACME, and no ability to emit ACME-specific claims.
See <xref target="compare"/>.</t>
        <t><xref target="I-D.ietf-acme-authority-token-jwtclaimcon"/> is a second profile of that
challenge, and is easily mistaken for the present work because it also has an
ACME server act on a JWT minted elsewhere. It is a different mechanism for a
different purpose. What it authorizes is a certificate extension rather than a
name: the ACME identifier is the base64url DER encoding of a requested
JWTClaimConstraints <xref target="RFC8226"/> or EnhancedJWTClaimConstraints <xref target="RFC9118"/>
extension, a Token Authority in the Secure Telephone Identity ecosystem attests
that the requester may assert those constraints, and the constraints appear in
the issued certificate. It carries the "atc" fingerprint binding of
<xref target="RFC9447"/>, and so falls under the constraint of <xref target="constraints"/> exactly as the
TNAuthList profile does. Nothing in this document interacts with it, and a CA
may implement both.</t>
        <t>ACME with OpenID Federation <xref target="I-D.ietf-acme-openid-federation"/> shares a word
with this document and little else. It establishes trust in a requester through
OpenID Federation 1.0: entity statements, trust chains resolved to a trust
anchor, and metadata published by the requesting organization about itself.
The present document uses no federation metadata and no trust chains. It
accepts an ordinary OpenID Connect-style identity token that a compute platform
issues to a workload, verified against a key set the CA operator has chosen to
trust directly. The two address different deployments and do not interact.</t>
        <t>ACME Remote Attestation <xref target="I-D.ietf-acme-rats"/> defines a challenge carrying RATS
evidence in a Conceptual Message Wrapper. That mechanism attests to the
properties of a platform, typically rooted in hardware; this one conveys an
administratively assigned identity. The two are complementary, and a CA
concerned with both platform integrity and workload identity might require
both.</t>
        <t>WIMSE Workload Credentials <xref target="I-D.ietf-wimse-workload-creds"/> defines the
Workload Identity Token and Workload Identity Certificate formats but places the
protocol for obtaining them explicitly out of scope. This document may be read
as one such protocol.</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>The following terms are used:</t>
        <dl>
          <dt>Workload:</dt>
          <dd>
            <t>A unit of executing software that requires a certificate. Examples include a
job in a CI/CD pipeline, a container in an orchestrated cluster, and a virtual
machine instance.</t>
          </dd>
          <dt>Identity Provider (IdP):</dt>
          <dd>
            <t>The service that issues an identity assertion to the Workload on the basis of
the Workload's execution context. The IdP is operated by the compute or CI
platform, not by the CA and not necessarily by the subscriber.</t>
          </dd>
          <dt>WIF Token:</dt>
          <dd>
            <t>A JWT <xref target="RFC7519"/> issued by an Identity Provider to a Workload, signed using a
digital signature algorithm, and verifiable using a key published by the IdP.</t>
          </dd>
          <dt>Subscriber:</dt>
          <dd>
            <t>The entity that has an administrative relationship with the CA and on whose
behalf certificates are issued. The Subscriber configures the CA's
authorization policy. The Subscriber and the Workload operator are usually,
but not necessarily, the same organization. Under this document the
relationship is recorded in the policy entries the Subscriber configures
(<xref target="policy"/>), not in any ACME account (<xref target="accounts"/>).</t>
          </dd>
          <dt>Audience Binding Value:</dt>
          <dd>
            <t>The value computed per <xref target="audience"/> that a Workload places in the "aud" claim
of the WIF Token in order to bind it to a particular ACME account key.</t>
          </dd>
        </dl>
        <t>Terms from <xref target="RFC8555"/> -- account, account key, authorization, challenge,
identifier, key authorization, order -- are used as defined there. Terms from
<xref target="RFC7515"/> and <xref target="RFC7519"/> are used as defined there.</t>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <section anchor="participants">
        <name>Participants</name>
        <figure anchor="fig-arch">
          <name>Participants in a federated workload identity issuance</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="304" width="512" viewBox="0 0 512 304" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
                <path d="M 8,176 L 8,272" fill="none" stroke="black"/>
                <path d="M 32,208 L 32,256" fill="none" stroke="black"/>
                <path d="M 56,88 L 56,112" fill="none" stroke="black"/>
                <path d="M 112,32 L 112,80" fill="none" stroke="black"/>
                <path d="M 368,32 L 368,80" fill="none" stroke="black"/>
                <path d="M 384,208 L 384,256" fill="none" stroke="black"/>
                <path d="M 408,176 L 408,272" fill="none" stroke="black"/>
                <path d="M 432,88 L 432,112" fill="none" stroke="black"/>
                <path d="M 432,160 L 432,192" fill="none" stroke="black"/>
                <path d="M 496,32 L 496,80" fill="none" stroke="black"/>
                <path d="M 8,32 L 112,32" fill="none" stroke="black"/>
                <path d="M 368,32 L 496,32" fill="none" stroke="black"/>
                <path d="M 120,64 L 160,64" fill="none" stroke="black"/>
                <path d="M 328,64 L 360,64" fill="none" stroke="black"/>
                <path d="M 8,80 L 112,80" fill="none" stroke="black"/>
                <path d="M 368,80 L 496,80" fill="none" stroke="black"/>
                <path d="M 8,176 L 408,176" fill="none" stroke="black"/>
                <path d="M 416,192 L 432,192" fill="none" stroke="black"/>
                <path d="M 32,208 L 384,208" fill="none" stroke="black"/>
                <path d="M 32,256 L 384,256" fill="none" stroke="black"/>
                <path d="M 8,272 L 408,272" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="440,88 428,82.4 428,93.6" fill="black" transform="rotate(270,432,88)"/>
                <polygon class="arrowhead" points="128,64 116,58.4 116,69.6" fill="black" transform="rotate(180,120,64)"/>
                <polygon class="arrowhead" points="64,88 52,82.4 52,93.6" fill="black" transform="rotate(270,56,88)"/>
                <g class="text">
                  <text x="60" y="52">Identity</text>
                  <text x="404" y="52">ACME</text>
                  <text x="452" y="52">Server</text>
                  <text x="60" y="68">Provider</text>
                  <text x="184" y="68">(4)</text>
                  <text x="220" y="68">JWKS</text>
                  <text x="280" y="68">retrieval</text>
                  <text x="436" y="68">(CA)</text>
                  <text x="16" y="132">(2)</text>
                  <text x="56" y="132">token</text>
                  <text x="112" y="132">request</text>
                  <text x="376" y="132">(3)</text>
                  <text x="412" y="132">ACME</text>
                  <text x="468" y="132">requests</text>
                  <text x="20" y="148">(aud</text>
                  <text x="48" y="148">=</text>
                  <text x="92" y="148">binding)</text>
                  <text x="384" y="148">(JWS,</text>
                  <text x="440" y="148">account</text>
                  <text x="492" y="148">key)</text>
                  <text x="56" y="164">|</text>
                  <text x="204" y="196">Workload</text>
                  <text x="172" y="228">ACME</text>
                  <text x="220" y="228">Client</text>
                  <text x="64" y="244">(1)</text>
                  <text x="120" y="244">generates</text>
                  <text x="200" y="244">ephemeral</text>
                  <text x="272" y="244">account</text>
                  <text x="320" y="244">key</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
   +------------+                               +---------------+
   |  Identity  |                               |  ACME Server  |
   |  Provider  |<----- (4) JWKS retrieval -----|      (CA)     |
   +------------+                               +---------------+
         ^                                              ^
         |                                              |
   (2) token request                            (3) ACME requests
   (aud = binding)                              (JWS, account key)
         |                                              |
   +-------------------------------------------------+  |
   |                    Workload                     |--+
   |  +-------------------------------------------+  |
   |  |               ACME Client                 |  |
   |  |  (1) generates ephemeral account key      |  |
   |  +-------------------------------------------+  |
   +-------------------------------------------------+
]]></artwork>
          </artset>
        </figure>
        <t>The Identity Provider and the ACME Server need not have any relationship beyond
the ACME Server's operator having configured the Identity Provider's issuer
identifier as acceptable. In particular the Identity Provider is not aware that
ACME is in use.</t>
      </section>
      <section anchor="protocol-flow">
        <name>Protocol Flow</name>
        <t>The following illustrates the flow in full.</t>
        <figure anchor="fig-flow">
          <name>wif-01 challenge flow</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="560" width="536" viewBox="0 0 536 560" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,48 L 24,528" fill="none" stroke="black"/>
                <path d="M 288,48 L 288,248" fill="none" stroke="black"/>
                <path d="M 288,280 L 288,528" fill="none" stroke="black"/>
                <path d="M 520,48 L 520,528" fill="none" stroke="black"/>
                <path d="M 176,64 L 280,64" fill="none" stroke="black"/>
                <path d="M 32,80 L 48,80" fill="none" stroke="black"/>
                <path d="M 240,80 L 280,80" fill="none" stroke="black"/>
                <path d="M 224,112 L 280,112" fill="none" stroke="black"/>
                <path d="M 32,128 L 48,128" fill="none" stroke="black"/>
                <path d="M 264,176 L 280,176" fill="none" stroke="black"/>
                <path d="M 264,256 L 512,256" fill="none" stroke="black"/>
                <path d="M 32,272 L 48,272" fill="none" stroke="black"/>
                <path d="M 144,272 L 512,272" fill="none" stroke="black"/>
                <path d="M 168,304 L 280,304" fill="none" stroke="black"/>
                <path d="M 488,368 L 512,368" fill="none" stroke="black"/>
                <path d="M 296,384 L 312,384" fill="none" stroke="black"/>
                <path d="M 400,384 L 512,384" fill="none" stroke="black"/>
                <path d="M 424,400 L 512,400" fill="none" stroke="black"/>
                <path d="M 296,416 L 312,416" fill="none" stroke="black"/>
                <path d="M 368,416 L 512,416" fill="none" stroke="black"/>
                <path d="M 32,496 L 48,496" fill="none" stroke="black"/>
                <path d="M 256,496 L 280,496" fill="none" stroke="black"/>
                <path d="M 176,528 L 280,528" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="520,400 508,394.4 508,405.6" fill="black" transform="rotate(0,512,400)"/>
                <polygon class="arrowhead" points="520,368 508,362.4 508,373.6" fill="black" transform="rotate(0,512,368)"/>
                <polygon class="arrowhead" points="520,256 508,250.4 508,261.6" fill="black" transform="rotate(0,512,256)"/>
                <polygon class="arrowhead" points="304,416 292,410.4 292,421.6" fill="black" transform="rotate(180,296,416)"/>
                <polygon class="arrowhead" points="304,384 292,378.4 292,389.6" fill="black" transform="rotate(180,296,384)"/>
                <polygon class="arrowhead" points="288,528 276,522.4 276,533.6" fill="black" transform="rotate(0,280,528)"/>
                <polygon class="arrowhead" points="288,304 276,298.4 276,309.6" fill="black" transform="rotate(0,280,304)"/>
                <polygon class="arrowhead" points="288,112 276,106.4 276,117.6" fill="black" transform="rotate(0,280,112)"/>
                <polygon class="arrowhead" points="288,64 276,58.4 276,69.6" fill="black" transform="rotate(0,280,64)"/>
                <polygon class="arrowhead" points="40,496 28,490.4 28,501.6" fill="black" transform="rotate(180,32,496)"/>
                <polygon class="arrowhead" points="40,272 28,266.4 28,277.6" fill="black" transform="rotate(180,32,272)"/>
                <polygon class="arrowhead" points="40,128 28,122.4 28,133.6" fill="black" transform="rotate(180,32,128)"/>
                <polygon class="arrowhead" points="40,80 28,74.4 28,85.6" fill="black" transform="rotate(180,32,80)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="260" y="36">ACME</text>
                  <text x="308" y="36">Server</text>
                  <text x="520" y="36">IdP</text>
                  <text x="36" y="68">--</text>
                  <text x="68" y="68">POST</text>
                  <text x="128" y="68">/newOrder</text>
                  <text x="72" y="84">201</text>
                  <text x="116" y="84">order,</text>
                  <text x="168" y="84">authz</text>
                  <text x="212" y="84">URLs</text>
                  <text x="36" y="116">--</text>
                  <text x="96" y="116">POST-as-GET</text>
                  <text x="180" y="116">/authz/1</text>
                  <text x="72" y="132">200</text>
                  <text x="96" y="132">{</text>
                  <text x="152" y="132">challenges:</text>
                  <text x="208" y="132">[</text>
                  <text x="80" y="148">{</text>
                  <text x="112" y="148">type:</text>
                  <text x="176" y="148">"wif-01",</text>
                  <text x="116" y="164">token:</text>
                  <text x="172" y="164">"...",</text>
                  <text x="124" y="180">issuers:</text>
                  <text x="184" y="180">[...]</text>
                  <text x="216" y="180">}</text>
                  <text x="232" y="180">]</text>
                  <text x="248" y="180">}</text>
                  <text x="64" y="212">compute</text>
                  <text x="164" y="212">keyAuthorization</text>
                  <text x="64" y="228">compute</text>
                  <text x="132" y="228">Audience</text>
                  <text x="200" y="228">Binding</text>
                  <text x="256" y="228">Value</text>
                  <text x="36" y="260">--</text>
                  <text x="80" y="260">request</text>
                  <text x="136" y="260">token</text>
                  <text x="180" y="260">(aud</text>
                  <text x="208" y="260">=</text>
                  <text x="236" y="260">ABV)</text>
                  <text x="72" y="276">WIF</text>
                  <text x="112" y="276">Token</text>
                  <text x="36" y="308">--</text>
                  <text x="68" y="308">POST</text>
                  <text x="124" y="308">/chall/1</text>
                  <text x="96" y="324">JWS(account</text>
                  <text x="168" y="324">key){</text>
                  <text x="112" y="340">"wifToken":</text>
                  <text x="196" y="340">"eyJ..."</text>
                  <text x="240" y="340">}</text>
                  <text x="300" y="356">--</text>
                  <text x="328" y="356">GET</text>
                  <text x="400" y="356">/.well-known/</text>
                  <text x="396" y="372">openid-configuration</text>
                  <text x="356" y="388">jwks_uri</text>
                  <text x="300" y="404">--</text>
                  <text x="328" y="404">GET</text>
                  <text x="380" y="404">jwks_uri</text>
                  <text x="340" y="420">JWKS</text>
                  <text x="324" y="452">verify</text>
                  <text x="396" y="452">signature,</text>
                  <text x="316" y="468">exp,</text>
                  <text x="356" y="468">aud,</text>
                  <text x="396" y="468">jti,</text>
                  <text x="320" y="484">apply</text>
                  <text x="372" y="484">policy</text>
                  <text x="72" y="500">200</text>
                  <text x="96" y="500">{</text>
                  <text x="136" y="500">status:</text>
                  <text x="200" y="500">"valid"</text>
                  <text x="240" y="500">}</text>
                  <text x="36" y="532">--</text>
                  <text x="68" y="532">POST</text>
                  <text x="128" y="532">/finalize</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
 Client                        ACME Server                      IdP
   |                                |                            |
   |-- POST /newOrder ------------->|                            |
   |<-- 201 order, authz URLs ------|                            |
   |                                |                            |
   |-- POST-as-GET /authz/1 ------->|                            |
   |<-- 200 { challenges: [         |                            |
   |      { type: "wif-01",         |                            |
   |        token: "...",           |                            |
   |        issuers: [...] } ] } ---|                            |
   |                                |                            |
   | compute keyAuthorization       |                            |
   | compute Audience Binding Value |                            |
   |                                |                            |
   |-- request token (aud = ABV) ------------------------------->|
   |<-- WIF Token -----------------------------------------------|
   |                                |                            |
   |-- POST /chall/1 -------------->|                            |
   |   JWS(account key){            |                            |
   |     "wifToken": "eyJ..." }     |                            |
   |                                |-- GET /.well-known/        |
   |                                |   openid-configuration --->|
   |                                |<-- jwks_uri ---------------|
   |                                |-- GET jwks_uri ----------->|
   |                                |<-- JWKS -------------------|
   |                                |                            |
   |                                | verify signature,          |
   |                                | exp, aud, jti,             |
   |                                | apply policy               |
   |<-- 200 { status: "valid" } ----|                            |
   |                                |                            |
   |-- POST /finalize ------------->|                            |
]]></artwork>
          </artset>
        </figure>
        <t>Note that the ACME Server's retrieval of the IdP's metadata and JWKS is
ordinarily satisfied from cache and does not occur on every validation. See
<xref target="jwks"/>.</t>
      </section>
      <section anchor="design-principles">
        <name>Design Principles</name>
        <dl>
          <dt>No changes to identity providers:</dt>
          <dd>
            <t>Every value the Workload must place in the token is one that existing
providers already permit the Workload to control. No new claim is required.</t>
          </dd>
          <dt>Binding in the audience:</dt>
          <dd>
            <t>The "aud" claim is the only field of a platform-issued token whose value the
Workload can influence on every major platform. The binding to the ACME
account key therefore travels there; <xref target="audience"/> specifies the construction.
An identity provider that does not permit the Workload to choose the audience
per request cannot be used with this document (<xref target="idp-req"/>).</t>
          </dd>
          <dt>Issuer allowlisting, not discovery:</dt>
          <dd>
            <t>An ACME Server <bcp14>MUST NOT</bcp14> be led to trust an identity provider by the contents
of a token. Acceptable issuers are configured out of band, and the "iss" claim
selects among them rather than introducing them. See <xref target="ssrf"/>.</t>
          </dd>
          <dt>Policy is configuration:</dt>
          <dd>
            <t>Validating that a token is authentic, fresh, and bound is a protocol matter
and is specified here in full. Deciding which authenticated workload may
receive which identifier is a CA policy matter and is not.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="audience">
      <name>The Audience Binding Value</name>
      <section anchor="construction">
        <name>Construction</name>
        <t>The Audience Binding Value (ABV) is computed as:</t>
        <artwork><![CDATA[
ABV = "urn:ietf:params:acme:wif:" ||
      base64url(SHA-256(ASCII(context)))
]]></artwork>
        <t>where "||" denotes concatenation, base64url is base64url encoding without
padding <xref target="RFC4648"/>, and "context" is an ASCII string determined by the
mechanism in use. For the "wif-01" challenge (<xref target="challenge"/>):</t>
        <artwork><![CDATA[
context = keyAuthorization
]]></artwork>
        <t>where keyAuthorization is exactly the value defined in
<xref section="8.1" sectionFormat="of" target="RFC8555"/>, that is, the challenge "token" value, a "." (0x2E)
separator, and the base64url encoding of the JWK SHA-256 Thumbprint
<xref target="RFC7638"/> of the account key.</t>
        <t>A specification that reuses this construction for another purpose <bcp14>MUST</bcp14> define
its own context string, and <bcp14>MUST</bcp14> define it so that it cannot equal the
keyAuthorization of any challenge. A server validating a "wif-01" challenge <bcp14>MUST</bcp14>
compute the expected ABV from the challenge's keyAuthorization alone, and <bcp14>MUST
NOT</bcp14> accept an ABV computed from a context defined by any other specification.
Accepting a token minted for one context against a mechanism expecting another
would let a token obtained for one purpose stand in for another.</t>
        <t>The resulting ABV is 68 ASCII characters: a 25-character prefix and a
43-character base64url-encoded digest. It contains no characters outside the
unreserved set of <xref target="RFC3986"/> other than the colons in the URN prefix, and is
therefore acceptable as an audience value to every identity provider surveyed in
<xref target="profiles"/>.</t>
      </section>
      <section anchor="rationale">
        <name>Rationale</name>
        <t>Reusing the key authorization of <xref section="8.1" sectionFormat="of" target="RFC8555"/> is deliberate. That
construction already combines two properties this mechanism needs:</t>
        <ul spacing="normal">
          <li>
            <t>The challenge "token", chosen by the server with at least 128 bits of entropy
and never reused, supplies freshness. A WIF Token bound to one challenge
cannot be presented against another.</t>
          </li>
          <li>
            <t>The account key thumbprint supplies account binding. A WIF Token that leaks --
into a build log, an artifact, an error report -- cannot be used by an
attacker who does not also hold the account key it was bound to.</t>
          </li>
        </ul>
        <t>Hashing the context, rather than placing the key authorization in the audience
directly, yields a fixed 68-character value regardless of the server's token
length, keeps the value within the audience length limits of every surveyed
provider, and avoids disclosing the challenge token to the identity provider,
which has no need for it.</t>
        <t>The "urn:ietf:params:acme:wif:" prefix ensures that a value constructed for this
purpose cannot be mistaken for an audience value belonging to some other relying
party, and allows an identity provider's administrators to recognize what a
configured audience is for. It carries no security weight of its own; see
<xref target="aud-semantics"/> for the relationship between this construction and the
ordinary meaning of the "aud" claim.</t>
      </section>
      <section anchor="binding-req">
        <name>Binding Requirement</name>
        <t>The Workload requests a WIF Token whose "aud" claim contains the ABV computed
per <xref target="audience"/>, and the ACME Server <bcp14>MUST</bcp14> verify its presence (step 7 of
<xref target="validation"/>). There is no weaker mode. A server <bcp14>MUST NOT</bcp14> mark a "wif-01"
challenge valid on the basis of a token whose audience it did not recompute from
the challenge "token" and the thumbprint of the account key that signed the
request it received.</t>
        <t>This requires an identity provider that lets the Workload supply an arbitrary
audience string on each request. That includes GitHub Actions, Kubernetes
service account tokens obtained through the TokenRequest API (and therefore
Amazon EKS and Azure Kubernetes Service), Amazon Web Services outbound identity
federation, SPIFFE JWT-SVIDs, and Google Cloud identity tokens. See
<xref target="profiles"/>.</t>
        <t>Providers that constrain the audience to a value pre-registered with the
provider, and so cannot vary it per request, cannot meet this requirement. A
weaker mode for such providers -- in which the audience is a stable URI naming
the ACME Server and the token is therefore not bound to the account key -- was
considered and rejected. Such a token is a usable bearer credential for its full
lifetime, and the compensating controls needed to make that tolerable include
requiring that the presenting account have been associated with the issuer and
subject by prior administrative action: an out-of-band bootstrap step, which is
the condition this mechanism exists to remove. The Azure Instance Metadata
Service is the notable provider in this position; <xref target="azure"/> describes the
supported path on that platform. See <xref target="open-issues"/>.</t>
      </section>
    </section>
    <section anchor="challenge">
      <name>The "wif-01" Challenge Type</name>
      <section anchor="applicability">
        <name>Applicability</name>
        <t>The "wif-01" challenge <bcp14>MAY</bcp14> be offered for any ACME identifier type. Unlike
proof-of-control challenges, nothing in the mechanism is specific to the DNS,
and a CA issuing certificates for "ip", "permanent-identifier", or a private
identifier type may offer it on the same terms.</t>
        <t>A server offers "wif-01" in an authorization when its policy has an entry for
the identifier in that authorization. The lookup happens when the authorization
is created and is keyed on the identifier the client placed in its order, not
on the names in a certificate signing request, which does not yet exist;
<xref section="7.4" sectionFormat="of" target="RFC8555"/> later requires the request's names to match the
order's identifiers. <xref target="policy"/> describes the lookup.</t>
        <t>Whether a server offers "wif-01" alongside proof-of-control challenges, or
instead of them, is a policy matter. Where both are offered, a client
satisfying either one satisfies the authorization
(<xref section="7.5.1" sectionFormat="of" target="RFC8555"/>), so a CA requiring both proof of control and
federated identity <bcp14>MUST NOT</bcp14> express that as two challenges in one
authorization.</t>
      </section>
      <section anchor="challenge-object">
        <name>Challenge Object</name>
        <t>A "wif-01" challenge object has the fields defined in
<xref section="8" sectionFormat="of" target="RFC8555"/> and the following additional fields:</t>
        <dl>
          <dt>token (required, string):</dt>
          <dd>
            <t>A random value that uniquely identifies the challenge, as defined in
<xref section="8.3" sectionFormat="of" target="RFC8555"/>. It <bcp14>MUST</bcp14> contain at least 128 bits of entropy, <bcp14>MUST</bcp14>
be encoded in base64url with no padding, and <bcp14>MUST NOT</bcp14> be reused.</t>
          </dd>
          <dt>issuers (optional, array of string):</dt>
          <dd>
            <t>The issuer identifiers this server will accept for this authorization,
narrowed from the set advertised in the directory metadata -- ordinarily to
the issuers named by the policy entries for the authorization's identifier
(<xref target="policy"/>). When present, a client <bcp14>SHOULD</bcp14> select an identity provider from
this list. When absent, the full advertised set applies. <xref target="enumeration"/>
discusses what narrowing discloses.</t>
          </dd>
        </dl>
        <figure anchor="fig-chall">
          <name>A wif-01 challenge object</name>
          <sourcecode type="json"><![CDATA[
{
  "type": "wif-01",
  "url": "https://example.com/acme/chall/Rg5dV14Gh1Q",
  "status": "pending",
  "token": "LoqXcYV8q5ONbJQxbmR7SCTNo3tiAXDfowyjxAjEuX0",
  "issuers": [
    "https://token.actions.githubusercontent.com"
  ]
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="client-behaviour">
        <name>Client Behaviour</name>
        <t>To respond to a "wif-01" challenge, the client:</t>
        <ol spacing="normal" type="1"><li>
            <t>Computes the key authorization per <xref section="8.1" sectionFormat="of" target="RFC8555"/> from the
challenge "token" and its account key.</t>
          </li>
          <li>
            <t>Computes the Audience Binding Value per <xref target="audience"/>.</t>
          </li>
          <li>
            <t>Requests a WIF Token from its identity provider, specifying the ABV as the
audience. The means of making this request is platform specific; see
<xref target="profiles"/>. The client <bcp14>MUST</bcp14> request the shortest token lifetime the
platform permits that is sufficient to complete the exchange.</t>
          </li>
          <li>
            <t>POSTs to the challenge URL a JWS signed by its account key, as required by
<xref section="6.2" sectionFormat="of" target="RFC8555"/>, whose payload is a JSON object with a single
field:</t>
          </li>
        </ol>
        <figure anchor="fig-resp">
          <name>The payload of a wif-01 challenge response</name>
          <sourcecode type="json"><![CDATA[
{
  "wifToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjFGMkFCM..."
}
]]></sourcecode>
        </figure>
        <t>The "wifToken" field contains the WIF Token in JWS Compact Serialization
<xref target="RFC7515"/>.</t>
        <t>A client <bcp14>MUST</bcp14> obtain a separate WIF Token for each challenge it answers, because
the ABV commits to that challenge's "token" value. An order over n identifiers
therefore costs n token requests. Identity provider token endpoints are rate
limited, and a client that retries aggressively against a throttled endpoint
will not recover faster; clients <bcp14>SHOULD</bcp14> spread a large certificate requirement
over several orders rather than retry. See <xref target="dos"/>.</t>
        <t>A client <bcp14>MUST NOT</bcp14> write a WIF Token to persistent storage, and <bcp14>MUST NOT</bcp14> emit one
to a log or console. See <xref target="leakage"/>.</t>
      </section>
      <section anchor="validation">
        <name>Server Validation</name>
        <t>On receiving a response to a "wif-01" challenge, the ACME Server <bcp14>MUST</bcp14> perform
the following steps. A failure at any step means the challenge is not satisfied;
the server sets the challenge status to "invalid" and populates the "error"
field per <xref target="errors"/>.</t>
        <ol spacing="normal" type="1"><li>
            <t>Parse the "wifToken" as a JWS in Compact Serialization. Reject if it is not
well formed or does not contain exactly three parts.</t>
          </li>
          <li>
            <t>Examine the "alg" header parameter. The server <bcp14>MUST</bcp14> reject the token unless
"alg" identifies a digital signature algorithm the server accepts. The server
<bcp14>MUST</bcp14> reject "none" and <bcp14>MUST</bcp14> reject any MAC algorithm. The server <bcp14>MUST NOT</bcp14>
select the verification algorithm from the token; it <bcp14>MUST</bcp14> verify that the
algorithm is one permitted for the issuer selected in step 3.</t>
          </li>
          <li>
            <t>Extract the "iss" claim. Reject unless "iss" exactly matches, by the string
comparison rules of <xref section="6.2.1" sectionFormat="of" target="RFC3986"/>, an issuer identifier in the
server's configured set of acceptable issuers, further narrowed by the
challenge object's "issuers" field if present. The comparison <bcp14>MUST NOT</bcp14> accept
a prefix, suffix, or subdomain match.</t>
          </li>
          <li>
            <t>Retrieve the issuer's signing keys (<xref target="jwks"/>) and select the key indicated by
the "kid" header parameter. A server <bcp14>MUST</bcp14> reject a token whose "kid" does not
identify a key in the retrieved set. A server <bcp14>SHOULD</bcp14> reject a token carrying
no "kid"; where it accepts one, it <bcp14>MUST</bcp14> confine verification to keys whose
"use" and "alg" are consistent with the header examined in step 2, and <bcp14>MUST
NOT</bcp14> attempt verification against each key in the set in turn. Every identity
provider surveyed in <xref target="profiles"/> emits "kid".</t>
          </li>
          <li>
            <t>Verify the JWS signature per <xref target="RFC7515"/>.</t>
          </li>
          <li>
            <t>Verify that "exp" is present and in the future, and that "nbf" and "iat", if
present, are not in the future, in each case allowing for a clock skew no
greater than 60 seconds. Reject if the token's remaining validity exceeds the
server's configured maximum for the issuer.  </t>
            <t>
The skew allowance and the configured maximum compose. A server whose
configured maximum is 300 seconds and which allows 60 seconds of skew will in
the worst case accept a token 360 seconds old. A server for which the maximum
is a hard bound <bcp14>MUST</bcp14> configure a value low enough that the sum respects it,
and <bcp14>MUST NOT</bcp14> treat the value it advertises in "maxTokenLifetime"
(<xref target="metadata"/>) as the bound actually enforced.</t>
          </li>
          <li>
            <t>Compute the expected Audience Binding Value from the challenge "token" and
the thumbprint of the account key that signed the outer ACME request, per
<xref target="audience"/>. Verify that the "aud" claim contains that value. Where "aud" is
a JSON string it <bcp14>MUST</bcp14> equal the expected value; where it is an array of
strings it <bcp14>MUST</bcp14> contain the expected value as a member. The comparison <bcp14>MUST</bcp14>
be a case-sensitive, octet-for-octet comparison.</t>
          </li>
          <li>
            <t>If a "jti" claim is present, check it against a replay cache scoped to the
issuer and reject on a hit; otherwise record it for at least the remaining
validity of the token.  </t>
            <t>
A replay cache is defence in depth here, not the primary control. A token
presented against a "wif-01" challenge is already single-use in effect: its
audience commits to one challenge's "token", that value is never reused
(<xref target="challenge"/>), and a challenge that has left the "pending" state does not
return to it (<xref section="7.1.6" sectionFormat="of" target="RFC8555"/>). A server that implements no
replay cache is conformant; one that does will catch a client or server
defect that violates either property.</t>
          </li>
          <li>
            <t>Apply the authorization policy configured for the issuer to the token's
claims, yielding the set of identifiers that this Workload is permitted to be
authorized for. Reject unless the identifier of the authorization containing
this challenge is a member of that set. See <xref target="policy"/>.</t>
          </li>
          <li>
            <t>Set the challenge status to "valid" and the enclosing authorization status
to "valid" per <xref section="7.1.6" sectionFormat="of" target="RFC8555"/>, and set the authorization's
"expires" field as required by <xref target="authz-reuse"/>.</t>
          </li>
        </ol>
        <t>Steps 2 through 8 are protocol requirements and a conforming server <bcp14>MUST</bcp14>
implement them as stated. Step 9 is where deployment-specific judgement lives.</t>
      </section>
      <section anchor="authz-reuse">
        <name>Lifetime and Reuse of Federated Authorizations</name>
        <t><xref section="7.1.3" sectionFormat="of" target="RFC8555"/> contemplates a CA that "allows multiple orders to
be fulfilled based on a single authorization transaction", and deployed ACME
servers retain valid authorizations for reuse by later orders for periods
measured in days or weeks. Carried over unchanged, that practice would defeat
the property this mechanism exists to provide.</t>
        <t>The freshness supplied by the challenge "token" (<xref target="audience"/>) binds one token
to one challenge. It says nothing about how long the resulting authorization
remains spendable. A Workload that answers a "wif-01" challenge once, from an
execution context its policy permits, would otherwise leave behind an
authorization that any request signed by that account key can spend for the
authorization's whole lifetime, with no further token presented and no policy
consulted. The branch, environment, namespace and cluster constrained under
<xref target="policy"/> would be constrained once per authorization rather than once per
certificate, and the value of constraining them would be largely lost.</t>
        <t>Therefore a server <bcp14>MUST</bcp14> set the "expires" field of an authorization validated
by "wif-01" to a time no later than the "exp" of the WIF Token that validated
it, and <bcp14>MUST NOT</bcp14> subsequently extend it.</t>
        <t>No further rule is needed. <xref section="7.1.4" sectionFormat="of" target="RFC8555"/> defines "expires" as
"the timestamp after which the server will consider this authorization
invalid", so an authorization constrained this way cannot satisfy an order
placed after its token has expired. The requirement constrains the value of a
field that <xref target="RFC8555"/> already defines, with the meaning <xref target="RFC8555"/> already
gives it, and alters nothing in the order or authorization lifecycle.</t>
        <t>A server <bcp14>MAY</bcp14> impose a shorter lifetime. A server whose policy for an identifier
depends on claims that the Subscriber's own administrators can change
(<xref target="mutable-claims"/>) <bcp14>SHOULD</bcp14> do so.</t>
        <t>Platform token lifetimes are short -- 300 seconds by default on several of the
platforms in <xref target="profiles"/> -- so the practical effect is that a federated
authorization serves the order that produced it and no other. This is
deliberate. Clients <bcp14>MUST NOT</bcp14> assume an authorization validated this way will
still be available to a later order, and <bcp14>MUST</bcp14> be prepared to answer a fresh
challenge on every order.</t>
      </section>
      <section anchor="jwks">
        <name>Retrieval and Caching of Issuer Keys</name>
        <t>An ACME Server obtains an issuer's signing keys by retrieving the OpenID
Provider Metadata <xref target="OIDC-DISCOVERY"/> from the issuer identifier, and then the
JWK Set <xref target="RFC7517"/> from the "jwks_uri" member of that metadata.</t>
        <t>A server <bcp14>MUST</bcp14> derive the metadata URL from its own configured issuer
identifier and <bcp14>MUST NOT</bcp14> derive it from the "iss" claim of a token presented to
it, even after that claim has been matched against the configured set. This
constraint exists to make the retrieval independent of attacker-supplied input
under all conditions; see <xref target="ssrf"/>.</t>
        <t>A server <bcp14>SHOULD</bcp14> cache metadata and key sets and honour HTTP caching directives,
subject to a minimum refresh interval of its own choosing. A server <bcp14>SHOULD</bcp14>
refresh a key set on encountering an unknown "kid", rate-limited so that a
stream of tokens bearing unknown "kid" values cannot be used to drive requests
at the issuer.</t>
        <t>A server <bcp14>MAY</bcp14> be configured with an issuer's keys directly, bypassing retrieval.
This is appropriate for issuers reachable only from within a private network.</t>
      </section>
      <section anchor="errors">
        <name>Error Types</name>
        <t>This document defines the error types in <xref target="tbl-errors"/>, to be used in the
"error" field of an invalidated challenge and in problem documents returned in
response to a challenge.</t>
        <table anchor="tbl-errors">
          <name>Error types defined by this document</name>
          <thead>
            <tr>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">badWifToken</td>
              <td align="left">The WIF Token was malformed, its signature did not verify, or it was expired or not yet valid</td>
            </tr>
            <tr>
              <td align="left">wifIssuerNotAccepted</td>
              <td align="left">The token's issuer is not among those the server accepts for this authorization</td>
            </tr>
            <tr>
              <td align="left">wifAudienceMismatch</td>
              <td align="left">The "aud" claim did not contain the expected Audience Binding Value</td>
            </tr>
            <tr>
              <td align="left">wifTokenReplayed</td>
              <td align="left">A token bearing this "jti" has already been presented</td>
            </tr>
            <tr>
              <td align="left">wifPolicyDenied</td>
              <td align="left">The token was valid, but policy does not permit this Workload to be authorized for this identifier</td>
            </tr>
          </tbody>
        </table>
        <t>A server returning "wifPolicyDenied" <bcp14>SHOULD</bcp14> include in the problem document's
"detail" field enough information for an operator to correct the policy or the
Workload, and in particular <bcp14>SHOULD</bcp14> name the claims that were evaluated and give
the values the presented token carried for them. It <bcp14>MUST NOT</bcp14> include the values
the policy expected (<xref target="nondisclosure"/>). The requester may be unauthenticated
(<xref target="accounts"/>), and the token's own values are the only ones it has already
established.</t>
      </section>
    </section>
    <section anchor="accounts">
      <name>Accounts</name>
      <section anchor="no-eab">
        <name>External Account Binding Is Not Required</name>
        <t><xref section="7.3.4" sectionFormat="of" target="RFC8555"/> defines External Account Binding (EAB) so that a CA
can associate a new ACME account with a Subscriber it already knows, and
<xref section="7.1.3" sectionFormat="of" target="RFC8555"/> recognizes that a CA may then treat identifiers as
already authorized "based on an external account". A CA using EAB that way
places the Subscriber relationship on the account, and the account key carries
the Subscriber's authority from then on.</t>
        <t>This document places the relationship elsewhere. The association between a
Workload and a Subscriber is established by the policy entry (<xref target="policy"/>) that
the Workload's WIF Token satisfies, and it is established afresh for every
authorization. The account presenting the token contributes a key to which the
token is bound (<xref target="audience"/>) and nothing else. It holds no authority of its
own, and whatever an authorization lets it obtain lapses when that
authorization expires (<xref target="authz-reuse"/>).</t>
        <t>EAB therefore has no part in deciding who a Workload is or what it may obtain.
A Workload creates an ordinary <xref target="RFC8555"/> account from a freshly generated key,
with no "externalAccountBinding" field, and holds no pre-shared secret of any
kind at any point. This is the property that makes the mechanism usable by
ephemeral compute: there is no credential to provision.</t>
      </section>
      <section anchor="eab-coexist">
        <name>Coexisting with External Account Binding</name>
        <t>"externalAccountRequired" (<xref section="7.1.1" sectionFormat="of" target="RFC8555"/>) applies to every
newAccount request made to a directory. A CA that must continue to require EAB
of some clients can accommodate Workloads using "wif-01" in either of two ways,
both entirely within <xref target="RFC8555"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Set "externalAccountRequired" to false. Clients that supply EAB continue to
receive whatever pre-authorization the CA grants them. An account created
without EAB receives none, and can obtain a certificate only by satisfying a
challenge; admitting such accounts grants no authority on its own.</t>
          </li>
          <li>
            <t>Publish a separate directory for Workloads using "wif-01", with
"externalAccountRequired" false or absent, and leave the existing directory
unchanged.</t>
          </li>
        </ul>
        <t>A CA may require EAB for reasons unrelated to authorization, such as billing or
a contractual relationship with each account holder. Those reasons are outside
the scope of this document; see <xref target="open-issues"/>.</t>
      </section>
      <section anchor="ephemeral">
        <name>Ephemeral Accounts</name>
        <t>A Workload with nowhere to persist a key will generate a fresh account key and
create a fresh account on every execution. A server supporting this document
<bcp14>SHOULD</bcp14> therefore:</t>
        <ul spacing="normal">
          <li>
            <t>accept account creation at a rate consistent with the volume of executions it
serves;</t>
          </li>
          <li>
            <t>apply rate limits keyed on the requested identifier and, once a token has
been validated, on the policy entry it satisfied or on its issuer and
subject -- not on the account alone, which changes on every execution, so
that a limit keyed only on it limits nothing; and</t>
          </li>
          <li>
            <t>deactivate or discard accounts that have held no pending or valid
authorization for longer than the plausible interval between executions.</t>
          </li>
        </ul>
        <t>Clients <bcp14>SHOULD NOT</bcp14> create an account per order where one account per execution
will serve. A long-running client that can persist its account key has no
reason to create an account per execution, and <bcp14>SHOULD NOT</bcp14> do so.</t>
      </section>
    </section>
    <section anchor="metadata">
      <name>Directory Metadata</name>
      <t>A server supporting this document <bcp14>SHOULD</bcp14> advertise the fact in the "meta" field
of its directory object (<xref section="7.1.1" sectionFormat="of" target="RFC8555"/>), using a "wif" member
whose value is an object with the following fields:</t>
      <dl>
        <dt>issuers (required, array of string):</dt>
        <dd>
          <t>The issuer identifiers the server accepts. A client uses this to determine
which of its available identities to present.</t>
        </dd>
        <dt>maxTokenLifetime (optional, number):</dt>
        <dd>
          <t>The maximum remaining validity, in seconds, that the server will accept in a
presented token. A client <bcp14>SHOULD</bcp14> request a token lifetime no greater than this.</t>
        </dd>
      </dl>
      <figure anchor="fig-dir">
        <name>Directory metadata advertising federated workload identity</name>
        <sourcecode type="json"><![CDATA[
{
  "newNonce": "https://example.com/acme/new-nonce",
  "newAccount": "https://example.com/acme/new-account",
  "newOrder": "https://example.com/acme/new-order",
  "meta": {
    "termsOfService": "https://example.com/acme/terms/2026-09",
    "wif": {
      "issuers": [
        "https://token.actions.githubusercontent.com",
        "https://oidc.eks.us-east-1.amazonaws.com/id/EXAMPLE539D4633"
      ],
      "maxTokenLifetime": 300
    }
  }
}
]]></sourcecode>
      </figure>
      <t>Future specifications may define further members of the "wif" object. A client
<bcp14>MUST</bcp14> ignore members it does not recognize.</t>
      <t>Advertising an issuer in the directory discloses which platforms the CA's
subscribers use. A CA for which this is sensitive <bcp14>MAY</bcp14> omit the "issuers" field
and rely on the per-challenge "issuers" field instead. The directory is
retrieved without authentication (<xref section="7.1.1" sectionFormat="of" target="RFC8555"/>), so its contents
cannot be varied by requester. See <xref target="privacy"/>.</t>
    </section>
    <section anchor="idp-req">
      <name>Identity Provider Requirements</name>
      <t>An identity provider is suitable for use with this document if it meets all of
the following. Compliance is a property of the provider, assessed by the CA
operator at configuration time; nothing in the protocol verifies it.</t>
      <ol spacing="normal" type="1"><li>
          <t>It issues JWTs <xref target="RFC7519"/> signed with a digital signature algorithm from
<xref target="RFC7518"/> or a successor, of at least 128-bit security strength.</t>
        </li>
        <li>
          <t>It publishes OpenID Provider Metadata <xref target="OIDC-DISCOVERY"/> at the issuer
identifier, or the CA operator can otherwise obtain its keys through a
trustworthy channel.</t>
        </li>
        <li>
          <t>It permits the Workload to determine the "aud" claim of the issued token, as
an arbitrary string chosen per request. A provider that requires the audience
to be a value pre-registered with the provider, and cannot vary it per
request, does not meet this requirement and <bcp14>MUST NOT</bcp14> be configured as an
acceptable issuer. See <xref target="binding-req"/>.</t>
        </li>
        <li>
          <t>It includes an "exp" claim, and permits or defaults to a lifetime short
enough for the CA's configured maximum.</t>
        </li>
        <li>
          <t>It issues tokens whose "sub" claim, or some combination of claims, identifies
the Workload with sufficient precision and stability for the CA's policy to
act on. See <xref target="mutable-claims"/> for the stability requirement, which is
frequently underestimated.</t>
        </li>
        <li>
          <t>It does not issue tokens for a given "sub" to any party other than the
Workload that "sub" denotes.</t>
        </li>
      </ol>
      <t>Requirement 6 deserves emphasis. An identity provider shared among mutually
untrusting tenants -- which describes every public CI platform -- satisfies it
only in the sense that it will not issue a token for tenant A to tenant B. It
does not and cannot prevent tenant B from obtaining a token for tenant B. An
issuer identifier is therefore never sufficient authorization on its own; see
<xref target="issuer-confusion"/>.</t>
    </section>
    <section anchor="policy">
      <name>Authorization Policy</name>
      <section anchor="model">
        <name>Model</name>
        <t>This document does not define a policy language. It defines the relation a
policy expresses: a set of entries, each associating an identifier with an
acceptable issuer and a matching rule over that issuer's claims. A Subscriber
configures its entries out of band, before any request arrives, and it is the
entry -- not the ACME account -- that records which Subscriber a Workload
belongs to (<xref target="accounts"/>).</t>
        <t>The relation can be read in either direction, and a server may index it either
way:</t>
        <artwork><![CDATA[
permit:  (issuer, claims) -> set of identifiers
expect:  identifier       -> set of (issuer, rule over claims)

step 9:  identifier is in permit(iss, claims)
    i.e. some (issuer, rule) in expect(identifier)
         has issuer == iss and rule(claims) holds
]]></artwork>
        <t>A server ordinarily uses the second reading twice. When it creates an
authorization, it looks up the entries for the authorization's identifier. If
there are none, it does not offer "wif-01" (but see <xref target="enumeration"/>); if there
are, it may narrow the challenge's "issuers" field to the issuers they name, and
it holds their matching rules for step 9 of <xref target="validation"/>. When it validates a
response, step 9 asks whether the verified token satisfies one of those rules.</t>
        <t>The authorization's identifier type, value, and wildcard status
(<xref section="7.1.4" sectionFormat="of" target="RFC8555"/>) together form the lookup key. Whether entries
match identifiers exactly or by pattern is a property of the policy language;
servers <bcp14>SHOULD</bcp14> prefer exact matching, since a pattern that matches more names
than its author intended grants every one of them.</t>
        <t>Each identifier in an order has its own authorization and is looked up
independently. An order whose identifiers have entries naming different
Workloads cannot be completed by any one of them. That is the intended result: a
Workload cannot obtain a certificate that also names another Workload's
identifiers.</t>
        <t>A policy <bcp14>MUST</bcp14> be expressed in terms of an explicit allowlist of issuers and, for
each, an explicit matching rule over claims. A policy <bcp14>MUST NOT</bcp14> be expressible as
"any token from a configured issuer", because on a shared identity provider that
admits every tenant of that provider (<xref target="issuer-confusion"/>).</t>
      </section>
      <section anchor="nondisclosure">
        <name>Policy Is Not Disclosed, and Is Not Secret</name>
        <t>A server does not tell the client which claim values an identifier's policy
entry expects. Nothing in the challenge object carries them, and the client has
no use for them: a Workload cannot choose the claims its identity provider puts
in its token, so knowing the expected values would not help it produce them. The
client needs to know only which issuer to ask for a token, which the "issuers"
field supplies, and the ABV, which it computes.</t>
        <t>Withholding the expected values is worthwhile. They describe the Subscriber's
internal structure -- repositories, branches, clusters, namespaces, cloud
accounts, deployment environments -- and the requester may be unauthenticated
(<xref target="accounts"/>). A server <bcp14>MUST NOT</bcp14> include expected claim values in a challenge
object or in a problem document (<xref target="errors"/>).</t>
        <t>The expected values are nonetheless not a secret, and the security of this
mechanism <bcp14>MUST NOT</bcp14> depend on their confidentiality. Many are guessable or
public. A GitHub Actions subject is assembled from the repository and branch
names; repository and owner identifiers are returned by the provider's public
API; a Kubernetes subject names a namespace and a service account. What
establishes that a token bearing a given subject was issued to the Workload that
subject denotes is the identity provider (requirement 6 of <xref target="idp-req"/>), and
what establishes that it was issued for this authorization is the audience
binding (<xref target="binding-req"/>). An attacker who knows every value in a policy entry
is no closer to satisfying it.</t>
        <t>A deployment that regards its policy values as secret, and relaxes its matching
rules on that basis -- matching a subject alone, say, on the theory that nobody
else knows it -- has no protection once those values are learned.</t>
      </section>
      <section anchor="recommendations-for-policy-authors">
        <name>Recommendations for Policy Authors</name>
        <dl>
          <dt>Match on immutable claims:</dt>
          <dd>
            <t>Where a provider exposes both a human-readable name and a stable numeric
identifier for the same entity, match the numeric identifier. See
<xref target="mutable-claims"/>.</t>
          </dd>
          <dt>Match on complete values:</dt>
          <dd>
            <t>Prefix and suffix matching over "sub" invites errors when the provider changes
its subject format, which providers do. Where a provider exposes the
components of "sub" as individual claims, match those.</t>
          </dd>
          <dt>Constrain execution context:</dt>
          <dd>
            <t>Where the provider exposes the branch, tag, environment, or namespace in which
the Workload ran, policy for a production identifier <bcp14>SHOULD</bcp14> require a specific
value rather than accepting any.</t>
          </dd>
          <dt>Scope identifiers narrowly:</dt>
          <dd>
            <t>Grant a Workload the narrowest set of identifiers that lets it do its job.
Wildcard grants over a whole zone should be exceptional and deliberate.</t>
          </dd>
          <dt>Interaction with CAA:</dt>
          <dd>
            <t>A domain holder may constrain which accounts and methods may be used for a
name using <xref target="RFC8657"/>. A CA implementing this document <bcp14>MUST</bcp14> honour a
"validationmethods" parameter naming "wif-01", and <bcp14>MUST NOT</bcp14> treat a federated
authorization as exempt from CAA processing.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="acme-validation-methods">
        <name>ACME Validation Methods</name>
        <t>IANA is requested to add the following entry to the "ACME Validation Methods"
registry:</t>
        <table anchor="tbl-iana-val">
          <name>Addition to the ACME Validation Methods registry</name>
          <thead>
            <tr>
              <th align="left">Label</th>
              <th align="left">Identifier Type</th>
              <th align="left">ACME</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">wif-01</td>
              <td align="left">dns</td>
              <td align="left">Y</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">wif-01</td>
              <td align="left">ip</td>
              <td align="left">Y</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
        <t>The "wif-01" method is applicable to further identifier types; entries for those
are expected to be registered by the documents defining them.</t>
      </section>
      <section anchor="acme-error-types">
        <name>ACME Error Types</name>
        <t>IANA is requested to add the following entries to the "ACME Error Types"
registry, each with the prefix "urn:ietf:params:acme:error:":</t>
        <table anchor="tbl-iana-err">
          <name>Additions to the ACME Error Types registry</name>
          <thead>
            <tr>
              <th align="left">Type</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">badWifToken</td>
              <td align="left">The WIF Token was malformed, unverifiable, or not currently valid</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">wifIssuerNotAccepted</td>
              <td align="left">The token issuer is not accepted for this authorization</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">wifAudienceMismatch</td>
              <td align="left">The token audience did not contain the expected binding value</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">wifTokenReplayed</td>
              <td align="left">A token with this identifier has already been presented</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">wifPolicyDenied</td>
              <td align="left">Policy does not permit this workload to obtain this identifier</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="acme-directory-metadata-fields">
        <name>ACME Directory Metadata Fields</name>
        <t>IANA is requested to add the following entry to the "ACME Directory Metadata
Fields" registry:</t>
        <table anchor="tbl-iana-meta">
          <name>Addition to the ACME Directory Metadata Fields registry</name>
          <thead>
            <tr>
              <th align="left">Field Name</th>
              <th align="left">Field Type</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">wif</td>
              <td align="left">object</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="challenge-object-fields-and-urn-label">
        <name>Challenge Object Fields and URN Label</name>
        <t>No IANA registry exists for the fields of a challenge object, which
<xref section="8" sectionFormat="of" target="RFC8555"/> leaves to the definition of each challenge type. The
"issuers" field is defined in <xref target="challenge"/> as part of the "wif-01" challenge
type and requires no registration.</t>
        <t>The Audience Binding Value of <xref target="audience"/> uses the prefix
"urn:ietf:params:acme:wif:" within the "urn:ietf:params:acme" namespace
registered by <xref section="9.6" sectionFormat="of" target="RFC8555"/>. No IANA registry exists for labels
within that namespace, and this document requests no IANA action for the "wif"
label. Values following the prefix are computed, not registered. Other
specifications reusing the construction of <xref target="audience"/> may share this label.
See <xref target="open-issues"/>.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="binding-security">
        <name>The Audience Binding Is Load-Bearing</name>
        <t>A WIF Token is a bearer credential. It travels through a CI runner's process
environment, is handled by client code of varying quality, and in practice
sometimes reaches build logs, crash dumps, and artifact archives. The mechanism
in this document is safe to deploy on that assumption only because the token is
bound to an ACME account key that never leaves the Workload.</t>
        <t>An attacker who obtains a strictly bound token before it expires cannot use it.
The token's audience commits to the thumbprint of a specific account key and
to a specific challenge token; the ACME Server
recomputes the expected audience from the account key that signed the request it
actually received. Presenting the token under any other account key fails step 7
of <xref target="validation"/>.</t>
        <t>This protection is what makes the mechanism deployable, and it is why
<xref target="binding-req"/> admits no weaker mode. A token whose audience names the ACME
Server as a stable value, rather than committing to the account key, is a usable
bearer credential for its full lifetime, and no combination of short lifetimes
and replay caches recovers the property that a leaked token is inert. Where a
platform offers only such a path, the correct response is to use a different
path on that platform (<xref target="azure"/>), or a different platform, not to weaken the
binding.</t>
      </section>
      <section anchor="aud-semantics">
        <name>Use of the "aud" Claim</name>
        <t>The "aud" claim of <xref section="4.1.3" sectionFormat="of" target="RFC7519"/> identifies the recipients a JWT
is intended for, and a recipient is expected to reject a token that does not
identify it. The ABV is not a recipient identifier in that sense. It is a value
that changes with every challenge, names no party, and is recognized not by
comparison against a configured name but by recomputation from state the server
already holds.</t>
        <t>The construction is nonetheless faithful to the claim's purpose, and in one
respect stricter than the usual reading: a server accepts only an audience it
can itself derive, which is a narrower rule than matching a configured
identifier. No other relying party will accept a token bearing the
"urn:ietf:params:acme:wif:" prefix unless it has deliberately configured that
value, and <xref target="audience"/> makes the prefix legible so that an administrator
encountering it can tell what it is for.</t>
        <t>Two consequences deserve statement.</t>
        <t>First, the audience cannot be allowlisted at the identity provider. Where a
provider, or a tenant administrator, restricts which audiences a Workload may
request -- a control some deployments rely on -- that restriction cannot be
expressed over a value that differs on every challenge. Deployments must obtain
the equivalent assurance from the provider's controls over which Workloads may
obtain tokens at all, and from the policy of <xref target="policy"/>, rather than from
audience restriction.</t>
        <t>Second, a server <bcp14>MUST NOT</bcp14> treat the presence of the "urn:ietf:params:acme:wif:"
prefix as carrying any security weight on its own. It is a collision-avoidance
and legibility device. Only the recomputation in step 7 of <xref target="validation"/> is
load-bearing.</t>
      </section>
      <section anchor="issuer-confusion">
        <name>Issuer Allowlisting Is Not Authorization</name>
        <t>The most likely deployment error is to configure an issuer and stop.</t>
        <t>Every repository on GitHub receives tokens from the issuer
"https://token.actions.githubusercontent.com". Every EKS cluster in an AWS
region shares an issuer hostname, though not a path. A policy that accepts any
token from such an issuer accepts a token from any tenant of that platform,
including one created by an attacker minutes earlier for the purpose. The
attacker need not compromise anything: they need only sign up.</t>
        <t>Policy <bcp14>MUST</bcp14> therefore pin the subject as well as the issuer, and <bcp14>MUST</bcp14> do so on
claims that identify the Subscriber's own workloads specifically. An
implementation <bcp14>SHOULD</bcp14> refuse to load a policy whose matching rule for an issuer
is unconstrained, and <bcp14>SHOULD</bcp14> warn on a rule that constrains only mutable claims
(<xref target="mutable-claims"/>).</t>
        <t>This failure mode is well documented in the operational literature on cloud
identity federation and has produced real compromises. It is repeated here
because the ACME context is new and the mistake will be made again.</t>
      </section>
      <section anchor="mutable-claims">
        <name>Mutable and Reassignable Claims</name>
        <t>Several providers expose claims that look like stable identifiers but are not.</t>
        <t>A GitHub repository's "repository" and "repository_owner" claims change when the
repository is renamed or transferred, and the freed name may be claimed by
another account. The "repository_id" and "repository_owner_id" claims are
numeric and are not reassigned. Policy that matches "example-corp/service-a"
will follow the name to whoever holds it next; policy that matches the owner and
repository identifiers will not.</t>
        <t>A Kubernetes service account name may be deleted and recreated in the same
namespace by anyone with authority there; the "kubernetes.io/serviceaccount/
service-account.uid" claim, where present, distinguishes the incarnations.</t>
        <t>An AWS IAM role ARN may be deleted and recreated with the same name and
different trust policy.</t>
        <t>Where a provider offers both forms, policy <bcp14>MUST</bcp14> prefer the non-reassignable one.
Where it does not, the CA operator should understand that the authorization
follows the name.</t>
        <t>A related hazard: some providers permit the tenant administrator to change the
format of the "sub" claim. GitHub's subject claim customization is an example.
Policy expressed as a match against a whole "sub" string can therefore be
invalidated, or subtly widened, by a configuration change made elsewhere.
Matching individual claims is more robust than parsing "sub".</t>
      </section>
      <section anchor="execution-context">
        <name>Execution Context</name>
        <t>A token proves which Workload identity ran, not that the code it ran was the
code its operators intended. A CI platform's identity token is issued to a
workflow, and a party who can modify that workflow -- by pushing to a branch,
opening a pull request that triggers a privileged workflow, or compromising a
dependency the workflow executes -- can cause a token to be issued for that
identity and exfiltrated or used.</t>
        <t>Policy for identifiers of consequence <bcp14>SHOULD</bcp14> constrain the execution context:
the branch or tag, the deployment environment, the cluster and namespace. Where
the platform offers a gated environment with required approvals, requiring it in
policy converts certificate issuance into a reviewed action.</t>
        <t>Deployments should be aware that workflows triggered by contributions from
outside the trust boundary are a recurring source of identity confusion on CI
platforms, and should consult their platform's current guidance rather than
assuming a given trigger is safe.</t>
      </section>
      <section anchor="ssrf">
        <name>Server-Side Request Forgery and Issuer Metadata</name>
        <t>An ACME Server implementing this document makes outbound HTTP requests to
retrieve issuer metadata and keys. If the URL of those requests could be
influenced by a presented token, an attacker could use the CA as a probe against
its internal network or against third parties.</t>
        <t><xref target="jwks"/> therefore requires the server to derive metadata URLs from its own
configuration, never from the "iss" claim, even after that claim has been
matched against the configured set. Matching then deriving is not equivalent to
deriving from configuration: a matching bug, a normalization difference, or a
future relaxation of the comparison rule turns the former into an SSRF
primitive, and the latter into nothing.</t>
        <t>Implementations <bcp14>SHOULD</bcp14> additionally apply the usual protections to these
requests: resolve and pin addresses, refuse non-global addresses unless
configured for a private issuer, cap response size, cap redirect depth, and time
out aggressively.</t>
      </section>
      <section anchor="enumeration">
        <name>Policy Enumeration</name>
        <t>Where accounts are created without EAB (<xref target="accounts"/>), anyone may place an
order for any identifier. Whether the server then offers "wif-01", and which
issuers it names in the challenge, tells an unauthenticated requester that the
identifier's Subscriber uses federated identity and which platform it uses.
Repeated across many names, this maps a Subscriber's deployment without any
credential.</t>
        <t>It does not expose expected claim values (<xref target="nondisclosure"/>), and it confers no
ability to obtain a certificate. A CA for which the disclosure matters <bcp14>MAY</bcp14>:</t>
        <ul spacing="normal">
          <li>
            <t>omit the "issuers" field, or give the full advertised set, rather than
narrowing it per identifier;</t>
          </li>
          <li>
            <t>offer "wif-01" for identifiers that have no policy entry, failing such
challenges with "wifPolicyDenied" exactly as it would fail a policy mismatch;
and</t>
          </li>
          <li>
            <t>rate limit order and authorization creation per requester, independently of
the account.</t>
          </li>
        </ul>
      </section>
      <section anchor="dos">
        <name>Denial of Service</name>
        <t>Validating a "wif-01" challenge costs the server more than validating a
proof-of-control challenge, and the cost is incurred before the token is known
to be good. Servers <bcp14>SHOULD</bcp14> reject obviously malformed tokens
before performing signature verification, <bcp14>SHOULD</bcp14> cap the accepted token size,
and <bcp14>SHOULD</bcp14> rate-limit challenge responses per account, per requested
identifier, and per policy entry (<xref target="ephemeral"/>).</t>
        <t>A replay cache, where a server implements one (<xref target="validation"/>), is an
unbounded-growth hazard if the accepted token lifetime is long. A server
implementing one <bcp14>MUST</bcp14> bound retention by the maximum token lifetime it accepts
for the issuer, and <bcp14>MUST</bcp14> reject a token whose remaining validity exceeds that
maximum, so that the cache is bounded by arrival rate rather than by token
lifetime.</t>
        <t>Because each challenge requires its own token, an order over n identifiers
produces n requests to the identity provider's token endpoint. Those endpoints
are rate limited by the platform, and the limit is the Subscriber's, not the
CA's: a CA cannot relieve it. Servers <bcp14>SHOULD</bcp14> bound the number of identifiers in
an order for which they will offer "wif-01", and <bcp14>SHOULD</bcp14> state that bound in
their documentation.</t>
        <t>An identity provider outage prevents key retrieval and therefore prevents
issuance. Servers <bcp14>SHOULD</bcp14> serve stale key sets for a bounded period rather than
failing closed immediately, balancing availability against the window in which a
revoked key remains accepted.</t>
      </section>
      <section anchor="cryptographic-agility-and-algorithm-confusion">
        <name>Cryptographic Agility and Algorithm Confusion</name>
        <t>Step 2 of <xref target="validation"/> requires the server to reject MAC algorithms and
"none", and to verify that the algorithm is one permitted for the selected
issuer rather than selecting it from the token. Both are necessary. The
historical JWT vulnerabilities in this area arose from implementations that
treated the token's own header as authoritative for verification parameters.</t>
        <t>Servers <bcp14>MUST</bcp14> maintain per-issuer lists of acceptable algorithms and <bcp14>SHOULD</bcp14>
constrain them to those the issuer actually uses. An issuer that publishes only
RSA keys should not have ECDSA accepted on its behalf.</t>
      </section>
      <section anchor="leakage">
        <name>Token Handling by Clients</name>
        <t>Clients <bcp14>MUST NOT</bcp14> persist WIF Tokens and <bcp14>MUST NOT</bcp14> log them. Where the CI platform
provides a secret-masking facility, clients <bcp14>SHOULD</bcp14> register the token with it.
Clients <bcp14>SHOULD</bcp14> request the shortest lifetime the platform permits. Clients
<bcp14>SHOULD</bcp14> pass the token to the ACME server over a TLS connection whose certificate
they verify, and <bcp14>MUST NOT</bcp14> send a WIF Token to any URL other than one obtained
from the ACME server's directory or from a resource within it.</t>
        <t>Because the ABV commits to the account key, a client <bcp14>MUST</bcp14> use the same account
key for the request carrying the token as it used when computing the ABV. A
client that regenerates its key between those steps will produce a token that
cannot validate.</t>
      </section>
      <section anchor="relationship-to-proof-of-control">
        <name>Relationship to Proof of Control</name>
        <t>A federated authorization asserts that a workload identity is entitled, by CA
policy, to a certificate for an identifier. It does not assert that anyone
demonstrated control of that identifier at issuance time. For a publicly
trusted CA issuing for public DNS names this is a material difference, and such
a CA is unlikely to accept "wif-01" in place of proof of control; CAA
<xref target="RFC8657"/> gives domain holders a means of saying so. The mechanism is aimed at
private and enterprise CAs, where the CA's policy is itself the authoritative
statement of who may hold which name within the organization's namespace, and at
identifier types for which proof of control is not meaningful.</t>
        <t>A CA wishing to require both proof of control and federated identity must
express that as two authorizations, not two challenges within one; see
<xref target="challenge"/>.</t>
      </section>
      <section anchor="claims-in-certificates">
        <name>Claims in Certificates</name>
        <t>An ACME Server <bcp14>MUST NOT</bcp14> copy claims from a WIF Token into an issued certificate
unless its profile explicitly provides for it. Claims routinely contain internal
repository names, cluster names, namespaces, and numeric account identifiers.
For a publicly trusted certificate these would be published to Certificate
Transparency logs <xref target="RFC6962"/> and become permanent public record.</t>
      </section>
    </section>
    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>The WIF Token discloses to the CA the identity of the Workload and, through its
claims, a quantity of internal structure: repository and organization names,
cluster and namespace names, branch names, deployment environment names,
platform account identifiers. This is more than an ACME server learns from a
proof-of-control challenge, and it is retained in the CA's validation records.</t>
      <t>CA operators <bcp14>SHOULD</bcp14> retain only the claims their policy and audit obligations
require, <bcp14>SHOULD</bcp14> state what they retain and for how long, and <bcp14>SHOULD NOT</bcp14> retain
the token itself beyond the replay window.</t>
      <t>The directory metadata of <xref target="metadata"/> discloses to any unauthenticated party
which identity platforms the CA's subscribers use, and for EKS-style issuers may
disclose specific cluster identifiers. <xref target="metadata"/> permits a CA to omit
the advertised set. Challenges disclose more, identifier by identifier; see
<xref target="enumeration"/>.</t>
      <t>The identity provider learns that the Workload requested a token for an audience
beginning "urn:ietf:params:acme:wif:", and therefore that certificate issuance
is occurring, but learns nothing about the CA, the identifier, or the account,
because the remainder of the ABV is a digest. This is a deliberate property of
the construction in <xref target="audience"/>.</t>
    </section>
    <section anchor="open-issues">
      <name>Open Issues</name>
      <t>This section is to be removed before publication.</t>
      <ol spacing="normal" type="1"><li>
          <t>Challenge type name. "wif-01" borrows a term popularized by cloud vendors.
Alternatives considered: "federated-01", "idtoken-01", "oidc-01". The working
group may prefer a name that does not presuppose OpenID Connect, since the
mechanism needs only a signed JWT with a discoverable key set.</t>
        </li>
        <li>
          <t>Providers that cannot vary the audience per request. <xref target="binding-req"/>
excludes them, which today excludes the Azure Instance Metadata Service path
(<xref target="azure"/>). The exclusion is deliberate and its reasoning is given there. If
the working group judges it too strict, what is needed is a control that
binds the token to the account without reintroducing an out-of-band secret;
the authors did not find one.</t>
        </li>
        <li>
          <t>Whether the challenge object should carry the expected ABV explicitly rather
than requiring the client to compute it. Explicit transmission is friendlier
to thin clients but introduces a value the client must not blindly trust.</t>
        </li>
        <li>
          <t>Whether this document should define a minimal interoperable policy
expression, or whether leaving policy wholly to implementations will produce
the same non-interoperability the document set out to fix.</t>
        </li>
        <li>
          <t>The lifetime rule of <xref target="authz-reuse"/> makes a federated authorization
effectively single-use, which departs from common ACME server behaviour and
costs clients that batch orders. The working group should confirm the trade.
A middle position -- permitting reuse within a short fixed window
independent of the token's "exp" -- was considered and seems harder to reason
about rather than easier.</t>
        </li>
        <li>
          <t>Interaction with <xref target="I-D.ietf-acme-pop"/>, which allows issuance without a CSR.
A workload holding no private key material at all until issuance time is a
plausible combination worth examining.</t>
        </li>
        <li>
          <t>External Account Binding required for reasons other than authorization.
<xref target="accounts"/> shows that EAB plays no part in authorization under this
document. A CA that nonetheless requires it -- for billing, or to maintain a
contractual relationship with each account holder -- still cannot associate
an account with a Subscriber without a pre-shared secret. A "wifToken" field
of the newAccount request was considered for that purpose and set aside, to
keep this document within the extension points ACME already defines. Whether
the working group wants that gap addressed, and if so whether inside ACME or
outside it -- for instance by exchanging a WIF Token for EAB credentials
using OAuth 2.0 Token Exchange <xref target="RFC8693"/> -- is an open question.</t>
        </li>
        <li>
          <t>The "urn:ietf:params:acme:wif:" prefix. <xref target="RFC8555"/> registers the
"urn:ietf:params:acme" namespace but creates no registry for labels within
it, so nothing records that "wif" is taken. The working group may prefer to
create such a registry, or to use a prefix outside that namespace.</t>
        </li>
      </ol>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8555">
          <front>
            <title>Automatic Certificate Management Environment (ACME)</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="J. Hoffman-Andrews" initials="J." surname="Hoffman-Andrews"/>
            <author fullname="D. McCarney" initials="D." surname="McCarney"/>
            <author fullname="J. Kasten" initials="J." surname="Kasten"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>Public Key Infrastructure using X.509 (PKIX) certificates are used for a number of purposes, the most significant of which is the authentication of domain names. Thus, certification authorities (CAs) in the Web PKI are trusted to verify that an applicant for a certificate legitimately represents the domain name(s) in the certificate. As of this writing, this verification is done through a collection of ad hoc mechanisms. This document describes a protocol that a CA and an applicant can use to automate the process of verification and certificate issuance. The protocol also provides facilities for other certificate management functions, such as certificate revocation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8555"/>
          <seriesInfo name="DOI" value="10.17487/RFC8555"/>
        </reference>
        <reference anchor="RFC7515">
          <front>
            <title>JSON Web Signature (JWS)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </reference>
        <reference anchor="RFC7517">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>
        <reference anchor="RFC7518">
          <front>
            <title>JSON Web Algorithms (JWA)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications. It defines several IANA registries for these identifiers.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7518"/>
          <seriesInfo name="DOI" value="10.17487/RFC7518"/>
        </reference>
        <reference anchor="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC7638">
          <front>
            <title>JSON Web Key (JWK) Thumbprint</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>This specification defines a method for computing a hash value over a JSON Web Key (JWK). It defines which fields in a JWK are used in the hash computation, the method of creating a canonical form for those fields, and how to convert the resulting Unicode string into a byte sequence to be hashed. The resulting hash value can be used for identifying or selecting the key represented by the JWK that is the subject of the thumbprint.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7638"/>
          <seriesInfo name="DOI" value="10.17487/RFC7638"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </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="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" month="December" day="15"/>
          </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="RFC8657">
          <front>
            <title>Certification Authority Authorization (CAA) Record Extensions for Account URI and Automatic Certificate Management Environment (ACME) Method Binding</title>
            <author fullname="H. Landau" initials="H." surname="Landau"/>
            <date month="November" year="2019"/>
            <abstract>
              <t>The Certification Authority Authorization (CAA) DNS record allows a domain to communicate an issuance policy to Certification Authorities (CAs) but only allows a domain to define a policy with CA-level granularity. However, the CAA specification (RFC 8659) also provides facilities for an extension to admit a more granular, CA-specific policy. This specification defines two such parameters: one allowing specific accounts of a CA to be identified by URIs and one allowing specific methods of domain control validation as defined by the Automatic Certificate Management Environment (ACME) protocol to be required.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8657"/>
          <seriesInfo name="DOI" value="10.17487/RFC8657"/>
        </reference>
        <reference anchor="RFC8226">
          <front>
            <title>Secure Telephone Identity Credentials: Certificates</title>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="February" year="2018"/>
            <abstract>
              <t>In order to prevent the impersonation of telephone numbers on the Internet, some kind of credential system needs to exist that cryptographically asserts authority over telephone numbers. This document describes the use of certificates in establishing authority over telephone numbers, as a component of a broader architecture for managing telephone numbers as identities in protocols like SIP.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8226"/>
          <seriesInfo name="DOI" value="10.17487/RFC8226"/>
        </reference>
        <reference anchor="RFC9118">
          <front>
            <title>Enhanced JSON Web Token (JWT) Claim Constraints for Secure Telephone Identity Revisited (STIR) Certificates</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="August" year="2021"/>
            <abstract>
              <t>RFC 8226 specifies the use of certificates for Secure Telephone Identity Credentials; these certificates are often called "Secure Telephone Identity Revisited (STIR) Certificates". RFC 8226 provides a certificate extension to constrain the JSON Web Token (JWT) claims that can be included in the Personal Assertion Token (PASSporT), as defined in RFC 8225. If the PASSporT signer includes a JWT claim outside the constraint boundaries, then the PASSporT recipient will reject the entire PASSporT. This document updates RFC 8226; it provides all of the capabilities available in the original certificate extension as well as an additional way to constrain the allowable JWT claims. The enhanced extension can also provide a list of claims that are not allowed to be included in the PASSporT.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9118"/>
          <seriesInfo name="DOI" value="10.17487/RFC9118"/>
        </reference>
        <reference anchor="RFC9447">
          <front>
            <title>Automated Certificate Management Environment (ACME) Challenges Using an Authority Token</title>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="M. Barnes" initials="M." surname="Barnes"/>
            <author fullname="D. Hancock" initials="D." surname="Hancock"/>
            <author fullname="C. Wendt" initials="C." surname="Wendt"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>Some proposed extensions to the Automated Certificate Management Environment (ACME) rely on proving eligibility for certificates through consulting an external authority that issues a token according to a particular policy. This document specifies a generic Authority Token Challenge for ACME that supports subtype claims for different identifiers or namespaces that can be defined separately for specific applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9447"/>
          <seriesInfo name="DOI" value="10.17487/RFC9447"/>
        </reference>
        <reference anchor="RFC9448">
          <front>
            <title>TNAuthList Profile of Automated Certificate Management Environment (ACME) Authority Token</title>
            <author fullname="C. Wendt" initials="C." surname="Wendt"/>
            <author fullname="D. Hancock" initials="D." surname="Hancock"/>
            <author fullname="M. Barnes" initials="M." surname="Barnes"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>This document defines a profile of the Automated Certificate Management Environment (ACME) Authority Token for the automated and authorized creation of certificates for Voice over IP (VoIP) telephone providers to support Secure Telephone Identity (STI) using the TNAuthList defined by STI certificates.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9448"/>
          <seriesInfo name="DOI" value="10.17487/RFC9448"/>
        </reference>
        <reference anchor="RFC6962">
          <front>
            <title>Certificate Transparency</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Kasper" initials="E." surname="Kasper"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document describes an experimental protocol for publicly logging the existence of Transport Layer Security (TLS) certificates as they are issued or observed, in a manner that allows anyone to audit certificate authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
              <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6962"/>
          <seriesInfo name="DOI" value="10.17487/RFC6962"/>
        </reference>
        <reference anchor="I-D.ietf-acme-rats">
          <front>
            <title>Automated Certificate Management Environment (ACME) Remote Attestation Identifier and Challenge Type</title>
            <author fullname="Peter Chunchi Liu" initials="P. C." surname="Liu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Mike Ounsworth" initials="M." surname="Ounsworth">
              <organization>Cryptic Forest Software, Ltd</organization>
            </author>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software Works Inc</organization>
            </author>
            <author fullname="Ganesh Mallaya" initials="G." surname="Mallaya">
              <organization>AppViewX, Inc</organization>
            </author>
            <date day="10" month="September" year="2026"/>
            <abstract>
              <t>   This document describes an approach where an ACME Server can
   challenge an ACME Client to provide Evidence, Endorsements, or
   Attestation Result according to the Remote ATtestation procedureS
   (RATS) framework in any format supported by the Conceptual Message
   Wrapper (CMW).

   The ACME Server can optionally challenge the Client for specific
   claims that it wishes attestation for.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-acme-rats-02"/>
        </reference>
        <reference anchor="I-D.ietf-acme-pop" target="https://datatracker.ietf.org/doc/html/draft-ietf-acme-pop-00">
          <front>
            <title>Automated Certificate Management Environment (ACME) Extension for Proof-of-Possession</title>
            <author initials="F." surname="Geng" fullname="Feng Geng">
              <organization/>
            </author>
            <author initials="P." surname="Wu" fullname="Panyu Wu">
              <organization/>
            </author>
            <author initials="L." surname="Xia" fullname="Liang Xia">
              <organization/>
            </author>
            <author initials="X." surname="Chen" fullname="Xin Chen">
              <organization/>
            </author>
            <date year="2026" month="September" day="01"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-acme-pop-00"/>
        </reference>
        <reference anchor="I-D.ietf-acme-authority-token-jwtclaimcon">
          <front>
            <title>JWTClaimConstraints profile of ACME Authority Token</title>
            <author fullname="Chris Wendt" initials="C." surname="Wendt">
              <organization>Somos Inc.</organization>
            </author>
            <author fullname="David Hancock" initials="D." surname="Hancock">
              <organization>Somos Inc.</organization>
            </author>
            <date day="11" month="September" year="2026"/>
            <abstract>
              <t>   This document defines an authority token profile for the validation
   of JWTClaimConstraints and EnhancedJWTClaimConstraints certificate
   extensions within the Automated Certificate Management Environment
   (ACME) protocol.  This profile is based on the Authority Token
   framework and establishes the specific ACME identifier type,
   challenge mechanism, and token format necessary to authorize a client
   to request a certificate containing these constraints.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-acme-authority-token-jwtclaimcon-07"/>
        </reference>
        <reference anchor="RFC8693">
          <front>
            <title>OAuth 2.0 Token Exchange</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="A. Nadalin" initials="A." surname="Nadalin"/>
            <author fullname="B. Campbell" initials="B." role="editor" surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="January" year="2020"/>
            <abstract>
              <t>This specification defines a protocol for an HTTP- and JSON-based Security Token Service (STS) by defining how to request and obtain security tokens from OAuth 2.0 authorization servers, including security tokens employing impersonation and delegation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8693"/>
          <seriesInfo name="DOI" value="10.17487/RFC8693"/>
        </reference>
        <reference anchor="I-D.ietf-acme-openid-federation">
          <front>
            <title>Automatic Certificate Management Environment (ACME) with OpenID Federation 1.0</title>
            <author fullname="Giuseppe De Marco" initials="G." surname="De Marco">
              <organization>independent</organization>
            </author>
            <author fullname="Brandon Pitman" initials="B." surname="Pitman">
         </author>
            <author fullname="Tim Geoghegan" initials="T." surname="Geoghegan">
              <organization>ISRG</organization>
            </author>
            <author fullname="David Cook" initials="D." surname="Cook">
              <organization>ISRG</organization>
            </author>
            <author fullname="J.C. Jones" initials="J." surname="Jones">
              <organization>ISRG</organization>
            </author>
            <date day="16" month="December" year="2025"/>
            <abstract>
              <t>   The Automatic Certificate Management Environment (ACME) protocol
   allows server operators to obtain TLS certificates for their
   websites, based on a demonstration of control over the website's
   domain via a fully-automated challenge/response protocol.

   OpenID Federation 1.0 defines how to build a trust infrastructure
   using a trusted third-party model.  It uses a trust evaluation
   mechanism to attest to the possession of private keys, protocol
   specific metadata and miscellaneous administrative and technical
   information related to a specific entity.

   This document defines how X.509 certificates associated with a given
   OpenID Federation Entity can be issued by an X.509 Certification
   Authority through the ACME protocol to the organizations which are
   part of a federation built on top of OpenID Federation 1.0.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-acme-openid-federation-00"/>
        </reference>
        <reference anchor="I-D.ietf-wimse-workload-creds">
          <front>
            <title>WIMSE Workload Credentials</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>Defakto Security</organization>
            </author>
            <author fullname="Yaron Sheffer" initials="Y." surname="Sheffer">
              <organization>Intuit</organization>
            </author>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <date day="2" month="July" year="2026"/>
            <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 credentials that workloads use to represent
   their identity.  They can be used in various protocols to
   authenticate workloads to each other.  To use these credentials,
   workloads must provide proof of possession of the associated private
   key material, which is covered in other documents.  This document
   focuses on the credentials alone, independent of the proof-of-
   possession mechanism.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-workload-creds-02"/>
        </reference>
        <reference anchor="SPIFFE-ID" target="https://github.com/spiffe/spiffe/blob/main/standards/JWT-SVID.md">
          <front>
            <title>SPIFFE ID and JWT-SVID specification</title>
            <author>
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="GITHUB-OIDC" target="https://docs.github.com/en/actions/reference/openid-connect-reference">
          <front>
            <title>OpenID Connect reference (GitHub Actions)</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="AWS-GWIT" target="https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html">
          <front>
            <title>GetWebIdentityToken, AWS Security Token Service API Reference</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="AZURE-IMDS" target="https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token">
          <front>
            <title>Azure Instance Metadata Service token acquisition</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="K8S-PROJECTED" target="https://kubernetes.io/docs/concepts/security/service-accounts/">
          <front>
            <title>Managing Service Accounts: bound service account tokens</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1410?>

<section anchor="profiles">
      <name>Provider Profiles</name>
      <t>This appendix is informative. It records, for each surveyed platform, how a
Workload obtains a token with a chosen audience, what the token's issuer and
subject look like, and whether the audience can be chosen per request. Platform
details change;
implementers should verify against current documentation.</t>
      <section anchor="github">
        <name>GitHub Actions</name>
        <dl>
          <dt>Issuer:</dt>
          <dd>
            <t>"https://token.actions.githubusercontent.com"</t>
          </dd>
          <dt>Audience control:</dt>
          <dd>
            <t>Arbitrary string, chosen per request.</t>
          </dd>
          <dt>Acquisition:</dt>
          <dd>
            <t>As described in <xref target="GITHUB-OIDC"/>, the workflow job must be granted the
"id-token: write" permission. The runner exposes
"ACTIONS_ID_TOKEN_REQUEST_URL" and "ACTIONS_ID_TOKEN_REQUEST_TOKEN"
in the environment; a GET to the former with an "audience" query parameter and
the latter as a bearer token returns the JWT. The official toolkit exposes
this as "core.getIDToken(audience)".</t>
          </dd>
        </dl>
        <artwork><![CDATA[
curl -sS -H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
  "$ACTIONS_ID_TOKEN_REQUEST_URL&audience=$ABV" | jq -r .value
]]></artwork>
        <dl>
          <dt>Claims of interest:</dt>
          <dd>
            <t>"sub" (composite, and customizable by the organization -- see
<xref target="mutable-claims"/>), "repository", "repository_id", "repository_owner",
"repository_owner_id", "ref", "environment", "job_workflow_ref", "runner_environment".
Organization and enterprise administrators may additionally surface repository
custom properties as claims prefixed "repo_property_".</t>
          </dd>
          <dt>Policy note:</dt>
          <dd>
            <t>Match "repository_owner_id" and "repository_id", not "repository_owner" and
"repository". Constrain "ref" or "environment" for production identifiers.</t>
          </dd>
        </dl>
      </section>
      <section anchor="k8s">
        <name>Kubernetes and SPIFFE</name>
        <dl>
          <dt>Issuer:</dt>
          <dd>
            <t>Cluster specific, published in the cluster's OIDC discovery document. For EKS,
obtainable with "aws eks describe-cluster --query cluster.identity.oidc.issuer";
for AKS, from the cluster's OIDC issuer URL. For SPIFFE, the trust domain's
configured JWT issuer.</t>
          </dd>
          <dt>Audience control:</dt>
          <dd>
            <t>Arbitrary string, chosen per request.</t>
          </dd>
          <dt>Acquisition:</dt>
          <dd>
            <t>The TokenRequest API, which takes the audience as a parameter
(<xref target="K8S-PROJECTED"/>). A projected service account token volume is not usable
here: it fixes the audience at pod creation and so cannot carry a value that
varies per challenge. SPIFFE workloads use the Workload API's JWT-SVID
endpoint <xref target="SPIFFE-ID"/>, which likewise takes the audience as a parameter.</t>
          </dd>
          <dt>Claims of interest:</dt>
          <dd>
            <t>"sub" of the form "system:serviceaccount:NAMESPACE:NAME"; where bound tokens
are in use, a "kubernetes.io" claim object carrying namespace, service account
name and UID, and pod name and UID. For JWT-SVIDs, "sub" is the SPIFFE ID.</t>
          </dd>
          <dt>Policy note:</dt>
          <dd>
            <t>Match the namespace and service account name, and the service account UID
where available. Cluster identity comes from the issuer, which for EKS and AKS
is unique per cluster.</t>
          </dd>
        </dl>
      </section>
      <section anchor="aws">
        <name>Amazon Web Services</name>
        <dl>
          <dt>Issuer:</dt>
          <dd>
            <t>For EKS workloads, the cluster OIDC issuer (<xref target="k8s"/>). For other workloads,
the account-specific issuer returned when outbound identity federation is
enabled for the account.</t>
          </dd>
          <dt>Audience control:</dt>
          <dd>
            <t>Arbitrary strings, one to ten of them, up to 1000 characters each, chosen per
request.</t>
          </dd>
          <dt>Acquisition:</dt>
          <dd>
            <t>The STS "GetWebIdentityToken" action <xref target="AWS-GWIT"/>, which takes an Audience
list, a SigningAlgorithm ("RS256" or "ES384"), and an optional
DurationSeconds between 60 and 3600 with a default of 300. It is not
available on the STS global endpoint; a regional endpoint must be used.</t>
          </dd>
        </dl>
        <artwork><![CDATA[
aws sts get-web-identity-token \
  --audience "$ABV" \
  --signing-algorithm ES384 \
  --duration-seconds 300 \
  --query WebIdentityToken --output text
]]></artwork>
        <dl>
          <dt>Claims of interest:</dt>
          <dd>
            <t>"sub" carrying the calling IAM principal's ARN; optional custom claims
supplied as Tags at token request time. Note that Tags are chosen by the
caller and <bcp14>MUST NOT</bcp14> be treated by policy as authoritative.</t>
          </dd>
          <dt>Policy note:</dt>
          <dd>
            <t>Match the role ARN, and be aware that an ARN may be deleted and recreated with
a different trust policy (<xref target="mutable-claims"/>). The default 300-second lifetime
suits this mechanism well.</t>
          </dd>
        </dl>
      </section>
      <section anchor="azure">
        <name>Microsoft Azure</name>
        <t>Two paths exist and they differ in the property that matters most here.</t>
        <dl>
          <dt>AKS workload identity:</dt>
          <dd>
            <t>The token is issued by the cluster's OIDC issuer as a projected service
account token, and the audience is an arbitrary string chosen per request.
Treat as <xref target="k8s"/>.</t>
          </dd>
          <dt>Instance Metadata Service managed identity:</dt>
          <dd>
            <t>Not usable with this document. As described in <xref target="AZURE-IMDS"/>, a GET to
"http://169.254.169.254/metadata/identity/oauth2/token" with "api-version" and
a "resource" parameter, and the "Metadata: true" header, returns a token whose
"aud" is the "resource" value. That value must be the Application ID URI of an
application registered in the Entra tenant, typically of the form
"api://APPLICATION-CLIENT-ID", and cannot be varied per request. The audience
therefore cannot carry the ABV, and requirement 3 of <xref target="idp-req"/> is not met.
For reference, the issuer is of the form
"https://login.microsoftonline.com/TENANT-ID/v2.0", and "sub" for a managed
identity corresponds to the identity's object ID.</t>
          </dd>
          <dt>Policy note:</dt>
          <dd>
            <t>Use the AKS path. A virtual machine workload not running on AKS, with only
IMDS available, cannot use "wif-01": either obtain a token from another
provider available in that environment whose audience is per-request, or run
the issuing step somewhere that can. Registering a dedicated Application ID
URI does not help, because the resulting token remains a bearer credential
(<xref target="binding-req"/>).</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="example">
      <name>Worked Example</name>
      <t>A GitHub Actions workflow in repository "example-corp/gateway" obtains a
certificate for "gateway.internal.example.com" from a private CA. Example Corp,
the Subscriber, configured one policy entry with the CA in advance:</t>
      <artwork><![CDATA[
identifier dns:gateway.internal.example.com
  issuer   https://token.actions.githubusercontent.com
  require  repository_owner_id = 1234567
  require  repository_id       = 89012345
  require  ref                 = refs/heads/main
]]></artwork>
      <t>The CA's directory does not set "externalAccountRequired". The workflow holds no
credential for the CA of any kind.</t>
      <t>The client generates a fresh account key and POSTs newAccount with no
"externalAccountBinding" field. The account is created. It carries no
authority: the CA knows nothing about the client yet, and would authorize
nothing for it (<xref target="accounts"/>).</t>
      <t>The client POSTs newOrder for "gateway.internal.example.com". Creating the
authorization, the CA looks up the entry above, finds the GitHub issuer, and
offers:</t>
      <sourcecode type="json"><![CDATA[
{
  "type": "wif-01",
  "url": "https://ca.example.com/acme/chall/Rg5dV14Gh1Q",
  "status": "pending",
  "token": "LoqXcYV8q5ONbJQxbmR7SCTNo3tiAXDfowyjxAjEuX0",
  "issuers": ["https://token.actions.githubusercontent.com"]
}
]]></sourcecode>
      <t>The challenge names the issuer but not the expected claim values. The client
has no need of them, since it cannot choose them (<xref target="nondisclosure"/>).</t>
      <t>The client computes the key authorization per <xref section="8.1" sectionFormat="of" target="RFC8555"/>,
computes the ABV from it, requests a token with that audience, and POSTs it to
the challenge URL inside a JWS signed by the account key.</t>
      <t>The CA verifies the signature against GitHub's published keys, confirms "exp" is
within 300 seconds, recomputes the ABV from the challenge token and the
thumbprint of the account key that signed the request, and confirms it appears
in "aud". It then applies the entry's rule: the token's "repository_owner_id",
"repository_id", and "ref" all match.</t>
      <t>The challenge becomes valid and the CA sets the authorization's "expires" to the
token's "exp", so a later order will have to answer a fresh challenge
(<xref target="authz-reuse"/>). The order becomes ready and the client finalizes it. No
secret was configured in the repository, or anywhere else, at any point.</t>
    </section>
    <section anchor="compare">
      <name>Comparison with the ACME Authority Token</name>
      <t><xref target="RFC9447"/> solves an adjacent problem and it is worth being precise about the
difference, since the two are easily confused.</t>
      <table anchor="tbl-compare">
        <name>The ACME Authority Token and this document compared</name>
        <thead>
          <tr>
            <th align="left"> </th>
            <th align="left">Authority Token (RFC 9447)</th>
            <th align="left">This document</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Token issuer</td>
            <td align="left">A Token Authority in a business relationship with the CA</td>
            <td align="left">A general-purpose platform IdP with no CA relationship</td>
          </tr>
          <tr>
            <td align="left">Issuer awareness of ACME</td>
            <td align="left">Required; mints ACME-specific claims</td>
            <td align="left">None; issues its ordinary token</td>
          </tr>
          <tr>
            <td align="left">Account binding</td>
            <td align="left">"atc" claim carrying the account key fingerprint</td>
            <td align="left">The "aud" claim carrying a digest of the key authorization</td>
          </tr>
          <tr>
            <td align="left">Requires new claims from the issuer</td>
            <td align="left">Yes</td>
            <td align="left">No</td>
          </tr>
          <tr>
            <td align="left">Per-identifier-type profile needed</td>
            <td align="left">Yes, one per type</td>
            <td align="left">No</td>
          </tr>
          <tr>
            <td align="left">Defined profiles</td>
            <td align="left">TNAuthList <xref target="RFC9448"/>; JWTClaimConstraints (see <xref target="related"/>)</td>
            <td align="left">n/a</td>
          </tr>
        </tbody>
      </table>
      <t>The decisive difference is the third and fourth rows. <xref section="3.3" sectionFormat="of" target="RFC9447"/>
binds the token to the ACME account by placing a fingerprint of the account key
inside the token, and <xref section="5.4" sectionFormat="of" target="RFC9448"/> makes the ACME server verify it.
That requires the token issuer to accept the fingerprint as an input and emit it
as a claim. A Token Authority operated for this purpose can do so. GitHub,
Azure, AWS and Kubernetes cannot and will not.</t>
      <t>This document's contribution is the observation that the audience claim is a
sufficient channel for that binding, and is one every provider already offers.
Everything else follows from it.</t>
      <t>An operator who controls their own Token Authority, and whose identifiers have a
registered profile, should use <xref target="RFC9447"/>. An operator whose workloads are
authenticated by a platform they do not control should use this document.</t>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors of <xref target="I-D.ietf-acme-openid-federation"/> gave early advice to keep
this work within the extension points ACME already defines and to leave account
registration as <xref target="RFC8555"/> specifies it. That advice led directly to
<xref target="accounts"/>.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA72963obV5Yl+P88RQzU35jqAqC7LFGV2Q1TlE2ndUmRtpyV
k+0vAATIkIAIZESAFCy5nqWfZZ5s9tqXcwmAtFVV0/oqyyQYOHGu++zL2muP
RiPXld2yOMwGk+xFMS+avCvm2bu6+bCs83l2Mi8qemCbHV3ky2VRnRfZom6y
7qLIJpuuXvHTR0XTlYtyRr9kL/MqPy9W9K3suLosm7rinw8mRy+Pbw9cPp02
xSXeRr/f9JqBm9ezKl9Rz+ZNvuhGTd6uNm1bVKN8tipGV+VidPeuwzvP62Z7
mLXd3LWb6aps27Kuuu2avnlyfPbClevmMOuaTdvdv3v36d37Lm+K/DA7LWab
hl7prqgT5029WR9mvlNldZ59i8/ch2JLD8wPXTbiP+O/V9btUruNDxcyefRu
/PZ6XVQnz7OjuqqKWYdPZtEkUR83eTUr8PnRyZ2j567t8mr+S76sK+r2tmhd
u8qb7pd/buquaA+zqnbr8jD7e1fPhllbN11TLFr6abuSH2iuVvl6Td3+h3P5
pruoG/TYZfSvrKiB03H21iaQP5WpPZ3VXdf7S92c51X5Kw+FprCaFzQWDJT/
WqzyckmzjS/+z1/zssvHs3rlXFU3tBnKy4Lem719cfTk0aNH+uPXj+5FP34d
fnwSfnxqPz5+YJ8+fPzQfnzw9Mlj/Pj65PnR6PnJ6dHrn47f/u2QO2TbN53x
7HlJXbwsmm12b3yX5mBWN+sa60MrWzT0Q561RZfdH0gjeXNedIfZRdet28M7
d2pqrJyPq6K7066LWasfjGbS+mhurY/u/XJ3fNGtltzMnBb3MLt/9/6D0b37
o3uP+EO/HPxvJOvxapyd5h/K1abJ0z98P86+afL5stimn78cZ9/T5mjTT4/p
03zrXFkt+vP/+JHN9JP79x/rj0/v+Ul/+vDh1+FH+/Tx08f38ePJ6Pm4LLqF
HDaarnb303W9llHdyt7RSeqKKqs3XTbdZhe0mQ9ZSNCM5F2Tzz4UTdYUtAjz
7Jw62WY0Fp2Zr1rejNpSXS23NDYSBCWNtsgOZhfU7seyuj3Mri7K2QUduqrs
2myxzM/bLKcv19Vocnp0cjJO9sN/QDxlxx9pEBAfLOTeNHW9GNH/vanpcLBY
GVy/oi/G2bckuPRDO2AvCkiS8Lk+/Gacvdv0Hn2TV9tN+Fif/GGc/VzmvUd/
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
lJixDJ12sQE2dv8fJyd2xtYzAQA=

-->

</rfc>
