<?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-richer-oauth-tmb-claim-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="TODO - Abbreviation">Deferred Key Binding for OAuth</title>
    <seriesInfo name="Internet-Draft" value="draft-richer-oauth-tmb-claim-01"/>
    <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 H. Saxe">
      <organization>Full Frontal Nerdity Industries</organization>
      <address>
        <email>dean@thesax.es</email>
      </address>
    </author>
    <date year="2025" month="June" 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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
+iGfYYpz/gl+yS8vteFEBP8HkF/v7MENAAA=

-->

</rfc>
