<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-schwenkschuster-oauth-spiffe-client-auth-00" category="std" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title>OAuth SPIFFE Client Authentication</title>
    <seriesInfo name="Internet-Draft" value="draft-schwenkschuster-oauth-spiffe-client-auth-00"/>
    <author fullname="Arndt Schwenkschuster">
      <organization>SPIRL</organization>
      <address>
        <email>arndts.ietf@gmail.com</email>
      </address>
    </author>
    <author fullname="Pieter Kasselmann">
      <organization>SPIRL</organization>
      <address>
        <email>pieter@spirl.com</email>
      </address>
    </author>
    <date year="2025" month="July" day="01"/>
    <area>AREA</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>workload</keyword>
    <keyword>identity</keyword>
    <keyword>credential</keyword>
    <keyword>exchange</keyword>
    <abstract>
      <?line 82?>

<t>This specification profiles the Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants <xref target="RFC7521"/> and JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants <xref target="RFC7523"/> to enable the use of SPIFFE Verifiable Identity Documents (SVIDs) as client credentials in OAuth 2.0. It defines how OAuth clients with SPIFFE credentials can authenticate to OAuth authorization servers using their JWT-SVIDs or X.509-SVIDs without the need for client secrets. This approach enhances security by enabling seamless integration between SPIFFE-enabled workloads and OAuth authorization servers while eliminating the need to distribute and manage shared secrets such as static client secrets.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-schwenkschuster-oauth-spiffe-client-auth/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Web Authorization Protocol Working Group mailing list (<eref target="mailto:oauth@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/oauth/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/oauth/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/arndt-s/oauth-spiffe-client-authentication"/>.</t>
    </note>
  </front>
  <middle>
    <?line 86?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Traditional OAuth client authentication typically relies on client secrets or private key JWT authentication, both require an out of band distribution of secret material to the OAuth client. In modern cloud-native architectures where identity is managed by SPIFFE (Secure Production Identity Framework for Everyone), there is a need to provision additional secret material for OAuth clients when attested identifiers and credentials such as SVIDs are already available.</t>
      <t>This specification profiles the Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants <xref target="RFC7521"/> to allow SPIFFE-enabled workloads to use their SPIFFE Verifiable Identity Documents (SVIDs) — either X.509 certificates or JWT tokens — as client credentials for OAuth 2.0 client authentication. JWT tokens make use of the profiled version of <xref target="RFC7523"/> - the JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants <xref target="RFC7523"/>.</t>
      <t>This profile focuses specifically on client authentication rather than authorization grants. This focus is deliberate for several reasons:</t>
      <ol spacing="normal" type="1"><li>
          <t>In modern service-oriented architectures, services often need to authenticate as themselves to OAuth authorization servers.</t>
        </li>
        <li>
          <t>Using SPIFFE as client authentication towards OAuth 2.0 authorization servers is a bridge between SPIFFE, which covers workload identity and OAuth, which covers human identity.</t>
        </li>
        <li>
          <t>Using SPIFFE as authorization grants for authorization requests where the workload itself is the resource owner is covered by other specifications, such as <xref target="Headless_JWT"/>.</t>
        </li>
      </ol>
      <t>The SPIFFE profile for client authentication enables seamless integration between SPIFFE-based and OAuth-based systems, allowing applications to leverage both ecosystems without requiring additional credential management. It also enables a more secure authentication method by leveraging cryptographically verifiable credentials rather than shared secrets.</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?>

<section anchor="terminology">
        <name>Terminology</name>
        <t>This specification uses the terms defined in OAuth 2.0 <xref target="RFC6749"/>, the Assertion Framework for OAuth 2.0 <xref target="RFC7521"/>, the JWT profile of it <xref target="RFC7523"/>, and the SPIFFE specifications. In particular, the following terms are particularly relevant:</t>
        <t><strong>Trust Domain</strong>: As defined in SPIFFE; A trust domain represents a single trust root. All SVIDs issued within a trust domain are verifiable via the trust domain's keys.</t>
        <t><strong>SPIFFE ID</strong>: A unified resource identifier that uniquely and specifically identifies a workload using the <tt>spiffe</tt> scheme. See <xref target="SPIFFE_ID"/> for details.</t>
        <t><strong>SVID</strong>: A SPIFFE Verifiable Identity Document. This document specifies the use of two types of SVIDs:</t>
        <ul spacing="normal">
          <li>
            <t><strong>X.509-SVID</strong>: An X.509 certificate that contains a SPIFFE ID in the URI SAN extension. See <xref target="SPIFFE_X509"/> for details.</t>
          </li>
          <li>
            <t><strong>JWT-SVID</strong>: A JSON Web Token (JWT) that contains a SPIFFE ID in the <tt>sub</tt> claim. See <xref target="SPIFFE_JWT"/> for details.</t>
          </li>
        </ul>
        <t><strong>SPIFFE Bundle</strong>: A collection of public keys and associated metadata that allow validation of SVIDs issued by a trust domain.</t>
        <t><strong>SPIFFE Bundle Endpoint</strong>: A URL that serves a SPIFFE bundle for a trust domain.</t>
      </section>
    </section>
    <section anchor="oauth-client-authentication-using-spiffe">
      <name>OAuth Client Authentication Using SPIFFE</name>
      <t>This section describes how SPIFFE identity documents can be used for OAuth 2.0 client authentication, following the patterns established in <xref target="RFC7521"/> and, in case of JWT-SVID <xref target="RFC7523"/>.</t>
      <t>OAuth 2.0 client authentication is used to authenticate the client to the authorization server when making requests to the token endpoint. When using SPIFFE for client authentication, the client presents its SVID (either JWT-SVID or X.509-SVID) to prove its identity.</t>
      <section anchor="client-authentication-with-jwt-svids">
        <name>Client Authentication with JWT-SVIDs</name>
        <t>JWT-SVID based authentication naturally follows the JWT Profile for OAuth 2.0 Client Authentication <xref target="RFC7523"/>, with specific adaptations for SPIFFE JWT-SVIDs. <xref target="RFC7521"/> remains valid.</t>
        <t>To identify the assertion content as a JWT-SVID this specification establishes the following client assertion type as an OAuth URI according to <xref target="RFC6755"/>:</t>
        <artwork><![CDATA[
urn:ietf:params:oauth:client-assertion-type:jwt-spiffe
]]></artwork>
        <t>Based on <xref target="RFC7523"/> the following request parameters <bcp14>MUST</bcp14> be present to perform client authentication in the context of this specification:</t>
        <ul spacing="normal">
          <li>
            <t>client_assertion_type: <bcp14>MUST</bcp14> be set to <tt>urn:ietf:params:oauth:client-assertion-type:jwt-spiffe</tt>.</t>
          </li>
          <li>
            <t>client_assertion: <bcp14>MUST</bcp14> be a single SPIFFE JWT-SVID.</t>
          </li>
        </ul>
        <t>To validate JWT-SVID client authentication requests the authorization server <bcp14>MUST</bcp14>:</t>
        <ol spacing="normal" type="1"><li>
            <t>Verify that the JWT is well-formed and contains all required claims (SPIFFE ID in <tt>sub</tt>, <tt>aud</tt>, and <tt>exp</tt>).</t>
          </li>
          <li>
            <t>Verify that the JWT has not expired (check the <tt>exp</tt> claim).</t>
          </li>
          <li>
            <t>Verify that the <tt>aud</tt> claim equals the endpoint of the request without fragment and query parameters.</t>
          </li>
          <li>
            <t>Verify the JWT signature using the signing keys of the trust domains according to <xref target="spiffe-bundle-validation"/>.</t>
          </li>
          <li>
            <t>Verify that the SPIFFE ID in the <tt>sub</tt> claim matches a registered client identifier or is associated with a registered client identifier.</t>
          </li>
        </ol>
        <section anchor="jwt-svid-example">
          <name>JWT-SVID example</name>
          <t>The following examples illustrates an authorization_code request to the token endpoint of an OAuth 2.0 authorization server leveraging a SPIFFE JWT-SVID to authenticate the client.</t>
          <artwork><![CDATA[
POST /token HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&
code=n0esc3NRze7LTCu7iYzS6a5acc3f0ogp4&
client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3A
client-assertion-type%3Ajwt-spiffe&
client_assertion=eyJhbGciOiJFUzI1NiIsImtpZCI6IjR2QzhhZ3ljSHU2cm5rRUVKWUFINlZ1Q2U0Sm9Ta1BWIiwidHlwIjoiSldUIn0.eyJhdWQiOlsiaHR0cHM6Ly9hcy5leGFtcGxlLmNvbS90b2tlbiJdLCJleHAiOjE3NDcxMjQ1NDMsImlhdCI6MTc0NzEyNDI0Mywic3ViIjoic3BpZmZlOi8vZXhhbXBsZS5vcmcvbXktb2F1dGgtY2xpZW50In0.Xlv5lW4cbxDsQk4l0paewG4nXOR7MxF_FMn_c27DX45Bxr2HUZf9a6Untfq5S47xpwbw495HBL6_1Lc6TMJxmw
]]></artwork>
          <t>For clarify, the SPIFFE-JWT header and body decoded:</t>
          <artwork><![CDATA[
{
  "alg": "ES256",
  "kid": "4vC8agycHu6rnkEEJYAH6VuCe4JoSkPV",
  "typ": "JWT"
}.
{
  "aud": [
    "https://as.example.com/token"
  ],
  "exp": 1747124543,
  "iat": 1747124243,
  "sub": "spiffe://example.org/my-oauth-client"
}
]]></artwork>
        </section>
      </section>
      <section anchor="client-authentication-using-x509-svid">
        <name>Client Authentication using X509-SVID</name>
        <t>X.509-SVID based authentication uses mutual TLS as defined in OAuth 2.0 Mutual-TLS Client Authentication <xref target="RFC8705"/>, with specific adaptations for SPIFFE X.509-SVIDs.</t>
        <t>To authenticate using an X.509-SVID, the client establishes a mutual TLS connection with the authorization server using its X.509-SVID as the client certificate. The authorization server validates the client certificate as an X.509-SVID and extracts the SPIFFE ID from the URI SAN. The server certificate <bcp14>MUST</bcp14> be validated by the client using its system trust store, and NOT the SPIFFE trust bundle.</t>
        <t>The request <bcp14>MUST</bcp14> include the <tt>client_id</tt> parameter containing the SPIFFE-ID of the client. It <bcp14>MUST</bcp14> match the URI SAN of the presented X509-SVID client credential.</t>
        <t>The server validates the client certificates according the following rules</t>
        <ol spacing="normal" type="1"><li>
            <t>Perform standard X.509 path validation against the trust anchors according to <xref target="spiffe-bundle-validation"/>.</t>
          </li>
          <li>
            <t>Verify that the certificate contains exactly one URI SAN with a valid SPIFFE ID.</t>
          </li>
          <li>
            <t>Verify that the certificate is a leaf certificate (Basic Constraints extension has CA=FALSE).</t>
          </li>
          <li>
            <t>Verify that the certificate has the <tt>digitalSignature</tt> key usage bit set.</t>
          </li>
          <li>
            <t>Verify that the SPIFFE ID in the URI SAN matches a registered client identifier or is associated with a registered client identifier.</t>
          </li>
        </ol>
        <section anchor="x509-svid-example">
          <name>X509-SVID Example</name>
          <t>The following request uses a refresh token to obtain a new access token. The client is <tt>spiffe://example.org/my-oauth-client</tt> and is authenticted by performing this request over a mutual TLS connection.</t>
          <artwork><![CDATA[
POST /token HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&
refresh_token=tGzv3JOkF0XG5Qx2TlKWIA&
client_id=spiffe://example.org/my-oauth-client
]]></artwork>
          <t>For clarity, the presented X509-SVID client certificate to the server decoded via <tt>openssl x509 -text</tt> is:</t>
          <artwork><![CDATA[
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            dd:48:ec:d4:a4:c6:b2:ea:8e:9b:54:35:e8:30:65:7b
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: C=US, O=SPIFFE, serialNumber=6968729192859147614695638370388029008
        Validity
            Not Before: May 16 11:26:11 2025 GMT
            Not After : May 16 12:26:21 2025 GMT
        Subject: C=US, O=SPIRE
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:c2:0b:b6:8e:47:9a:20:ab:33:f1:a9:a5:77:97:
                    fa:a0:95:7d:2c:9f:e9:94:3d:e9:ed:e6:35:52:7f:
                    ff:82:34:74:20:97:5a:1b:4e:87:5f:32:3e:9d:da:
                    60:6a:05:8b:86:9d:0b:59:5f:67:be:93:3b:26:de:
                    ea:1e:18:98:96
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment, Key Agreement
            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier:
                D8:7A:2F:8B:E3:CF:08:83:EA:DD:5E:0A:59:33:6E:4C:E0:CC:6B:AD
            X509v3 Authority Key Identifier:
                C2:41:49:B0:ED:E0:94:7B:FA:7D:C2:F1:02:24:20:B9:1E:3D:56:FA
            X509v3 Subject Alternative Name:
                URI:spiffe://example.org/my-oauth-client
    Signature Algorithm: ecdsa-with-SHA256
    Signature Value:
        30:44:02:20:48:c3:5f:68:b2:c5:5d:96:c4:96:32:37:1f:af:
        b8:1c:1c:45:ad:41:26:dd:e2:92:b5:73:62:83:34:c6:16:2a:
        02:20:0f:48:02:8e:6b:1d:09:01:80:d8:85:2b:ca:25:c6:2c:
        9e:f2:27:c2:3c:e4:03:58:a8:47:21:f6:3c:5e:7a:c8
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="spiffe-trust-establishment-and-client-registration">
      <name>SPIFFE Trust Establishment and Client Registration</name>
      <t>This specification requires previously established trust between the OAuth 2.0 Authorization Server and the SPIFFE Trust Domain. This needs to happen out of band and is not in scope of this specification. However, the mechanisms of key distribution is in scope and described in <xref target="spiffe-bundle-validation"/>.</t>
      <t>Similar to the trust establishment, corresponding OAuth clients need to be established prior of using SPIFFE as client authentication. This is also out of scope, implementors may for example choose to levarage OAuth 2.0 dynamic client registration according to <xref target="RFC7591"/> or configure them out of band.</t>
    </section>
    <section anchor="spiffe-bundle-validation">
      <name>SPIFFE Key Distribution and Validation</name>
      <t>This section describes how an authorization server verifies the signature of an X509 or JWT-SVID. It recommends two SPIFFE-native approaches.</t>
      <t>Trust bundles in general <bcp14>MUST</bcp14> be keyed by the trust domain identifier to prevent mix up between trust domain and their corresponding bundles. The 2 approaches can be used in conjunction, for instance:</t>
      <artwork><![CDATA[
Trust domain "example.org": Workload API at unix:///var/secrets/spiffe/agent.sock
Trust domain "production": SPIFFE Bundle Endpoint at https://example.com/auth/spiffe/bundle.json
]]></artwork>
      <section anchor="spiffe-bundle-endpoint">
        <name>SPIFFE Bundle Endpoint</name>
        <t>The SPIFFE Bundle Endpoint exposes the signing keys for X509-SVIDs and JWT-SVIDs over HTTP via a JSON Web Key Set according to <xref target="RFC7517"/>.</t>
        <t>Server authentication on this endpoint is available in two flavors. For the sake of interoperability, in the context of this specification the WebPKI flavor <bcp14>MUST</bcp14> be used. This effectively means that the server certificate of the bundle endpoint is trusted by the authorization server accessing it. See Sec 5.2.1 of <xref target="SPIFFE_FEDERATION"/> for details.</t>
        <t>The authorization server <bcp14>SHOULD</bcp14> periodically poll the bundle endpoint to retrieve updated trust bundles, following the refresh hint and period provided in the bundle. See <xref target="SPIFFE_FEDERATION"/> for details.</t>
        <t>The SPIFFE bundle endpoint cannot be derived from the JWT-SVID and X509-SVID and <bcp14>MUST</bcp14> be configured manually out of band. Bundle endpoints <bcp14>MUST</bcp14> be keyed by the trust domain identifier.</t>
        <section anchor="example">
          <name>Example</name>
          <t>The following examples showcase how the Authorization Server can perform key discovery for the trust domain <tt>example.org</tt>. Important to note is the difference between <tt>example.org</tt> trust domain and <tt>example.com</tt> location for the SPIFFE Bundle Endpoint. This highlights the importance of explicit configuration and undermines the fact that the SPIFFE Bundle Endpoint cannot be derived or discovered  from the X509-SVID without explicit configuration.</t>
          <t>Example configuration at the OAuth Authorization Server in the JSON format</t>
          <artwork><![CDATA[
{
  "example.org": {
    "spiffe_bundle_endpoint": {
      "url": "https://example.com/bundle.json"
    }
  }
}
]]></artwork>
          <ul empty="true">
            <li>
              <t>Note difference between example.org and example.com</t>
            </li>
          </ul>
          <t>Example SPIFFE Bundle Endpoint request, response:</t>
          <artwork><![CDATA[
GET /bundle.json HTTP/1.1
Host: example.com

{
  "keys": [
    {
      "use": "x509-svid",
      "kty": "EC",
      "crv": "P-384",
      "x": "9XBzty8W_ex4Xr0RdzUBgie_okdaUTheSF0PQvVAaTsXaP1J7yv0Dhlaw45I7Cv9",
      "y": "HP21HOmMxIlZ0XeqsOl9sM5H57HBQWu0bINXfw4jdeHdB5vk1XyNyBQQxeUpSxhn",
      "x5c": [
        "MIIB2DCCAV6gAwIBAgIURJ20yIzal3ZT9NXkdwrsm0selwwwCgYIKoZIzj0EAwQwHjELMAkGA1UEBhMCVVMxDzANBgNVBAoMBlNQSUZGRTAeFw0yMzA1MTUwMjA1MDZaFw0yODA1MTMwMjA1MDZaMB4xCzAJBgNVBAYTAlVTMQ8wDQYDVQQKDAZTUElGRkUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAT1cHO3Lxb97HhevRF3NQGCJ7+iR1pROF5IXQ9C9UBpOxdo/UnvK/QOGVrDjkjsK/0c/bUc6YzEiVnRd6qw6X2wzkfnscFBa7Rsg1d/DiN14d0Hm+TVfI3IFBDF5SlLGGejXTBbMB0GA1UdDgQWBBSSiuNgxqqnz2r/jRcWsARqphwQ/zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAZBgNVHREEEjAQhg5zcGlmZmU6Ly9sb2NhbDAKBggqhkjOPQQDBANoADBlAjEA54Q8hfhEd4qVycwbLNzOm/HQrp1n1+a2xc88iU036FMPancR1PLqgsODPfWyttdRAjAKIodUi4eYiMa9+I2rVbj8gOxJAFn0hLLEF3QDmXtGPpARs9qC+KbiklTu5Fpik2Q="
      ]
    },
    {
      "use": "jwt-svid",
      "kty": "EC",
      "kid": "6d02Vc2oU62mXVH5nlggHGLmfIhrlnNW",
      "crv": "P-256",
      "x": "S2V42XlFjNp30CFmOidbWQT9IpZHqJ8JuuJgDBvkdZA",
      "y": "vN0y5TK36VRxZo_E3Gc7S5c0jIRIaHZ53f2UiJ1NFto"
    }
  ],
  "spiffe_sequence": 10,
  "spiffe_refresh_hint": 300
}
]]></artwork>
          <ul empty="true">
            <li>
              <t>The <tt>use</tt> parameter in the JSON Web Key indicates the credential format the key is indended for. Multiple keys of the same use can be present.</t>
            </li>
          </ul>
          <t>The X509-SVID signing certificate (<tt>.keys[0].x5c[0]</tt> from response above) in text form:</t>
          <artwork><![CDATA[
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            5c:4b:d5:2d:f9:c1:6e:78:2c:32:a6:bb:6c:73:f0:b8:f4:be:13:09
        Signature Algorithm: ecdsa-with-SHA512
        Issuer: C=US, O=SPIFFE
        Validity
            Not Before: May 16 11:23:19 2025 GMT
            Not After : May 15 11:23:19 2030 GMT
        Subject: C=US, O=SPIFFE
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (384 bit)
                pub:
                    04:ef:3f:db:67:2b:e8:5c:a1:64:23:e7:f2:fd:f0:
                    3b:16:55:68:17:55:17:d4:bd:cd:6d:04:fd:cc:8f:
                    99:31:f7:8c:ac:b0:1e:31:60:18:45:32:8b:a1:17:
                    4b:2f:01:75:27:6c:3f:c3:a5:b9:da:56:fb:29:54:
                    63:cb:08:96:81:35:0e:96:04:03:40:fe:51:0d:26:
                    da:d5:99:6c:8f:c2:45:43:cb:2c:b4:8d:9b:68:78:
                    9f:c0:2d:68:36:b8:5e
                ASN1 OID: secp384r1
                NIST CURVE: P-384
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                8D:79:D2:26:5E:4C:83:30:40:C7:E9:1D:E1:35:12:F6:60:CF:0B:DB
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Subject Alternative Name:
                URI:spiffe://example.org
    Signature Algorithm: ecdsa-with-SHA512
    Signature Value:
        30:64:02:30:0a:e9:fd:d4:cd:99:52:90:cb:14:86:93:4e:f8:
        02:52:d6:17:12:9f:2e:65:99:0e:38:b6:b9:a6:fe:43:0f:60:
        30:04:87:ec:24:20:80:a4:75:ee:3c:ad:9d:a2:72:0d:02:30:
        55:93:0e:14:8c:47:47:3b:74:7c:a7:2a:2a:96:1d:a4:85:46:
        4f:3f:95:a4:c2:ab:3c:2e:04:b3:1b:cf:02:0f:33:fc:dd:dc:
        d5:2f:44:c8:2a:dc:ce:3f:c5:c6:89:d0
]]></artwork>
          <ul empty="true">
            <li>
              <t>Arndt: Bundle doesn't match X509-SVID. This needs to be fixed.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="alternative-methods-to-avoid">
        <name>Alternative methods to avoid</name>
        <t>The following key distribution mechanisms are alternatives and <bcp14>SHOULD</bcp14> be avoided for interopability reasons.</t>
        <section anchor="spiffe-workload-api">
          <name>SPIFFE Workload API</name>
          <t>The SPIFFE Workload API allows workloads to retrieve a trust bundle. It requires the authorization server to be part of a SPIFFE trust domain and be considered a workload within it. The SPIFFE Workload API is build in a way that the workload proactively retrieves trust bundles updates and does not need to poll them, which reduces the time to distribute them. In addition to the trust bundle of the trust domain the workload resides in, the SPIFFE Workload API also allows to retrieve trust bundles from federated trust domains.</t>
          <t>This approach is <bcp14>NOT RECOMMENDED</bcp14> for OAuth SPIFFE Client Authentication for several reasons:</t>
          <ul spacing="normal">
            <li>
              <t>OAuth Authorization Server needs to be a workload within a SPIFFE trust domain, which is a significant limitation for deployment scenarios.</t>
            </li>
            <li>
              <t>Federated trust domain bundles create ambiguity about how they are handled. When distributed via the SPIFFE Workload API the trust relationship and points where they are established become ambiguous.</t>
            </li>
          </ul>
        </section>
        <section anchor="manual-configuration">
          <name>Manual configuration</name>
          <t>In small, static environments the authorization server <bcp14>MAY</bcp14> be configured with the SPIFFE bundles manually. This approach requires human interaction to set up, rotate and manage keying material and is thus generally <bcp14>NOT RECOMMENDED</bcp14>.</t>
        </section>
        <section anchor="using-the-system-trust-store">
          <name>Using the system trust store</name>
          <t>X509-SVIDs <bcp14>MUST NOT</bcp14> be validated using the system trust store. The SPIFFE ID carried in the URI SAN is rarely a verifiable attribute in the broader X.509 ecosystem. Using the system trust store as trust anchor would allow ANY certificate authority in it to issue a trusted X509-SVID for ANY SPIFFE ID. In comparison: using SPIFFE-native validation methods restricts the signing of SPIFFE-IDs to the corresponding trust domain signing keys.</t>
        </section>
        <section anchor="using-the-jwt-svid-iss-claim">
          <name>Using the JWT-SVID <tt>iss</tt> claim</name>
          <t>JWT-SVIDs carrying <tt>iss</tt> claims could technically be validated by retrieving the signing keys via OpenID Connect Discovery or OAuth 2.0 Authorization Server Metadata.
This approach only applies for JWT-SVIDs and only works when the <tt>iss</tt> claim is present, which is not guaranteed and not part of the JWT-SVID specification.</t>
          <t>The narrow scope of applicability does not make it a viable alternative to the SPIFFE Bundle Endpoint. In combination with interoperability concerns, this approach is <bcp14>NOT RECOMMENDED</bcp14>.</t>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC6749">
        <front>
          <title>The OAuth 2.0 Authorization Framework</title>
          <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
          <date month="October" year="2012"/>
          <abstract>
            <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6749"/>
        <seriesInfo name="DOI" value="10.17487/RFC6749"/>
      </reference>
      <reference anchor="RFC6755">
        <front>
          <title>An IETF URN Sub-Namespace for OAuth</title>
          <author fullname="B. Campbell" initials="B." surname="Campbell"/>
          <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
          <date month="October" year="2012"/>
          <abstract>
            <t>This document establishes an IETF URN Sub-namespace for use with OAuth-related specifications. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6755"/>
        <seriesInfo name="DOI" value="10.17487/RFC6755"/>
      </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="RFC7521">
        <front>
          <title>Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants</title>
          <author fullname="B. Campbell" initials="B." surname="Campbell"/>
          <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="Y. Goland" initials="Y." surname="Goland"/>
          <date month="May" year="2015"/>
          <abstract>
            <t>This specification provides a framework for the use of assertions with OAuth 2.0 in the form of a new client authentication mechanism and a new authorization grant type. Mechanisms are specified for transporting assertions during interactions with a token endpoint; general processing rules are also specified.</t>
            <t>The intent of this specification is to provide a common framework for OAuth 2.0 to interwork with other identity systems using assertions and to provide alternative client authentication mechanisms.</t>
            <t>Note that this specification only defines abstract message flows and processing rules. In order to be implementable, companion specifications are necessary to provide the corresponding concrete instantiations.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7521"/>
        <seriesInfo name="DOI" value="10.17487/RFC7521"/>
      </reference>
      <reference anchor="RFC7523">
        <front>
          <title>JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="B. Campbell" initials="B." surname="Campbell"/>
          <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
          <date month="May" year="2015"/>
          <abstract>
            <t>This specification defines the use of a JSON Web Token (JWT) Bearer Token as a means for requesting an OAuth 2.0 access token as well as for client authentication.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7523"/>
        <seriesInfo name="DOI" value="10.17487/RFC7523"/>
      </reference>
      <reference anchor="RFC7591">
        <front>
          <title>OAuth 2.0 Dynamic Client Registration Protocol</title>
          <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="J. Bradley" initials="J." surname="Bradley"/>
          <author fullname="M. Machulak" initials="M." surname="Machulak"/>
          <author fullname="P. Hunt" initials="P." surname="Hunt"/>
          <date month="July" year="2015"/>
          <abstract>
            <t>This specification defines mechanisms for dynamically registering OAuth 2.0 clients with authorization servers. Registration requests send a set of desired client metadata values to the authorization server. The resulting registration responses return a client identifier to use at the authorization server and the client metadata values registered for the client. The client can then use this registration information to communicate with the authorization server using the OAuth 2.0 protocol. This specification also defines a set of common client metadata fields and values for clients to use during registration.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7591"/>
        <seriesInfo name="DOI" value="10.17487/RFC7591"/>
      </reference>
      <reference anchor="RFC8705">
        <front>
          <title>OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens</title>
          <author fullname="B. Campbell" initials="B." surname="Campbell"/>
          <author fullname="J. Bradley" initials="J." surname="Bradley"/>
          <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
          <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
          <date month="February" year="2020"/>
          <abstract>
            <t>This document describes OAuth client authentication and certificate-bound access and refresh tokens using mutual Transport Layer Security (TLS) authentication with X.509 certificates. OAuth clients are provided a mechanism for authentication to the authorization server using mutual TLS, based on either self-signed certificates or public key infrastructure (PKI). OAuth authorization servers are provided a mechanism for binding access tokens to a client's mutual-TLS certificate, and OAuth protected resources are provided a method for ensuring that such an access token presented to it was issued to the client presenting the token.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8705"/>
        <seriesInfo name="DOI" value="10.17487/RFC8705"/>
      </reference>
      <reference anchor="SPIFFE_ID" target="https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md">
        <front>
          <title>SPIFFE-ID</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="SPIFFE_X509" target="https://github.com/spiffe/spiffe/blob/main/standards/X509-SVID.md">
        <front>
          <title>X509-SVID</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="SPIFFE_JWT" target="https://github.com/spiffe/spiffe/blob/main/standards/JWT-SVID.md">
        <front>
          <title>JWT-SVID</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="SPIFFE_BUNDLE" target="https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE_Trust_Domain_and_Bundle.md#4-spiffe-bundle-format">
        <front>
          <title>SPIFFE Bundle</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="SPIFFE_FEDERATION" target="https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE_Federation.md">
        <front>
          <title>SPIFFE Federation</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="Headless_JWT" target="foo">
        <front>
          <title>Headless-JWT</title>
          <author>
            <organization/>
          </author>
          <date>n.d.</date>
        </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>
    <?line 447?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
rFI7a17frlSjN7ibbsqPFjuzmpX1k3a3HWyb19fPbLIcPc/dFHQVM941b+j3
es1iu9XSb6ozfdNr6rPeZHheVLe9F+qU7seNwd2TtfGDhRowZ7PZtGZfe1+8
+97Lo9rRN9ebs8fORV9/OtW1Sac577dubvrP7Rd90JwNbpq61286g+vR5P50
ONZZd6Nu+y+61h9PNv1H+Nm+p9h22ca2ftzWb5afWy/6uZjj61h3bsb96/qm
ff21fXN9/aWt348nHed0+DTZWI/6dXNmfp8/PV5eXfeazdnEn11f673ZwNb1
sWaeXZYuno1G7WzO1sNuaXB92jqv/WoPteXwslvp3V03Wo1Jc3n5bHknE3f9
5eT68vTGbz8+PQZfTlTzxJiY1a8vHfvGHVrV75vqXXHz8jR1A7PbpLVhMNOs
k7Y90MqWerb4dXwz7ZV63Wa7Wxk5F6en7PFu3DT6TRXxY7Vn17fN5mhkrwaz
5+/f3Zeif/I4NG8Dffh9Od9cn7zoV7jns2G/qU/rneZYb+vXZyd9vSzGbzrN
k811B+nUfNTvRd9OpwM4mM8qL+aps7hfTDD9HhjFwdxo61+as5nEzXW7qQ88
vd109MeOXilf1+fTeccqf7/ZmhvjYvByuTg5u/aXmqv9SovPZr1uT9RStdu/
AuU51K4uvs+Cy/bV9HYbhtZQf9S/9DxrYpfZV7tPG7/2iv6N8VifXT6f611X
nV9cdLql6/biLjy9WurDoPG99esXw35yxqtKd2k/Fa8/H0k2/LtQH8cHZZEX
NvxMFGXevGqpxRuz6E2qxcXdzVnFdWazs9OLxbQ39x13cHtAdqPUeyK7o+JN
uXjndB8Hy5La6i4ubcu4vR43esv7s+/n9fPV6nzWbq6frHt9R0zXA3VbGX8p
VW+Gz/fet07p1KyNKqb62Bv26Nl9pTQtTuxzbdANvURjiiS81MQB6jdQlph7
V9MvotzEXOjnkqomihZN/gNgK53fTNuCyF22XUvmF7nDmtxQkR+iCOWtD35O
t0RIEF4VlP7KCW3UyumypwA/0YJ11vLUI1Ma0pNKzF3k62cSeQ8FnOpv6t8L
oJDgx4MwlJFWV6gBBvQT3wU61Qjgvy61UTFJ2SBWhRQtMm0QUyNVRmp1jA+V
ioRWiWGQqonxp6lKjDqZljGIrJWI2vg9aY6KVvxJmuOfSlmUiNZ4Z8qikh5Q
Un+askiD9D+UswBT+vtzFmxKSlNiGRjeLxqYhgKSUiBjGXfLahjam1pIvYMz
lAwMJlYqGKzUavgA/1tAZIuYFqlaBJaA4aZJ6q/kLBoNUtLItEbqsK5JDBXT
B9BSVTGJUK4gH9UNBEl7JW8CDFicYqSyVsEoJLAb7MgsYbbFaGCmo1IlU+jT
wFTb4axHiZgGRrUbVVLXMMmiMnxWeSizrJIpIxWNqBbGVQ/OAKuAEMBeqnyn
ZhEhL/NpQRSMMqlbmOsDLIFwHMYDjFJRjKBPqYqyUmFvZE8CZi6B4P7PkifQ
53cmT96bFqi3Sa1B2jyRV+GBf4wvq4iuVo10GkRrkw5HplYk3SoSFFMHTdJu
/gFZjfFwcjCp8Z7UT0oPcuVzrLSGF/zpX5M2eG+aINJyb6UJqjxNAA8qxawg
yBZIG4gasF6lSBoqcpxW5rm7Eub9pvVMnB/6WFWUJKAJcFyRYcoZxgK/l+qY
ugSJAa0NOwDmVadItPTqIBD1GmayRc6lrmI+G8SOMYzwUwsThrRIakWUFQFn
PBx0A4AECyF4JqYG4C/ojxrMAGNrmJKAvyB2moXT1kGAUtJW5oqqUeEZ9CJP
q5oIP4BklDDJaU5xRYAZ060mpj+sVJICTdQUkyxmHVeBVybjeoKnM+qgJ9TI
J+AfDSLR+cnyWIAf+hJVTMkXZ3ZSAQZ+r+qZWeKWRZpXxFVU3omuPdvajTPs
xfpTqQDx4YB4LhHhkzEirH/H+eQVGxldk7G16PK3DHHII2E6MpqJ2mRDpuJO
R+Y7AHGciWYLyEQMWmZgXo2YCfzgLUAey86WoqVCFyLiE8CeMACQuhsnL/DZ
oYgcH4IaiGGsbIfHsGAkTdUbxdPwaLOMEkY7CrIhMxlIE5hG2vNUTvzdCBmK
W0SXxwHOlRnd1LQXbOdrINiV35KMrjdnkzAyWHagGD4LNyAXcIKuZbpUdpdq
gReRLk2w7O64qzgVH+eJo4Wy/j76aEH8oRV43rn3mrrY89b31F75DEH+rQhM
WpL2KX+QZyIi2OIe6MzlSh2gwc+0hAkkFls63lZcdTSZS33bg83mo+8e7eAh
xhV4+bysc2HYsxX/dICBsScZBRTfBARBhb6WvNyVUN6Kr5MeolVCbZ85omR2
bi9FRFaEMeMvB4hl0nk3A1M+EVjeKhLxPo+PZgNfuRywXrAArjiOPjvD3LXt
e664pvf6hRf96074NS6yzcR5gzgsu/uRnlgpyO8qoHaiZiQCeCsIvy3peyHN
fjQHtCEqxfgjLDKfGs5XQZSxAuHdYUuJgkly12SvFjaXS+VJohvm2cLa1RvD
M3oHC86o79tJwDwqYMRKPaAXXvpNXy2mYaQQogA7IMmKP44Sfxih8OYWeNVy
qhAVhGQF+k5cKtUHX7PFyHGVBdeb/JOYeHCKFHimfA6FBCdIikxRZwGbgcq2
AzwSpnO8UXoxVSsb2TggOOw0KneOjq/xF6zyiPzoI5WZxGBGANMprj3SxlmD
B9iPvN6TXFgMOGU4C6Xe42c1EFUhWFZXZlV2a6qlwjx4Wwll+XLJXFi1Jcot
MS0sw/uZq44HVVtfXgIu7OhX/s0EXnbJRCov2UXySQXQG/LDQ7zmNtmUwr8v
wwMHKUWI1mq2olioyeRlNGyKbG8Gg9l6BOEQgHb0gZ3iwgVZFSq9itgg8k/t
AFtRxA1n8ZTHIyn8WqZBsJbBP6QVle/v5gZR9Zh4BfhYpATfsEkiYR99Cqwl
/QcafY7jsn0Zv+Uf1tIH+n6vzH14ccNO9BQ6C9mQf6DLoOYTzqKbT663Ac3P
78UFud+I+MQnsz4f8W96Hv2Qa9O4Jyvk/h9cJ5/FGVgAAA==

-->

</rfc>
