<?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-gerber-oauth-client-metadata-lookup-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="Client Metadata Lookup">OAuth Client Metadata Lookup</title>
    <seriesInfo name="Internet-Draft" value="draft-gerber-oauth-client-metadata-lookup-00"/>
    <author fullname="Maxwell Gerber">
      <organization>Twilio</organization>
      <address>
        <email>mgerber@twilio.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="21"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <abstract>
      <?line 42?>

<t>This document defines an OAuth endpoint for retrieving a public subset of a
client's effective configuration at an authorization server, including applied
defaults. It enables clients to check that their configuration is accepted by
an authorization server before an authorization attempt. It also enables
authorization servers to progressively roll out features to their client base.
While the endpoint chiefly serves Client ID Metadata Document clients,
it can also be used by clients registered through other means.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Web Authorization Protocol Working Group mailing list (oauth@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/oauth/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/maxwellgerber/draft-gerber-oauth-client-metadata-lookup"/>.</t>
    </note>
  </front>
  <middle>
    <?line 52?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>OAuth Client ID Metadata Documents (CIMD)
<xref target="I-D.ietf-oauth-client-id-metadata-document"/> enable clients to publish metadata at a
URL used as their client identifier. The published document represents a client's
view of itself and its own capabilities. The published document does not tell a
client which values a given authorization server accepts or if the server applies
additional defaults. Incompatibility is only discovered when an authorization
attempt fails.</t>
      <t>That failure is often invisible to the client. When the client identifier or
redirect URI is the problem, Section 4.1.2.1 of <xref target="I-D.ietf-oauth-v2-1"/> requires the AS not
to redirect back to the client. The user is left at an AS error page, and the
client never learns why the flow stopped.</t>
      <t>This document defines an unauthenticated client metadata lookup operation. CIMD
clients are the principal motivation, but the operation also applies to clients
registered through other means, including statically registered public clients.</t>
      <t>RFC 7592 Section 2.1 defines a similar Client Read Request at a Client
Configuration Endpoint <xref target="RFC7592"/>. That operation requires a registration
access token and can return credentials. The operation defined here is
separately discoverable, returns only public configuration, and does not require
the client to be created through DCR.</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?>

<t>Client Identifier URL and Client ID Metadata Document have the meanings defined
in <xref target="I-D.ietf-oauth-client-id-metadata-document"/>.</t>
      <t>Effective configuration is the client metadata the AS uses after resolving the
client's registration, applying defaults, and enforcing client configuration
policy.</t>
    </section>
    <section anchor="use-cases">
      <name>Use Cases</name>
      <section anchor="clients-of-unfamiliar-authorization-servers">
        <name>Clients of Unfamiliar Authorization Servers</name>
        <t>The Model Context Protocol (MCP) authorization specification <xref target="MCP-Auth"/> uses
CIMD as its preferred registration mechanism for clients with no prior
relationship to a server. An MCP client, such as a desktop agent or an IDE,
publishes one metadata document and presents it to whichever authorization
servers protect the MCP servers its users add. The client's developer cannot
test against each of those authorization servers in advance, and each
authorization server may apply its own policy to the same document.</t>
        <t>With this endpoint, the client can look up whether its configuration is accepted
at an authorization server before sending the user to the authorization endpoint.
A rejected document becomes an error the client can show, log, or report, instead
of a runtime error presented to the user during the authorization flow.</t>
      </section>
      <section anchor="progressive-feature-rollout">
        <name>Progressive Feature Rollout</name>
        <t>An AS can change a client's configuration as part of rolling out a new
requirement and expose the result through this endpoint, so clients can adapt
without first failing a user's request.</t>
        <t>For example, an AS rolling out sender-constrained access tokens with DPoP
<xref target="RFC9449"/> can set the <tt>dpop_bound_access_tokens</tt> client metadata value,
defined in Section 5.2 of <xref target="RFC9449"/>, for one cohort of clients at a time.
When the value is <tt>true</tt>, the AS rejects token requests from the client that
lack a DPoP proof. No AS metadata parameter signals this requirement:
<tt>dpop_signing_alg_values_supported</tt> advertises support for DPoP, not whether it
is required. A client that finds <tt>true</tt> in its lookup response knows it must
use DPoP at this AS. Without the lookup, the first signal is a rejected token
request, after the user has already authenticated and consented.</t>
        <t>Rollout through this endpoint suits fields whose values reflect AS policy, such
as requirements the AS enforces on the client. It is not a way for an AS to
change values that only describe the client, such as its redirect URIs or the
algorithms it signs with. <tt>dpop_bound_access_tokens</tt> is phrased as a client
declaration, but it obliges the AS to reject non-DPoP token requests, and
Section 5.2 of <xref target="RFC9449"/> anticipates AS-managed client configuration. An AS
that sets the value for a client reports it here. Whether AS policy can set a
given field is governed by that field's definition, not by this
specification. Clients learn of changes only by repeating the lookup; this
specification defines no change notification.</t>
      </section>
      <section anchor="relationship-to-client-specific-as-metadata">
        <name>Relationship to Client-Specific AS Metadata</name>
        <t><xref target="Watson-AS-Metadata"/> proposes a <tt>client_id</tt> parameter on AS metadata requests
so an AS can tailor its advertised capabilities to a client. The mechanisms
are complementary: AS metadata describes the AS using AS metadata fields;
this endpoint describes the client using client registration metadata fields.</t>
        <t>For example, <tt>dpop_signing_alg_values_supported</tt> (Section 5.1 of <xref target="RFC9449"/>)
is AS metadata, stating which algorithms the AS accepts for DPoP proofs.
<tt>dpop_bound_access_tokens</tt> (Section 5.2 of <xref target="RFC9449"/>) is client metadata,
stating whether the AS requires DPoP of one client. Client-specific AS metadata
can tailor the first, but has no field to carry the second. Deployments using
both mechanisms <bcp14>MUST</bcp14> keep the two views consistent. Neither mechanism requires
the other.</t>
      </section>
    </section>
    <section anchor="endpoint">
      <name>Client Metadata Lookup Endpoint</name>
      <t>The client metadata lookup endpoint is used by a client to retrieve its
effective configuration at an authorization server. The client calls the
endpoint directly, typically before redirecting an end user to the
authorization endpoint.</t>
      <t>The client obtains the URL of the endpoint from the
<tt>client_metadata_lookup_endpoint</tt> member of the authorization server's metadata
(<xref target="discovery"/>).</t>
      <t>The endpoint URL <bcp14>MUST</bcp14> use the <tt>https</tt> scheme and <bcp14>MUST NOT</bcp14> include a fragment
component or query component.</t>
      <t>The authorization server <bcp14>MUST</bcp14> support the use of the HTTP GET method
(<xref section="9.3.1" sectionFormat="of" target="RFC9110"/>) at this endpoint.</t>
      <t>The endpoint <bcp14>MUST</bcp14> accept requests without client authentication. A client
identifier is not proof of the requester's identity, and the response <bcp14>MUST NOT</bcp14>
depend on an ambient user session or cookies.</t>
      <t>Because clients access this endpoint directly, including from browsers, the
authorization server <bcp14>SHOULD</bcp14> support Cross-Origin Resource Sharing (CORS) at
this endpoint, consistent with Section 2.6 of <xref target="RFC9700"/>.</t>
    </section>
    <section anchor="discovery">
      <name>Endpoint Discovery</name>
      <t>An AS supporting this specification <bcp14>MUST</bcp14> include the following member in its
AS metadata <xref target="RFC8414"/>:</t>
      <dl>
        <dt>client_metadata_lookup_endpoint:</dt>
        <dd>
          <t>URL of the client metadata lookup endpoint, as described in <xref target="endpoint"/>.</t>
        </dd>
      </dl>
      <t>This member is <bcp14>OPTIONAL</bcp14> for authorization servers generally. Its presence
advertises the operation defined here. Neither <tt>registration_endpoint</tt> nor
<tt>client_id_metadata_document_supported</tt> alone implies support.</t>
    </section>
    <section anchor="request">
      <name>Lookup Request</name>
      <t>The client sends an HTTP GET request to the advertised endpoint with exactly
one <tt>client_id</tt> query parameter. Its value is the client identifier defined in
RFC 6749 Section 2.2, encoded according to Appendix B of <xref target="RFC6749"/>. For a
CIMD client, the value is its Client Identifier URL:</t>
      <sourcecode type="http-message"><![CDATA[
GET /lookup?client_id=https%3A%2F%2Fapp.example%2Fclient HTTP/1.1
Host: as.example
Accept: application/json
]]></sourcecode>
      <t>The AS <bcp14>MUST</bcp14> resolve the client's configuration using the same registration
rules and policy it uses at other endpoints. For CIMD clients, CIMD validation,
retrieval, and caching requirements apply. Other clients use their existing
registration.</t>
    </section>
    <section anchor="lookup-response">
      <name>Lookup Response</name>
      <t>A successful response <bcp14>MUST</bcp14> use HTTP 200 and <tt>application/json</tt> <xref target="RFC8259"/>.
The body is an object containing <tt>client_id</tt> and a public subset of effective
client metadata as top-level members. Metadata names and types follow
<xref target="RFC7591"/> and applicable extensions. The returned <tt>client_id</tt> <bcp14>MUST</bcp14> match the
request using simple string comparison <xref target="RFC3986"/>.</t>
      <t>For supported fields safe to disclose, the AS <bcp14>MUST</bcp14> return effective values,
including defaults it applies. This specification does not change those defaults.
Unsupported or non-public members <bcp14>MUST</bcp14> be omitted. An omitted member does not
mean an empty value or acceptance of a submitted value. Clients <bcp14>MUST NOT</bcp14> infer
an effective value by applying registration-time defaults to an omitted member.</t>
      <t>The AS <bcp14>MUST NOT</bcp14> return secrets, private keys, tokens, user data, usage history,
or internal administrative information. In particular, <tt>client_secret</tt>,
<tt>client_secret_expires_at</tt>, and <tt>registration_access_token</tt> <bcp14>MUST NOT</bcp14> appear.
Other sensitive metadata <bcp14>MUST</bcp14> also be omitted.</t>
      <t>Suppose the CIMD client in the request above publishes a minimal document at
its Client Identifier URL:</t>
      <sourcecode type="json"><![CDATA[
{
  "client_id": "https://app.example/client",
  "client_name": "Example App",
  "redirect_uris": ["https://app.example/callback"]
}
]]></sourcecode>
      <t>The lookup response fills in the values the AS applies to the omitted members:</t>
      <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: max-age=300
Access-Control-Allow-Origin: *

{
  "client_id": "https://app.example/client",
  "client_name": "Example App",
  "redirect_uris": ["https://app.example/callback"],
  "grant_types": ["authorization_code"],
  "response_types": ["code"],
  "token_endpoint_auth_method": "none"
}
]]></sourcecode>
      <t>The <tt>grant_types</tt> and <tt>response_types</tt> values match the <xref target="RFC7591"/> defaults.
