<?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.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-parecki-oauth-jwt-dpop-grant-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="JWT Authorization Grant with DPoP">OAuth 2.0 JWT Authorization Grant with DPoP Binding</title>
    <seriesInfo name="Internet-Draft" value="draft-parecki-oauth-jwt-dpop-grant-02"/>
    <author fullname="Aaron Parecki">
      <organization>Okta</organization>
      <address>
        <email>aaron@parecki.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="30"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>jwt</keyword>
    <keyword>dpop</keyword>
    <keyword>authorization</keyword>
    <abstract>
      <?line 50?>

<t>This specification defines a new OAuth 2.0 authorization grant type
for exchanging a JSON Web Token (JWT) assertion that is bound to a key
for an access token. To use the assertion, the client must prove
possession of that key using the Demonstrating Proof of Possession (DPoP)
mechanism. Unlike the JWT bearer grant, a stolen assertion cannot be
used by a party that does not hold the private key.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://drafts.aaronpk.com/oauth-jwt-dpop-grant/draft-parecki-oauth-jwt-dpop-grant.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-parecki-oauth-jwt-dpop-grant/"/>.
      </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/aaronpk/oauth-jwt-dpop-grant"/>.</t>
    </note>
  </front>
  <middle>
    <?line 59?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication
and Authorization Grants <xref target="RFC7523"/> defines the use of a JWT as an
authorization grant, using the grant type <tt>urn:ietf:params:oauth:grant-type:jwt-bearer</tt>.
This grant type describes the use of a JWT authorization grant as a
bearer token, which is susceptible to reuse by any party that obtains one.</t>
      <t>OAuth 2.0 Demonstrating Proof of Possession (DPoP) <xref target="RFC9449"/> defines
a mechanism to bind access tokens to a specific cryptographic key.
This prevents the token from being used by any party that does not
have access to the private key.</t>
      <t>This specification extends the proof-of-possession concept to the
authorization grant itself. It defines a new grant type,
<tt>urn:ietf:params:oauth:grant-type:jwt-dpop</tt>, for cases where the JWT
assertion is already bound to a DPoP key. To exchange the assertion
for an access token, the client must provide a DPoP proof demonstrating
possession of the key to which the assertion is bound. This makes the
JWT assertion a sender-constrained credential.</t>
      <t>A motivating use case is the Identity Assertion JWT Authorization Grant
<xref target="I-D.ietf-oauth-identity-assertion-authz-grant"/>, in which a client
obtains a JWT assertion from an identity provider, typically using
Token Exchange <xref target="RFC8693"/>, and presents it to the authorization server
of a different trust domain. Binding that assertion to a DPoP key
prevents it from being used by any party other than the client that
requested it, and allows the resulting access token to be bound to the
same key.</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 terminology of <xref target="RFC6749"/>, <xref target="RFC7521"/>, <xref target="RFC7523"/>, and <xref target="RFC9449"/>.</t>
        <dl>
          <dt>DPoP-bound JWT assertion:</dt>
          <dd>
            <t>A JWT assertion that contains a <tt>cnf</tt> claim with a <tt>jkt</tt> confirmation
method member identifying the public key to which the assertion is bound.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="issuance">
      <name>Obtaining a DPoP-Bound JWT Assertion</name>
      <t>This specification does not define how a client obtains a DPoP-bound
JWT assertion. Any mechanism may be used, provided that the issuer of
the assertion binds it to a key controlled by the client. This section
describes requirements on the issuer, and one way of meeting them.</t>
      <t>The issuer of a DPoP-bound JWT assertion:</t>
      <ul spacing="normal">
        <li>
          <t><bcp14>MUST</bcp14> include a <tt>cnf</tt> claim containing a <tt>jkt</tt> confirmation method
member, whose value is the JWK SHA-256 Thumbprint <xref target="RFC7638"/> of the
client's public key, as described in <xref section="6.1" sectionFormat="of" target="RFC9449"/>.</t>
        </li>
        <li>
          <t><bcp14>SHOULD</bcp14> verify that the client possesses the private key corresponding
to that public key before issuing the assertion.</t>
        </li>
        <li>
          <t><bcp14>MUST NOT</bcp14> include more than one <tt>jkt</tt> value, or any other confirmation
method member alongside <tt>jkt</tt>.</t>
        </li>
      </ul>
      <t>When the assertion is obtained from an OAuth token endpoint, such as by
Token Exchange <xref target="RFC8693"/>, the client can demonstrate possession of the
key by including a <tt>DPoP</tt> header field in that request, as defined in
<xref section="5" sectionFormat="of" target="RFC9449"/>. The issuer validates the DPoP proof and uses
the thumbprint of the public key in the proof as the value of
<tt>cnf.jkt</tt> in the issued assertion. The client then uses the same key
when presenting the assertion as described in <xref target="parameters"/>.</t>
      <t>For example, when obtaining an Identity Assertion JWT Authorization
