<?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-01" category="std" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <front>
    <title>OAuth SPIFFE Client Authentication</title>
    <seriesInfo name="Internet-Draft" value="draft-schwenkschuster-oauth-spiffe-client-auth-01"/>
    <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>
    <author fullname="Scott Rose">
      <organization>NIST</organization>
      <address>
        <email>scott.rose@nist.gov</email>
      </address>
    </author>
    <date year="2025" month="October" day="03"/>
    <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 on using SPIFFE credentials for OAuth client authentication.</t>
      <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 contains only the issuer identifier of the authorization server as its sole value. See <xref target="I-D.draft-ietf-oauth-rfc7523bis"/> for details.</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 authenticated 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 leverage 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="implementation-status">
      <name>Implementation Status</name>
      <t><cref>Note to RFC Editor: please remove this section, as well as the reference to RFC 7942, before publication.</cref>
This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="RFC7942"/>. The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs.  Please note that the listing of any individual implementation here does not imply endorsement by the IETF.  Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors. This is not intended as, and must not be construed to be, a catalog of available implementations or their features.  Readers are advised to note that other implementations may exist.</t>
      <t>According to RFC 7942, "this will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.  It is up to the individual working groups to use this information as they see fit".</t>
      <t>Keycloak</t>
      <ul spacing="normal">
        <li>
          <t>Organization: Red Hat / CNCF</t>
        </li>
        <li>
          <t>Maturity: preview</t>
        </li>
        <li>
          <t>Coverage: JWT-SVID client authentication using SPIFFE Trust Bundle Endpoint</t>
        </li>
        <li>
          <t>Contact: <eref target="https://www.keycloak.org/community">Keycloak community &amp; maintainers</eref></t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Client authentication using JWT-SVIDs has the same security considerations as described in <xref target="RFC6749"/> and <xref target="RFC7521"/>.</t>
      <t>Client authentication using X509-SVIDs has the same security considerations as described in <xref target="RFC8705"/>. The validation rules in section 3.2 protect against an OAuth2 token being issued (or being issued incorrectly) to a client that did not present an appropriate X509-SVID.</t>
      <t>The issues described in Section 5.2 above include the threat that an authorization server may have the incorrect
trust stores configured to validate the client SVID. This could result in an incorrectly issued token to an attacker if the attacker is able to obtain a certificate that can be validated by one of the misconfigured trust anchors in the trust store.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests a new entry to be added to the Oauth URI registry found at <eref target="https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml#uri">https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml#uri</eref>. The registration process is defined in <xref target="RFC6755"/>. This document requests the following entry to be added to the registry:</t>
      <ul spacing="normal">
        <li>
          <t>URN: urn:ietf:params:oauth:client-assertion-type:jwt-spiffe</t>
        </li>
        <li>
          <t>Common Name: SPIFFE JWT-SVID Profile for OAuth 2.0 Client Authentication</t>
        </li>
        <li>
          <t>Change Controller: IETF</t>
        </li>
        <li>
          <t>Reference: This Document</t>
        </li>
      </ul>
    </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="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="I-D.draft-ietf-oauth-rfc7523bis">
        <front>
          <title>Updates to Audience Values for OAuth 2.0 Authorization Servers</title>
          <author fullname="Michael B. Jones" initials="M. B." surname="Jones">
            <organization>Self-Issued Consulting</organization>
          </author>
          <author fullname="Brian Campbell" initials="B." surname="Campbell">
            <organization>Ping Identity</organization>
          </author>
          <author fullname="Chuck Mortimore" initials="C." surname="Mortimore">
            <organization>Disney</organization>
          </author>
          <author fullname="Filip Skokan" initials="F." surname="Skokan">
            <organization>Okta</organization>
          </author>
          <date day="22" month="July" year="2025"/>
          <abstract>
            <t>   This specification updates the requirements for audience values for
   tokens whose audience is an OAuth 2.0 authorization server to address
   a security vulnerability identified in the previous requirements for
   those audience values in multiple OAuth 2.0 specifications.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-rfc7523bis-02"/>
      </reference>
      <reference anchor="RFC7942">
        <front>
          <title>Improving Awareness of Running Code: The Implementation Status Section</title>
          <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
          <author fullname="A. Farrel" initials="A." surname="Farrel"/>
          <date month="July" year="2016"/>
          <abstract>
            <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
            <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="205"/>
        <seriesInfo name="RFC" value="7942"/>
        <seriesInfo name="DOI" value="10.17487/RFC7942"/>
      </reference>
    </references>
    <?line 464?>