<tt>token_endpoint_auth_method</tt> does not: RFC 7591 defaults it to
<tt>client_secret_basic</tt>, a shared-secret method CIMD clients cannot use, so this
AS treats the client as public and applies <tt>none</tt>. A client that applied RFC
7591 defaults to its own document would get this wrong, which is why clients
<bcp14>MUST NOT</bcp14> infer effective values from omitted members.</t>
      <t>Success describes current configuration, not endorsement, user consent, or a
promise of token issuance. The AS <bcp14>MUST</bcp14> independently validate subsequent
requests. Configuration can change between lookup and protocol use.</t>
    </section>
    <section anchor="errors">
      <name>Error Response</name>
      <t>Errors <bcp14>MUST</bcp14> use the JSON representation from RFC 6749 Section 5.2, with required
<tt>error</tt> and optional <tt>error_description</tt> and <tt>error_uri</tt> members, including that
section's syntax restrictions <xref target="RFC6749"/>. Responses <bcp14>MUST</bcp14> use HTTP 400 and
<tt>application/json</tt> unless another HTTP status is specified below.</t>
      <t>The following error codes apply at this endpoint:</t>
      <dl>
        <dt>invalid_request:</dt>
        <dd>
          <t>The request is malformed, including a missing or repeated <tt>client_id</tt>.</t>
        </dd>
        <dt>invalid_client:</dt>
        <dd>
          <t>Configuration is unavailable because the client is unknown, disallowed, or