Grant (ID-JAG) as described in <xref target="I-D.ietf-oauth-identity-assertion-authz-grant"/>,
the client includes a <tt>DPoP</tt> header field in the Token Exchange request
to the identity provider, and the identity provider includes the
resulting <tt>cnf.jkt</tt> value in the issued ID-JAG.</t>
      <t>The following non-normative example shows the decoded claims of a
DPoP-bound ID-JAG:</t>
      <artwork><![CDATA[
{
  "iss": "https://idp.example.com",
  "sub": "U019488227",
  "aud": "https://as.example.net",
  "client_id": "f53f191f9311af35",
  "exp": 1793400300,
  "iat": 1793400000,
  "jti": "9a8b3cb8-7a1e-4d2c-8c5e-0f3e6a2c7b1d",
  "cnf": {
    "jkt": "GXIEs4thM-cVZkW7mUs9-9R731DmI7aeeBFm4VYCMUA"
  }
}
]]></artwork>
    </section>
    <section anchor="http-parameter-bindings-for-transporting-assertions">
      <name>HTTP Parameter Bindings for Transporting Assertions</name>
      <t>The OAuth Assertion Framework <xref target="RFC7521"/> defines generic HTTP
parameters for transporting assertions (a.k.a. security tokens)
during interactions with a token endpoint.  This section defines
specific parameters and treatments of those parameters for use with
DPoP-bound JWT assertions.</t>
      <section anchor="parameters">
        <name>Using DPoP-Bound JWT Assertions as Authorization Grants</name>
        <t>To use a DPoP-bound JWT assertion as an authorization grant, the client makes an
access token request as defined in <xref section="4.1" sectionFormat="of" target="RFC7521"/>
with the following specific parameter values and encodings.</t>
        <dl>
          <dt><tt>grant_type</tt>:</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> - The value <bcp14>MUST</bcp14> be <tt>urn:ietf:params:oauth:grant-type:jwt-dpop</tt></t>
          </dd>
          <dt><tt>assertion</tt>:</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> - A single JWT, as defined in <xref target="RFC7519"/>, that contains a
<tt>cnf</tt> claim as described in <xref target="processing"/>.</t>
          </dd>
          <dt><tt>scope</tt>:</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14> - The <tt>scope</tt> parameter may be used, as defined in <xref section="4.1" sectionFormat="of" target="RFC7521"/>,
to indicate the requested scope.</t>
          </dd>
        </dl>
        <t>Authentication of the client is optional, as described in
<xref section="3.2.1" sectionFormat="of" target="RFC6749"/> and consequently, the
<tt>client_id</tt> is only needed when a form of client authentication that
relies on the parameter is used.</t>
        <t>The client <bcp14>MUST</bcp14> also include a <tt>DPoP</tt> header field as defined in <xref section="4" sectionFormat="of" target="RFC9449"/>,
which constitutes a proof of possession for the key to which the assertion is bound.</t>
        <t>The following example demonstrates an access token request with a
DPoP-bound JWT assertion as an authorization grant (with extra line
breaks for display purposes only). The complete request, with decoded
values, is shown in <xref target="complete-example"/>.</t>
        <artwork><![CDATA[
POST /token HTTP/1.1
Host: as.example.net
Content-Type: application/x-www-form-urlencoded
DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6
  [...omitted for brevity...]

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-dpop
&assertion=eyJ0eXAiOiJvYXV0aC1pZC1qYWcrand0IiwiYWxnIjoiRVMyNTYi
[...omitted for brevity...]
]]></artwork>
      </section>
    </section>
    <section anchor="processing">
      <name>JWT Format and Processing Requirements</name>
      <t>The authorization server <bcp14>MUST</bcp14> validate the JWT according to the criteria
below. Application of additional restrictions and policy are at the
discretion of the authorization server.</t>
      <ol spacing="normal" type="1"><li>
          <t>The authorization server <bcp14>MUST</bcp14> validate the DPoP proof in the <tt>DPoP</tt>
header field as described in <xref section="4.3" sectionFormat="of" target="RFC9449"/>.</t>
        </li>
        <li>
          <t>The authorization server <bcp14>MUST</bcp14> validate the JWT assertion according
to the processing rules in <xref section="3" sectionFormat="of" target="RFC7523"/> (including <xref section="3.1" sectionFormat="of" target="RFC7523"/>) and <xref section="4" sectionFormat="of" target="I-D.ietf-oauth-rfc7523bis"/>.</t>
        </li>
        <li>
          <t>The authorization server <bcp14>MUST</bcp14> verify that the JWT assertion contains
a <tt>cnf</tt> claim as defined in <xref target="RFC7800"/>, and that the <tt>cnf</tt> claim
contains a <tt>jkt</tt> confirmation method member as defined in
<xref section="6.1" sectionFormat="of" target="RFC9449"/>.</t>
        </li>
        <li>
          <t>The authorization server <bcp14>MUST</bcp14> verify that the public key in the <tt>jwk</tt>