<section anchor="document-history">
      <name>Document History</name>
      <t><cref>RFC Editor: please remove before publication.</cref></t>
      <section anchor="draft-schwenkschuster-oauth-spiffe-client-auth-01">
        <name>draft-schwenkschuster-oauth-spiffe-client-auth-01</name>
        <ul spacing="normal">
          <li>
            <t>Rephrase introduction to make the focus on client authentication more clear.</t>
          </li>
          <li>
            <t>Add implementation section.</t>
          </li>
          <li>
            <t>Add audience restrictions from RFC7523bis adopted WG document.</t>
          </li>
          <li>
            <t>Add security and IANA considerations section.</t>
          </li>
          <li>
            <t>Add Scott Rose as co-author.</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-schwenkschuster-oauth-spiffe-client-auth-00">
        <name>draft-schwenkschuster-oauth-spiffe-client-auth-00</name>
        <ul spacing="normal">
          <li>
            <t>Initial document</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
dlYgNwzae+U7x3PObJo/RDsYQV9Ey1Mgu7N7yWlLH+/Bc7m4Y+X5ZVvD9iz0
CMnksvl/yk/O2BkiIAJJcAb5MlBuJHal2BUTWMhIgodRUGhJeoVusBsh7EYu
XGwVo8QRRz2J5xi8tL6J3PlbRi1arrhPxEjqMLLMiG3cMMD9I3F2IzNdq337
BhD6r3/9Kxd6DsOIMgPDyBc+o8A2iyLaUdd5irU/rAMVhKNPcx1akSz/tmhU
gqhR7xhl9jXyqXQRyRJJiPAo7/SKXkisJI49BXLHtM0mtODq8y8x1V9khiAa
ENNqMNj9n5vyfWHHCEnnsfXfEhApBApnRbLSu6ea6O1rWo7jwWRLBWlWNxJx
I6EHtqyFbVNwVG2TEvMDroiKlJjS5OAmOG2RyBrta/c8NO+lv3Uvnpb3Hwq5
8u7h5iBsmNuEVtTre3ASjEdp2fBLOQx8X3n5PY0iGyQ0kuuOb8kIeWlHRm2U
dzKFS0DyXfSduB3Gfsp/DPK9gsyX4YqrJJk3NVBYdcvfNrHVFJ1yir41I4wR
KacIn+FvsrKKrrRZ87eVLhu5TowumoXaS9a85SbIfCNZV0/MLMwd0XKSNKXZ
5VEYKTH/BGtvf0Sw/C6RUZWQlRvJRKfVY+C5bYcY4sZAiQq4xkvzxXBNEav/
TjOErOPpTcTOtU1tmvm2cr1hKgsS3i7OQT0P5LjHV1cXB6VCKXfs+gED3hSi
jDPmvLoSkPNXhBmp8MHBU369XpNK5UPPFg7OzMzlZhhKIYj5+HLmf8vhfz86
RfBSKsPRs2icXnXDhvX5eVznNRCPyrTozpZVaLcLtD4CRv2PShtlFv6QOAU/
SHzhz9xOsIIXCVy97Pij2JzM9SPDOrdODifPg9LQGviDRbC86w7qg4dR+fJ5
Pr+r2A/j40nZWNS80eT6083kcDC070qX5UlxvGhd8VLnZmCtLfPYXg8eXGts
m5OBUyxg3+bNpXVu+xY/HhWN47P66aY1NzY1WxwdBsbRk326GK70cauolwNb
t07M0+6JLY7b1vlDvzLsGU9nD5elYe8MaLLnJtB0dmUUh8/9zbA3KJ5t1pZR
ubZwTKPSWd4t7uxzq7m6u53P9duOfzeurYyFsdJvHwO9fFgyj2bB5/LT8u6m
VkT6bu1Vzb6pGvpTz798rNrFJRfro6pzez5qnD0dfjk8g3UrN3q31VrnySsf
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
c0l4IVNoka6McEnPkNcL60kLl4lmZUozpA5Z3pZgqeHlZqmcIjCTcbYo0/cQ
OkaUXMZCJNyvG0J56Vfp0fZSEL3HtJuoIqN9MdBkIccT4PjBinsHqgwsqlQH
YXKCAmwkH7d6XMYFqHtbZftx/h67jsKE6RghnX+JKuFlnOXBB/CKYnq7e8tU
/22PJJ6Wrp8SiziPQgemkmJrVbUeVWKjSOEOkHY9PHNIBMAu2KkgpYbEDIWF
2fCfq+rQ4mQEqnNU70q7eZDBqc1XeE6PjiASxVi2ibVJWKoG+u5x3bJpO/c9
SUpqAVRffBqormOJRWFRuCKA2wYKPaD/QnAsX4zCDTuiaioApUos0rMhKU7U
YHfijLb9Mu4mc2ZjYWi1QrlQkhWoLw5XvChKeTXKqMragEmWa6pyo6Vr2zvp
peOCAE6gj6CJMjyYju/523UZUThjbikjK8eR5dKm1LxkoK3imj+YTrZsJaYR
9BptIayWCWOtsJ4kin3GCSmk5DYTNo1WOIZpKroPiR1prI40JRrO/yE0U0Gh
V0JBccYO6x2pSgWhm8r0drkNCGBRSl6ZbwM1UBqzF1TcpzDrHqB8sXQ9ADha
VGAYxfHwo+hopSFipM18+hJ371NgdK/ZrlKjiIrdEKPUaG7N5jb8TwWsLUWV
QSoDKAQbZCuIVyWpl4bOqB4yKrfgRvAi3rcNai8lA2VKcQ3+lghKIhtR3fFu
UmA9+5HTkCUxSDl+O1dPCT5BpDoklSSbsubld5khkgj/Rcr7l0gA4/fQIvTs
vdTJybSNSNmFPWr+LYf/U4mfXzFisnPpU5So9EISzYvn/gq/VQhxX5P22I9M
6VH/SksTtB00zIxB/EDTE6fKkun6AqeLQbW8D3BCmTZ68xhsKFnXTR4Z3gof
XeQrzWry9AmftW47z8GmefNFPFVvveLIfJ50Zpb44j6afAIqOj4sXlyurtv8
yr/lF6WTxmZV7M1tvq7WBo3uqpV0R6MeX5RLx+eLs6eBfVe8FV/9c7vln9WO
a43jzuVNWNQHw9vpuvpgimOzU1s9lm43w03n8vJJTJbjp7mToq5mxLOmB2eD
Qafc63bb1/VZez3otGeDyeikXNwMnrldubtqDW8fzbXnL4q+sNfrdXf2efDJ
vRs8PxT77fXl+vihf3rWfjxqlyb9zvyse3199tR7bg87s+F1p+2edezh5Xhy
dzS6aovDdXFz9twunV1N1mcP8GfvjuOz8x4+O4ufnXWqT93n9ons4/NV276+
OrtsrnuXn3vXl5efeu27q0nfPho9TtbmQ/uyMzO+zh8fzi8uB53ObOLNLi/b
g9nQarevSsbxeeX0SW81judiNTqsDC+PuieNn61RaTk6P6wNbi9b3dakszx/
Mt2DibP6dHB5fnTt9R4eH/xPB0XjQJ8Y9c/PfevaGZn1r+v6bXn9/Dh1fOOw
wxsjf1YyD3rWsFQ1i8eLn6+up4PK4LDTO6yN7dOjI/Fwe9XRzzpF5I/Zm13e
dDrjsRUOZ09fvzrPZe/gYWTc+O3R1+V8fXnw3L7AOR+PzjrtabPfuWr32pfH
B2ftqvx+3e8crC/7uE6dh/adbNvv94EH81nt2TiyF3eLCebffb08nOu99qfO
bKZ4c9nrtIduu9ex2w/9dq162ZxP532z+vV6Y6z10+Hz+eLg+NJblpzSz7z8
ZDSb1qRYqR+eXQB4jkoXp19n/nnvYnqzCQJz1H5ofxq45sSqis/WGW/9PCh7
1/pDc3b+dNI+dIrz09P+YeWyt7gNji6W7ZHf+tr9+ZNuPdpXYe1waT2WLz/u
KTH8TcLH/k5dpMqGP1JFlTivm8XytVF2J/Xy4vb6uObYs9nx0eliOph7tjO8
2aG7Ue490d1x+bpavrUPH4bLSrF7uDi3TP3m8qo1WN4dfz1pnoThyazXWT2a
d+0tNV0Ni5va1adK/Xr0dOd+6VeOjMa4ZhQfBqMBP76rVabliXVSGh4GboKY
MguvkNhHfAOwxOR7Mf0iyk3MJT5XisUEaNHk3wO30gnOtC2I3GXLMVWCkRzW
5ISLur8gUKdGaJ9uypAgvCpoZ6EdWIjK6bonH2/2wDpttetRKQ3lSSXmLvL1
M5m8+wJ29c/ibwUAJPjjXhrKCNU1roMB/UCzQKcaCfz3pTZqBqvqzKyxssmm
LWaUWF2wRhPjQ5Uy43Wm66xuYPxpWmR6k02rGEQuVVix9SNpjlqp/Adpjj+V
sqiwUus7Uxa19AeV4h+mLNIk/TflLMCU/njOQkxZZcpMHcP7ZR3TULCkHJax
irMVDQztTU1cvZ09VHQMJtZqGKwsNfAH/NeERTaZYbK6yWAI+NwwWPOVnEWr
xSolNm2wJoxrML2I6QN4Ui9iEqFaQzlq6khS6ZW8CQhgeYqRykYNo5AgbjAj
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
YgAA

-->

</rfc>