cannot safely be acknowledged. This reuses the RFC 6749 error name for this
endpoint; it does not indicate a failed authentication attempt.</t>
        </dd>
        <dt>invalid_client_metadata:</dt>
        <dd>
          <t>Client metadata could not be retrieved or accepted, including an unreachable
CIMD URL, malformed document, identifier mismatch, or unacceptable value.
This extends the use of the error name defined by <xref target="RFC7591"/> to this endpoint.</t>
        </dd>
      </dl>
      <t>Unknown, disallowed, and non-disclosable clients <bcp14>MUST</bcp14> receive indistinguishable
<tt>invalid_client</tt> responses.</t>
      <t>A Client ID Metadata Document is public and its Client Identifier URL is
self-asserted, so explaining why the AS rejected the document discloses little
the requester could not already see. When the AS rejects a CIMD client's
document, it <bcp14>SHOULD</bcp14> return <tt>invalid_client_metadata</tt> with an <tt>error_description</tt>
identifying the failing member or check. For other clients, metadata
diagnostics <bcp14>MAY</bcp14> be returned only when safe for an unauthenticated requester;
otherwise the AS <bcp14>MUST</bcp14> return <tt>invalid_client</tt> without explanatory detail.</t>
      <t>For example, when a CIMD client's document declares a shared-secret
authentication method, which <xref target="I-D.ietf-oauth-client-id-metadata-document"/>
does not permit:</t>
      <sourcecode type="http-message"><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
Access-Control-Allow-Origin: *

{
  "error": "invalid_client_metadata",
  "error_description":
    "token_endpoint_auth_method client_secret_basic not permitted"
}
]]></sourcecode>
    </section>
    <section anchor="caching">
      <name>Caching</name>
      <t>Following the CIMD caching model, successful lookup responses <bcp14>MAY</bcp14> be cached.