JOSE Header Parameter of the DPoP proof matches the key to which the
JWT assertion is bound. This is done in the same way a resource server
confirms that a DPoP-bound access token matches the key of a DPoP proof
(check 12 in <xref section="4.3" sectionFormat="of" target="RFC9449"/>), using the JWK Thumbprint
confirmation method of <xref section="6.1" sectionFormat="of" target="RFC9449"/>: compute the
base64url-encoded JWK SHA-256 Thumbprint <xref target="RFC7638"/> of that public
key, and compare it to the value of <tt>cnf.jkt</tt> in the assertion.</t>
        </li>
      </ol>
      <t>If the DPoP proof is missing or invalid (step 1), the authorization server
<bcp14>MUST</bcp14> return an error response as described in <xref section="5" sectionFormat="of" target="RFC9449"/>
(<tt>invalid_dpop_proof</tt>), or <xref section="8" sectionFormat="of" target="RFC9449"/> (<tt>use_dpop_nonce</tt>) if
a nonce is required.
If any of the remaining validation steps fail, the authorization server <bcp14>MUST</bcp14>
return an <tt>invalid_grant</tt> error response.</t>
      <section anchor="replay">
        <name>DPoP Nonces and Replay</name>
        <t>The authorization server <bcp14>MAY</bcp14> require the client to include a nonce in
the DPoP proof, as described in <xref section="8" sectionFormat="of" target="RFC9449"/>. In that case
the authorization server responds to a request without a valid nonce
with a <tt>use_dpop_nonce</tt> error and a <tt>DPoP-Nonce</tt> header field, and the
client retries the request with a new DPoP proof containing the
provided nonce and the same assertion.</t>
        <t>The authorization server <bcp14>SHOULD</bcp14> perform replay detection on the <tt>jti</tt>
claim of the DPoP proof, as described in <xref section="11.1" sectionFormat="of" target="RFC9449"/>.
The authorization server <bcp14>MAY</bcp14> also reject assertions whose <tt>jti</tt> has
already been used, as described in <xref section="3" sectionFormat="of" target="RFC7523"/>.</t>
        <t>If the authorization server records assertion <tt>jti</tt> values to detect
replay, it <bcp14>MUST NOT</bcp14> record the assertion's <tt>jti</tt> as used when the request
is rejected because of an invalid or missing DPoP proof or nonce.
Otherwise a client following the nonce retry described above would have
its assertion rejected as a replay. Performing the validation steps in
the order given in <xref target="processing"/> achieves this.</t>
      </section>
      <section anchor="jwt-bearer">
        <name>Use with the JWT Bearer Grant Type</name>
        <t>An authorization server that supports the grant type defined in this
specification <bcp14>MUST NOT</bcp14> accept a DPoP-bound JWT assertion as an
authorization grant using the <tt>urn:ietf:params:oauth:grant-type:jwt-bearer</tt>
grant type defined in <xref target="RFC7523"/>, and <bcp14>MUST</bcp14> return an <tt>invalid_grant</tt>
error response if one is presented. This applies whether or not the
request includes a <tt>DPoP</tt> header field.</t>
        <t>An authorization server that supports this specification <bcp14>SHOULD</bcp14> include
<tt>urn:ietf:params:oauth:grant-type:jwt-dpop</tt> in the <tt>grant_types_supported</tt>
value of its authorization server metadata <xref target="RFC8414"/>.</t>
      </section>
    </section>
    <section anchor="access-token-response">
      <name>Access Token Response</name>
      <t>If the request is valid, the authorization server issues an access
token. The issued access token <bcp14>SHOULD</bcp14> be DPoP-bound to the key from the
DPoP proof, which is the same key to which the assertion is bound. In
this case the <tt>token_type</tt> in the response <bcp14>MUST</bcp14> be <tt>DPoP</tt>, as described
in <xref section="5" sectionFormat="of" target="RFC9449"/>.</t>
      <t>The authorization server <bcp14>MAY</bcp14> instead issue a bearer access token, for
example when the protected resources for which the token is intended
do not support DPoP. In this case the <tt>token_type</tt> <bcp14>MUST</bcp14> be <tt>Bearer</tt>. See
<xref target="bearer-access-tokens"/> for the security implications.</t>
      <t>If the authorization server issues a refresh token, the refresh token
