<?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.23 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-richer-oauth-tmb-claim-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.27.0 -->
  <front>
    <title abbrev="TODO - Abbreviation">Deferred Key Binding for OAuth</title>
    <seriesInfo name="Internet-Draft" value="draft-richer-oauth-tmb-claim-00"/>
    <author fullname="Justin Richer">
      <organization>Bespoke Engineering</organization>
      <address>
        <email>ietf@justin.richer.org</email>
      </address>
    </author>
    <author fullname="Brian Campbell">
      <organization>Ping Identity</organization>
      <address>
        <email>bcampbell@pingidentity.com</email>
      </address>
    </author>
    <author fullname="Dean Saxe">
      <organization>Beyond Identity</organization>
      <address>
        <email>dean@thesax.es</email>
      </address>
    </author>
    <date year="2025" month="February" day="27"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>security</keyword>
    <keyword>trust</keyword>
    <abstract>
      <?line 47?>

<t>Sometimes you want to get a token that's tied to a public key but you can't prove possession of that public key. That's when you need to trust me, bruh.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://jricher.github.io/draft-richer-oauth-tmb-claim/draft-richer-oauth-tmb-claim.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-richer-oauth-tmb-claim/"/>.
      </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/jricher/draft-richer-oauth-tmb-claim"/>.</t>
    </note>
  </front>
  <middle>
    <?line 51?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The JWT confirmation claim "cnf" <xref target="RFC7800"/> allows an RS to determine PoP semantics for a token. However, methods like mTLS <xref target="RFC8705"/> and DPoP <xref target="RFC9449"/> assume that the requester of that token can prove possession of the key that is bound to the token. Sometimes that's just too hard, and so here we define a claim to allow a requester to ask for a token that is bound to a key that the requester cannot, does not want to, or does not feel like proving possession of at the time of request.</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>
    <section anchor="token-meta-key-binding-claim">
      <name>Token Meta-key Binding Claim</name>
      <t>The token meta-key binding "tmb" claim is passed in an OAuth token request parameter of the same name. Its value is the form-encoded value that the requester wants the confirmation claim to be in the issued token. If the requester is making a DPoP or mTLS request, any keys there <bcp14>MUST</bcp14> be ignored.</t>
      <t>The same parameter can be used in a token exchange request, with the same results.</t>
      <t>If the issued token is a JWT, the value of the "tmb" claim is copied to the "cnf" claim of the resulting token. If the token is introspected, the value of "tmb" is returned in the "cnf" claim of the introspection response.</t>
      <t>The requester <bcp14>SHOULD</bcp14> give the resulting token to the holder of the key represented in the "tmb" claim.</t>
      <t>The presenter of the token <bcp14>MUST</bcp14> prove possession of the key in the resulting "cnf" claim using the appropriate key validation method for the type of token.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security of this specification is entirely based on trust. If you have trust issues, it's not going to be secure.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers the "tmb" claim to the IANA JWT Claims registry and OAuth request parameter.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <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="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="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="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <?line 100?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
5K4NAAA=

-->

</rfc>