The AS <bcp14>SHOULD</bcp14> provide HTTP cache headers <xref target="RFC9111"/> reflecting source
freshness and configuration policy; it <bcp14>MUST NOT</bcp14> blindly copy a source CIMD's
cache headers.</t>
      <t>Clients <bcp14>MUST NOT</bcp14> cache errors or invalid or malformed responses. The AS <bcp14>MUST</bcp14>
send <tt>Cache-Control: no-store</tt> on errors.</t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>TODO!</t>
    </section>
    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>TODO!</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests the following registration in the OAuth Authorization
Server Metadata registry established by <xref target="RFC8414"/>:</t>
      <dl>
        <dt>Metadata Name:</dt>
        <dd>
          <t><tt>client_metadata_lookup_endpoint</tt></t>
        </dd>
        <dt>Metadata Description:</dt>
        <dd>
          <t>URL of the client metadata lookup endpoint.</t>
        </dd>
        <dt>Change Controller:</dt>
        <dd>
          <t>IETF</t>
        </dd>
        <dt>Specification Document:</dt>
        <dd>
          <t><xref target="discovery"/> of this document.</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </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="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="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="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9111">
          <front>
            <title>HTTP Caching</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC9700">
          <front>
            <title>Best Current Practice for OAuth 2.0 Security</title>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="A. Labunets" initials="A." surname="Labunets"/>
            <author fullname="D. Fett" initials="D." surname="Fett"/>
            <date month="January" year="2025"/>
            <abstract>
              <t>This document describes best current security practice for OAuth 2.0. It updates and extends the threat model and security advice given in RFCs 6749, 6750, and 6819 to incorporate practical experiences gathered since OAuth 2.0 was published and covers new threats relevant due to the broader application of OAuth 2.0. Further, it deprecates some modes of operation that are deemed less secure or even insecure.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="240"/>
          <seriesInfo name="RFC" value="9700"/>
          <seriesInfo name="DOI" value="10.17487/RFC9700"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-client-id-metadata-document">
          <front>
            <title>OAuth Client ID Metadata Document</title>
            <author fullname="Aaron Parecki" initials="A." surname="Parecki">
              <organization>Okta</organization>
            </author>
            <author fullname="Emelia Smith" initials="E." surname="Smith">
         </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   This specification defines a mechanism through which an OAuth client
   can identify itself to authorization servers, without prior dynamic
   client registration or other existing registration.  This is through
   the usage of a URL as a client_id in an OAuth flow, where the URL
   refers to a document containing the necessary client metadata,
   enabling the authorization server to fetch the metadata about the
   client as needed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-client-id-metadata-document-02"/>
        </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="RFC7592">
          <front>
            <title>OAuth 2.0 Dynamic Client Registration Management 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"/>
            <date month="July" year="2015"/>
            <abstract>
              <t>This specification defines methods for management of OAuth 2.0 dynamic client registrations for use cases in which the properties of a registered client may need to be changed during the lifetime of the client. Not all authorization servers supporting dynamic client registration will support these management methods.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7592"/>
          <seriesInfo name="DOI" value="10.17487/RFC7592"/>
        </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="I-D.ietf-oauth-v2-1">
          <front>
            <title>The OAuth 2.1 Authorization Framework</title>
            <author fullname="Dick Hardt" initials="D." surname="Hardt">
              <organization>Hellō</organization>
            </author>
            <author fullname="Aaron Parecki" initials="A." surname="Parecki">
              <organization>Okta</organization>
            </author>
            <author fullname="Torsten Lodderstedt" initials="T." surname="Lodderstedt">
              <organization>SPRIND</organization>
            </author>
            <date day="2" month="September" year="2026"/>
            <abstract>
              <t>   The OAuth 2.1 authorization framework enables an application to
   obtain limited access to a protected resource, either on behalf of a
   resource owner by orchestrating an approval interaction between the
   resource owner and an authorization service, or by allowing the
   application to obtain access on its own behalf.  This specification
   replaces and obsoletes the OAuth 2.0 Authorization Framework
   described in RFC 6749 and the Bearer Token Usage in RFC 6750.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-v2-1-16"/>
        </reference>
        <reference anchor="MCP-Auth" target="https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization">
          <front>
            <title>Model Context Protocol: Authorization</title>
            <author>
              <organization>Model Context Protocol</organization>
            </author>
            <date year="2025" month="November" day="25"/>
          </front>
        </reference>
        <reference anchor="Watson-AS-Metadata" target="https://github.com/njwatson32/as-metadata-client-id/blob/main/draft-watson-oauth-as-metadata-client-id.md">
          <front>
            <title>OAuth Authorization Server Metadata Client ID Parameter</title>
            <author fullname="Nicholas Watson">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 366?>

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

-->

</rfc>