is subject to the binding requirements of <xref section="5" sectionFormat="of" target="RFC9449"/>: a
refresh token issued to a public client <bcp14>MUST</bcp14> be bound to the key from
the DPoP proof. The authorization server <bcp14>SHOULD NOT</bcp14> issue a refresh
token whose lifetime extends beyond what is permitted by the policy
under which the assertion was issued.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations described within the following
specifications are all applicable to this document:
"Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants" <xref target="RFC7521"/>,
"JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants" <xref target="RFC7523"/>,
"Updates to OAuth 2.0 JSON Web Token (JWT) Client Authentication and Assertion-Based Authorization Grants" <xref target="I-D.ietf-oauth-rfc7523bis"/>,
"OAuth 2.0 Demonstrating Proof of Possession (DPoP)" <xref target="RFC9449"/>,
"The OAuth 2.0 Authorization Framework" <xref target="RFC6749"/>,
and "JSON Web Token (JWT)" <xref target="RFC7519"/>.</t>
      <section anchor="downgrade-to-the-jwt-bearer-grant">
        <name>Downgrade to the JWT Bearer Grant</name>
        <t>The binding of a DPoP-bound JWT assertion only provides protection if
the authorization server enforces it. An attacker that obtains a
DPoP-bound JWT assertion, but not the corresponding private key, could
present the assertion using the <tt>urn:ietf:params:oauth:grant-type:jwt-bearer</tt>
grant type instead of the grant type defined in this specification. An
authorization server that processes the assertion only according to
<xref target="RFC7523"/> would ignore the <tt>cnf</tt> claim and issue an access token,
defeating the binding entirely.</t>
        <t>Authorization servers that support this specification prevent this
attack by rejecting DPoP-bound JWT assertions presented with the
<tt>jwt-bearer</tt> grant type, as required by <xref target="jwt-bearer"/>.</t>
        <t>Authorization servers that do not implement this specification are not
aware of this requirement and may accept a DPoP-bound JWT assertion as
a bearer assertion. For this reason, an issuer of DPoP-bound JWT
assertions <bcp14>SHOULD NOT</bcp14> issue one for use at an authorization server
unless it knows that the authorization server supports this
specification, for example because the authorization server advertises
<tt>urn:ietf:params:oauth:grant-type:jwt-dpop</tt> in its <tt>grant_types_supported</tt>
metadata <xref target="RFC8414"/>, or by prior configuration.</t>
      </section>
      <section anchor="bearer-access-tokens">
        <name>Issuing Bearer Access Tokens</name>
        <t>When the authorization server issues a bearer access token in response
to this grant, the DPoP binding no longer protects the access token.
The assertion cannot be used by a party that does not hold the private
key, but the resulting access token can be used by any party that
obtains it. Authorization servers <bcp14>SHOULD</bcp14> issue DPoP-bound access tokens
whenever the intended protected resources support them.</t>
        <t>Even when a bearer access token is issued, a refresh token issued to a
public client is still bound to the DPoP key, as described in
<xref section="5" sectionFormat="of" target="RFC9449"/>. As noted there, binding only the refresh
token can improve the security posture even when protected resources
do not support DPoP, since a stolen refresh token cannot be used to
obtain new access tokens without the private key.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>The <tt>jkt</tt> value in a DPoP-bound JWT assertion is a stable identifier of
the client's key. When a client uses the same key with an identity
provider, with one or more authorization servers, and with the protected
resources to which DPoP-bound access tokens are presented, each of these
parties observes the same key, either in DPoP proofs or as <tt>cnf.jkt</tt> in
assertions and access tokens. Colluding parties could use this to
correlate the client's activity across them, beyond what is already
possible from the identity of the client or the user.</t>
      <t>To limit this, a client <bcp14>MAY</bcp14> use a different DPoP key for each
authorization server at which it presents DPoP-bound JWT assertions.
Since the assertion is bound to the key used when requesting it (see
<xref target="issuance"/>), the client needs to choose the key it will use at the
target authorization server before requesting the assertion. A client
<bcp14>SHOULD NOT</bcp14> reuse a DPoP key across unrelated users or sessions where
doing so would let those otherwise unlinked activities be correlated.</t>
      <t>This specification does not change the claims about the user that are
conveyed in the assertion, and the privacy considerations of the
specification defining the assertion, such as
<xref target="I-D.ietf-oauth-identity-assertion-authz-grant"/>, continue to apply.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="oauth-uri-registration">
        <name>OAuth URI Registration</name>
        <t>This specification requests registration of the following value in the
"OAuth URI" registry established by <xref target="RFC6755"/>.</t>
        <ul spacing="normal">
          <li>
            <t>URN: <tt>urn:ietf:params:oauth:grant-type:jwt-dpop</tt></t>
          </li>
          <li>
            <t>Common Name: DPoP-bound JWT Authorization Grant</t>
          </li>
          <li>
            <t>Change Controller: IESG</t>
          </li>
          <li>
            <t>Specification Document(s): this document</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="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="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="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="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="RFC7800">
          <front>
            <title>Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This specification describes how to declare in a JSON Web Token (JWT) that the presenter of the JWT possesses a particular proof-of- possession key and how the recipient can cryptographically confirm proof of possession of the key by the presenter. Being able to prove possession of a key is also sometimes described as the presenter being a holder-of-key.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7800"/>
          <seriesInfo name="DOI" value="10.17487/RFC7800"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-rfc7523bis">
          <front>
            <title>Updates to OAuth 2.0 JSON Web Token (JWT) Client Authentication and Assertion-Based Authorization Grants</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="28" month="April" year="2026"/>
            <abstract>
              <t>   This document updates RFC7521, RFC7522, RFC7523 and RFC9126 with
   respect to the treatment of audience values in OAuth 2.0 Client
   Assertion Authentication and Assertion-based Authorization Grants 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-11"/>
        </reference>
        <reference anchor="RFC9449">
          <front>
            <title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title>
            <author fullname="D. Fett" initials="D." surname="Fett"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Waite" initials="D." surname="Waite"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>This document describes a mechanism for sender-constraining OAuth 2.0 tokens via a proof-of-possession mechanism on the application level. This mechanism allows for the detection of replay attacks with access and refresh tokens.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9449"/>
          <seriesInfo name="DOI" value="10.17487/RFC9449"/>
        </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="RFC8414">
          <front>
            <title>OAuth 2.0 Authorization Server Metadata</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <date month="June" year="2018"/>
            <abstract>
              <t>This specification defines a metadata format that an OAuth 2.0 client can use to obtain the information needed to interact with an OAuth 2.0 authorization server, including its endpoint locations and authorization server capabilities.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8414"/>
          <seriesInfo name="DOI" value="10.17487/RFC8414"/>
        </reference>
        <reference anchor="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-oauth-identity-assertion-authz-grant">
          <front>
            <title>Identity Assertion JWT Authorization Grant</title>
            <author fullname="Aaron Parecki" initials="A." surname="Parecki">
              <organization>Okta</organization>
            </author>
            <author fullname="Karl McGuinness" initials="K." surname="McGuinness">
              <organization>Independent</organization>
            </author>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <date day="21" month="May" year="2026"/>
            <abstract>
              <t>   This specification provides a mechanism for an application to use an
   identity assertion to obtain an access token for a third-party API by
   coordinating through an identity provider that the downstream
   Resource Authorization Server already trusts for single sign-on
   (SSO), using Token Exchange [RFC8693] and JWT Profile for OAuth 2.0
   Authorization Grants [RFC7523].  This pattern is informally referred
   to as Cross-App Access (XAA).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-identity-assertion-authz-grant-04"/>
        </reference>
      </references>
    </references>
    <?line 390?>

<section anchor="complete-example">
      <name>Complete Example</name>
      <t>This appendix contains a complete example of an access token request
using a DPoP-bound ID-JAG. The signatures in this example can be
verified using the public keys shown. Line breaks within JWTs and
within the canonical JWK below are for display purposes only.</t>
      <section anchor="identity-provider-key">
        <name>Identity Provider Key</name>
        <t>The ID-JAG is signed by the identity provider using the following
key, shown as a JWK:</t>
        <artwork><![CDATA[
{
  "kty": "EC",
  "crv": "P-256",
  "x": "RQAT9mqfwKatL9zm1ckKHIyDvjt45YePri8FEw3bbBw",
  "y": "do5FLL-GZqbHgCQlkNs-qpJC6fWghRQsAwrl9cPD73M",
  "kid": "idp-key-1",
  "use": "sig",
  "alg": "ES256"
}
]]></artwork>
      </section>
      <section anchor="dpop-bound-jwt-assertion">
        <name>DPoP-Bound JWT Assertion</name>
        <t>The decoded JOSE header of the ID-JAG:</t>
        <artwork><![CDATA[
{
  "typ": "oauth-id-jag+jwt",
  "alg": "ES256",
  "kid": "idp-key-1"
}
]]></artwork>
        <t>The decoded claims of the ID-JAG:</t>
        <artwork><![CDATA[
{
  "iss": "https://idp.example.com",
  "sub": "U019488227",
  "aud": "https://as.example.net",
  "client_id": "f53f191f9311af35",
  "exp": 1793400300,
  "iat": 1793400000,
  "jti": "9a8b3cb8-7a1e-4d2c-8c5e-0f3e6a2c7b1d",
  "cnf": {
    "jkt": "GXIEs4thM-cVZkW7mUs9-9R731DmI7aeeBFm4VYCMUA"
  }
}
]]></artwork>
        <t>The encoded and signed ID-JAG:</t>
        <artwork><![CDATA[
eyJ0eXAiOiJvYXV0aC1pZC1qYWcrand0IiwiYWxnIjoiRVMyNTYiLCJraWQiOiJp
ZHAta2V5LTEifQ.
eyJpc3MiOiJodHRwczovL2lkcC5leGFtcGxlLmNvbSIsInN1YiI6IlUwMTk0ODgy
MjciLCJhdWQiOiJodHRwczovL2FzLmV4YW1wbGUubmV0IiwiY2xpZW50X2lkIjoi
ZjUzZjE5MWY5MzExYWYzNSIsImV4cCI6MTc5MzQwMDMwMCwiaWF0IjoxNzkzNDAw
MDAwLCJqdGkiOiI5YThiM2NiOC03YTFlLTRkMmMtOGM1ZS0wZjNlNmEyYzdiMWQi
LCJjbmYiOnsiamt0IjoiR1hJRXM0dGhNLWNWWmtXN21VczktOVI3MzFEbUk3YWVl
QkZtNFZZQ01VQSJ9fQ.
c_PUFFNDDHvgWUxpCQ_jsiMaP4ZU0xXqkWFQ5lGHT_WYsjlAfOboUOSxuHR-_GjM
P3cSmUETAr_ux2ivS828xw
]]></artwork>
      </section>
      <section anchor="dpop-proof">
        <name>DPoP Proof</name>
        <t>The decoded JOSE header of the DPoP proof, which contains the client's
public key:</t>
        <artwork><![CDATA[
{
  "typ": "dpop+jwt",
  "alg": "ES256",
  "jwk": {
    "kty": "EC",
    "crv": "P-256",
    "x": "xSYHiPmBtVKQAzs79FRVe1dI7Y_Lu93I67WxbSsg9P0",
    "y": "zHt5qFsvN2EYcSWf5hq1GqpcqmhONiB9W_YIgvsYqmQ"
  }
}
]]></artwork>
        <t>The decoded claims of the DPoP proof:</t>
        <artwork><![CDATA[
{
  "jti": "e1j3V_bKic8-LAEB",
  "htm": "POST",
  "htu": "https://as.example.net/token",
  "iat": 1793400005
}
]]></artwork>
        <t>The encoded and signed DPoP proof:</t>
        <artwork><![CDATA[
eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6IkVD
IiwiY3J2IjoiUC0yNTYiLCJ4IjoieFNZSGlQbUJ0VktRQXpzNzlGUlZlMWRJN1lf
THU5M0k2N1d4YlNzZzlQMCIsInkiOiJ6SHQ1cUZzdk4yRVljU1dmNWhxMUdxcGNx
bWhPTmlCOVdfWUlndnNZcW1RIn19.
eyJqdGkiOiJlMWozVl9iS2ljOC1MQUVCIiwiaHRtIjoiUE9TVCIsImh0dSI6Imh0
dHBzOi8vYXMuZXhhbXBsZS5uZXQvdG9rZW4iLCJpYXQiOjE3OTM0MDAwMDV9.
S0ygnxypg5vIkyq7HCRz03MNafRa1Hk1NFsCGHbjFc4mrRQic9X7TpBxMy2C1BTT
6fjbCEFS5J_GJKuwdGxSZA
]]></artwork>
      </section>
      <section anchor="thumbprint-comparison">
        <name>Thumbprint Comparison</name>
        <t>The authorization server constructs the canonical JWK of the public
key in the <tt>jwk</tt> header of the DPoP proof, as described in
<xref section="3" sectionFormat="of" target="RFC7638"/>:</t>
        <artwork><![CDATA[
{"crv":"P-256","kty":"EC",
"x":"xSYHiPmBtVKQAzs79FRVe1dI7Y_Lu93I67WxbSsg9P0",
"y":"zHt5qFsvN2EYcSWf5hq1GqpcqmhONiB9W_YIgvsYqmQ"}
]]></artwork>
        <t>The base64url-encoded SHA-256 hash of this value is:</t>
        <artwork><![CDATA[
GXIEs4thM-cVZkW7mUs9-9R731DmI7aeeBFm4VYCMUA
]]></artwork>
        <t>This matches the value of <tt>cnf.jkt</tt> in the ID-JAG, so the assertion
is bound to the key used to sign the DPoP proof.</t>
      </section>
      <section anchor="access-token-request">
        <name>Access Token Request</name>
        <t>The resulting access token request:</t>
        <artwork><![CDATA[
POST /token HTTP/1.1
Host: as.example.net
Content-Type: application/x-www-form-urlencoded
DPoP:
  eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6IkVD
  IiwiY3J2IjoiUC0yNTYiLCJ4IjoieFNZSGlQbUJ0VktRQXpzNzlGUlZlMWRJN1lf
  THU5M0k2N1d4YlNzZzlQMCIsInkiOiJ6SHQ1cUZzdk4yRVljU1dmNWhxMUdxcGNx
  bWhPTmlCOVdfWUlndnNZcW1RIn19.
  eyJqdGkiOiJlMWozVl9iS2ljOC1MQUVCIiwiaHRtIjoiUE9TVCIsImh0dSI6Imh0
  dHBzOi8vYXMuZXhhbXBsZS5uZXQvdG9rZW4iLCJpYXQiOjE3OTM0MDAwMDV9.
  S0ygnxypg5vIkyq7HCRz03MNafRa1Hk1NFsCGHbjFc4mrRQic9X7TpBxMy2C1BTT
  6fjbCEFS5J_GJKuwdGxSZA

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-dpop
&assertion=
eyJ0eXAiOiJvYXV0aC1pZC1qYWcrand0IiwiYWxnIjoiRVMyNTYiLCJraWQiOiJp
ZHAta2V5LTEifQ.
eyJpc3MiOiJodHRwczovL2lkcC5leGFtcGxlLmNvbSIsInN1YiI6IlUwMTk0ODgy
MjciLCJhdWQiOiJodHRwczovL2FzLmV4YW1wbGUubmV0IiwiY2xpZW50X2lkIjoi
ZjUzZjE5MWY5MzExYWYzNSIsImV4cCI6MTc5MzQwMDMwMCwiaWF0IjoxNzkzNDAw
MDAwLCJqdGkiOiI5YThiM2NiOC03YTFlLTRkMmMtOGM1ZS0wZjNlNmEyYzdiMWQi
LCJjbmYiOnsiamt0IjoiR1hJRXM0dGhNLWNWWmtXN21VczktOVI3MzFEbUk3YWVl
QkZtNFZZQ01VQSJ9fQ.
c_PUFFNDDHvgWUxpCQ_jsiMaP4ZU0xXqkWFQ5lGHT_WYsjlAfOboUOSxuHR-_GjM
P3cSmUETAr_ux2ivS828xw
]]></artwork>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank the following people for their contributions and reviews of this specification: Filip Skokan, Karl McGuinness.</t>
    </section>
    <section numbered="false" anchor="document-history">
      <name>Document History</name>
      <t>[[ To be removed from the final specification ]]</t>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>Rewrote the abstract to describe binding of the assertion rather than the access token.</t>
        </li>
        <li>
          <t>Defined "DPoP-bound JWT assertion" and used the term consistently.</t>
        </li>
        <li>
          <t>Use DPoP error codes for DPoP proof validation failures.</t>
        </li>
        <li>
          <t>Moved Access Token Response to a top-level section.</t>
        </li>
        <li>
          <t>Added a section describing requirements on the issuer of a DPoP-bound JWT assertion, with an example.</t>
        </li>
        <li>
          <t>Added the Identity Assertion JWT Authorization Grant as a motivating use case.</t>
        </li>
        <li>
          <t>Added Privacy Considerations.</t>
        </li>
        <li>
          <t>Added a complete, verifiable example in an appendix.</t>
        </li>
        <li>
          <t>Added guidance on DPoP nonces and replay detection, including not consuming the assertion on a nonce retry.</t>
        </li>
        <li>
          <t>Clarified when bearer access tokens may be issued, and the binding of refresh tokens.</t>
        </li>
        <li>
          <t>Added requirement to reject DPoP-bound JWT assertions presented with the <tt>jwt-bearer</tt> grant type, and security considerations for downgrade attacks.</t>
        </li>
        <li>
          <t>Clarified that the DPoP proof's <tt>jwk</tt> is compared to <tt>cnf.jkt</tt> by computing its JWK SHA-256 Thumbprint, as a resource server does for DPoP-bound access tokens.</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Changed DPoP check to use <tt>jkt</tt> string instead of <tt>jwk</tt> object to be able to use simple string comparison.</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
kMhO0Lb6io9T4/kH6ZJwZJw6U5WcVl8DDIqldiNBGBuP9syFs7TBllakThQC
LayaVflzzrHeJQ0mhdf/zJkv3A5x/SmtqXDNLWGxUWvVljARCIhc3nWvGvxK
PLhyjSiPtS5pS8038sP0Tu1RaW7drK7Vi1Bof00/NueCgNWNhpoqq7PcxJN/
g5tbez9VPfcbDGwMK1zeopPmC/6Vd5QOnpAzXtfHLEJ81UD7GM8EZAZ9oFIU
H6NPe9mkBZPngvuwnpBnvlQZ0qHioa8floqMlFrx6BPE3mezRiCpYtI0Vu52
5NVYMblezEQvVb5MGacIll4WhugoWfTpRiWDYlQh4JLLLZ+9UXVSJX6G52FU
EZZK9IA+CdmZkfiBNgMfDwjStjaV0lCwWVm3Jdf+SWH6ha7b/iLmMkzLwRD1
gaGk2a3lUu9U/jT9RBFLlnpZ8pzjl8UC7FE8x7rjw7pRmxw+4aUL3JNPrz7j
tavLWmd3/G0w+2LFZ7sv44o9+nLSmB88PcYbmzcCCMfO0eGs2u/vz9InqQMn
2Dw6Oyse337rnzzUL71RKyp+m5zWtwa9h+HVZVSbhd6ufXGwXW2mT45ktbbr
TIowlGIl/QWQCH8BpRiF4N4DDaWNcidF0R9W1u1KDeuydar/UPsXypHzS9bB
49b0WysAg4qP1sN/gwOukGP1WLSEphBp7fzq/v9dMv/rSuZR97oSBWOWcrKM
4v+ZQr+z+mlo9S7xGVk4eHtSi631682zzqE7uCzphid2tYk3Bc7J1cx+CZ7O
1r2RXd/0xPFRbB8/e2fj1lO/3Ygafqty4za2Gl531uyMyucHD3NqpPloY29D
R/ZmNHT0cja+3rjpVWb94+60P76Wkq4/T257m+Wv0BFKLKV77L7cPh5uNns3
m82Xw+eb3s1LC3uFBux6Y6vZseH65ax50Jw16zPX6h2V4eHn1svopXVQm0lJ
4ANI8s05HoEkjc0bAPjmess9r5erN50j76xzNWqOm/H5cbNy2y7Pbh9bXmt8
OL95cdwmSE+NQAOP/fGNew7R2RrHZVJqZXh69bVZdo6HrbNeq9cbx19b65Vr
+2UUn183qs2Xo8N+d1S96V171Mjl6DZuHd3eXpYr15ft012tcPvuont01Do4
OHl66HWfJ/XLu8fIbVoXG7fd8vPXb6Pe0eWmd3zSuevdRI9ebXDeD7rn7efp
yVXx7vixKatiq3Z73D3s1MK76fO6+9TeWd95nqWVLpRS/iG0LO/UJQHQJPss
jUUrYAjD/nvg53E2ynrPMvCvgn4N/s/tmxP3YrwfX3+5rL1E27tHV9ei4jS2
b+7OprvVxtZ277nfjh52L8rms9TNy0m8+e0oemqtH97Y7d5gc/itcvxtYn8b
D89b7v5u7+6m8fAU3XwbX+Y6aT5Aplpc1I5CGFF5rF7f9b+49k7xrHa4n+pj
GI9ppOd45Dy9OF2Ni7ISem0Vum3+AFOWZP1XSp7htwNqhFy6erqOftKtlzX4
bOB3cdS6bR97l/3uafl6FF9dfp28tF6846536zV7V6etikfFgbxz0t1slkfr
rYqzceO1Xm5fvMsmSuKjJ59utU8uK3b39sUZbcyvrr3HbsUZt3rD52bXebaP
W8/USL83vOiMvfr5tTPodT3f8Vu3dq9y1fAruwneKXA4hf6Dl2tv122ve4/n
9Urzsntdp4GeXMU0lsPdzjUpY1h2cMDwlxpxTvZfzt0dQOLm9PbrcNj/uh/d
tjfh8+WTc7wb3vY2UAGTm6+Ah4+H1fNOs4zI1Dy4VmK0y/MH/3k+edh8aozm
37ZP6lcv5WqzZQ2urMrJqNI6iurHJ/3HI3tjHF5duvbu1+3OZP+5OV+vV/Y7
HWpka/DYrx8etTdP745Pv0xnzvFz+7YmT6unVYx1Kk90I801cpeQ8mUZU51S
zHLIzClMtli3+gaovHEkRNc7UXWldhzp+trzJTqk4IAA8E/4P/r+T7m+cp/l
MlFdIjq0omGS8tfHpdUYfoIIqNWHWTm7unBUsoECLrszS1O2Mh0B39HrFyZF
kv2FKhK5jKFRr0j1qqXO3v/7oQwFdL8Ep34RUv0irHoPWv0ivPoViPWLMGs1
auFvv/Z0zL+Z87+Z87uZM2Aibnt6wnmgCiX2uidfcymcv6wNLA/W+pkq8Uin
P+nFd/S+CX+0kHqbiGCiylngBzeUbxFx+9M0JY/nrsQsSsJJJsW3x49cz53w
9igYWX6Bf7FCjzft46nr+4DNsmRIZ8T4iRvFQTjPF/wfv//jd3yjV58K74Mn
/aoJEtjFM1XZ5OIffzCG7/9kv0F8mOEOh4w76p2IsshYhnazHiSbKg+tOPOe
p+xO5W/yPUwgydqqFPyafjOEzOTiq3VkGjeK6dgoNoJFuRTfZFUpxg9ZbWeU
IRsVwHi2AHNx9M4P0kNuSaUsNouDSdETT8LTB77xqZpDrNo4A056WC5xM1/6
8naxTCHZlNKBM+mHgv+7X0omU2w57zdLG8zfkDMHpnOfBXl0yaVdN52ydKmi
V6dM08cepqBh3C0J1K6Un562WCzZLxhvG6F0PwgwHS+l3bEpy6wLx97qnqWS
pbTfkrOxG+nz0MnurtoIMOw0s9VpDN4s4IiTKv+fqUjhqytScB22ooSPkrNJ
9ZWsiomyw03KMVK7prp9pOBYIipPIRHvS9ljf65OP8kNqWjFUaeCrp/PnP+S
+zHalfJ2MfFdnOUKS/L3aoUpD3rF8k0DcpMXz2vSGxaSuigpeZCUivYRXWQx
Ij4WufLVHvI5O1nEIOj9H513Tf9AWQAA

-->

</rfc>
