<?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.21 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-parecki-oauth-client-id-metadata-document-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="Client ID Document">OAuth Client ID Metadata Document</title>
    <seriesInfo name="Internet-Draft" value="draft-parecki-oauth-client-id-metadata-document-02"/>
    <author fullname="Aaron Parecki">
      <organization>Okta</organization>
      <address>
        <email>aaron@parecki.com</email>
        <uri>https://aaronparecki.com</uri>
      </address>
    </author>
    <author fullname="Emelia Smith">
      <organization/>
      <address>
        <email>emelia@brandedcode.com</email>
        <uri>https://thisismissem.social</uri>
      </address>
    </author>
    <date year="2025" month="January" day="10"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>oauth</keyword>
    <abstract>
      <?line 94?>

<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 <tt>client_id</tt> 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>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://aaronpk.github.io/draft-parecki-oauth-client-id-metadata-document/draft-parecki-oauth-client-id-metadata-document.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-parecki-oauth-client-id-metadata-document/"/>.
      </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/draft-parecki-oauth-client-id-metadata-document"/>.</t>
    </note>
  </front>
  <middle>
    <?line 103?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In order for an OAuth 2.0 <xref target="RFC6749"/> client to utilize an OAuth 2.0
authorization server, the client needs to establish a unique identifier, and
needs to to provide the server with metadata about the application, such as the
application name, icon and redirect URIs. In cases where a client is interacting
with authorization servers that it has no relationship with, manual registration
is impossible.</t>
      <t>While Dynamic Client Registration <xref target="RFC7591"/> can provide a method for a
previously unknown client to establish itself at an authorization server and
obtain a client identifier, this is not always practical in some deployments and
can create additional challenges around management of the registration data and
cleanup of inactive clients.</t>
      <t>This specification describes how an OAuth 2.0 client can publish its
own registration information and avoid the need for pre-registering
at each authorization server.</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="client-identifier">
      <name>Client Identifier</name>
      <t>This specification defines the client identifier as a URL with the following
restrictions. Client identifier URLs <bcp14>MUST</bcp14> have an "https" scheme, <bcp14>MUST</bcp14> contain a
path component, <bcp14>MUST NOT</bcp14> contain single-dot or double-dot path segments, <bcp14>MUST
NOT</bcp14> contain a fragment component and <bcp14>MUST NOT</bcp14> contain a username or password
Client identifier URLs <bcp14>SHOULD NOT</bcp14> include a query string component, and <bcp14>MAY</bcp14> contain a port.</t>
      <t>This specification places no restrictions on what URL is used as
a client identifier. A short URL is <bcp14>RECOMMENDED</bcp14>, since the URL may
be displayed to the end user in the authorization interface or in
management interfaces. Usage of a stable URL that does not frequently
change for the client is also <bcp14>RECOMMENDED</bcp14>.</t>
    </section>
    <section anchor="client-information-discovery">
      <name>Client Information Discovery</name>
      <t>One purpose of registering clients at the authorization server is so that
the authorization server has additional information about the client that
can be used during an OAuth flow, such as presenting information about
the client to the user in an authorization consent screen, for example the
client name and logo.</t>
      <t>The authorization server <bcp14>SHOULD</bcp14> fetch the document indicated by the <tt>client_id</tt>
to retrieve the client registration information.</t>
      <section anchor="client-metadata">
        <name>Client Metadata</name>
        <t>The client metadata document URL is a JSON document containing the metadata
of the client. The client metadata values are the values defined in
the OAuth Dynamic Client Registration Metadata OAuth Parameters registry
<eref target="https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml#client-metadata">https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml#client-metadata</eref>.</t>
        <t>The client metadata document <bcp14>MUST</bcp14> contain a <tt>client_id</tt> property whose value
<bcp14>MUST</bcp14> compare and match the URL of the document using simple string comparison as
defined in <xref target="RFC3986"/> Section 6.2.1.</t>
        <t>The client metadata document <bcp14>MAY</bcp14> define additional properties in the response.
The client metadata document <bcp14>MAY</bcp14> also be served with more specific content types
as long as the response is JSON and conforms to <tt>application/&lt;AS-defined&gt;+json</tt>.</t>
        <t>As there is no way to establish a shared secret to be used with client metadata
documents, the following restrictions apply on the contents of the
client metadata document:</t>
        <ul spacing="normal">
          <li>
            <t>the <tt>token_endpoint_auth_method</tt> property <bcp14>MUST NOT</bcp14> include <tt>client_secret_post</tt>
or <tt>client_secret_basic</tt></t>
          </li>
          <li>
            <t>the <tt>client_secret</tt> and <tt>client_secret_expires_at</tt> properties <bcp14>MUST NOT</bcp14> be used</t>
          </li>
        </ul>
        <t>See <xref target="client_authentication"/> for more details.</t>
        <t>Other specifications <bcp14>MAY</bcp14> place additional restrictions on the contents of the
client metadata document accepted by authorization servers implementing their
specification, for instance, preventing the registration of confidential clients
by requiring the <tt>token_endpoint_auth_method</tt> property be set to <tt>"none"</tt>.</t>
        <t>TBD: We may want a property such as <tt>client_id_expires_at</tt> for indicating that the client is ephemeral and not valid after a given timestamp, especially for documents issued by a service for development purposes.</t>
      </section>
      <section anchor="metadata-discovery-errors">
        <name>Metadata Discovery Errors</name>
        <t>If fetching the metadata document fails, the authorization server <bcp14>SHOULD</bcp14> abort the
authorization request.</t>
      </section>
      <section anchor="metadata-caching">
        <name>Metadata Caching</name>
        <t>The authorization server <bcp14>MAY</bcp14> cache the client metadata it discovers at the
client metadata document URL.</t>
        <t>TBD: recommend a cache lifetime? considerations about stale data?</t>
        <t>The authorization server <bcp14>MUST NOT</bcp14> cache error responses. The authorization
server also <bcp14>MUST NOT</bcp14> cache documents which are invalid or malformed.</t>
        <t>TBD: Do we want to define an endpoint through which a document can be validated
by an authorization server, such that a developer can assert that their document
is valid?</t>
      </section>
      <section anchor="redirect-url-registration">
        <name>Redirect URL Registration</name>
        <t>According to <xref target="I-D.draft-ietf-oauth-security-topics"/>, the authorization server
<bcp14>MUST</bcp14> require registration of redirect URIs, and <bcp14>MUST</bcp14> ensure that the redirect URI
in a request is an exact match of a registered redirect URI.</t>
        <t>This method of client information discovery establishes a
registered redirect URI with the authorization server which is used when
comparing the redirect URI in an authorization request against the registered
redirect URIs.</t>
      </section>
    </section>
    <section anchor="as-metadata">
      <name>Authorization Server Metadata</name>
      <t>Authorization servers that publish Authorization Server Metadata <xref target="RFC8414"/> <bcp14>MUST</bcp14> include the following property to signal support for client metadata documents as described in this specification.</t>
      <dl>
        <dt><tt>client_id_metadata_document_supported</tt>:</dt>
        <dd>
          <t><bcp14>OPTIONAL</bcp14>. Boolean value specifying whether the authorization server supports retrieving client metadata from a <tt>client_id</tt> URL as described in this specification.</t>
        </dd>
      </dl>
      <t>This enables clients to avoid sending the user to a dead end, by only redirecting the user to an authorization server that supports this specification. Otherwise, the client would redirect the user and the user would be met with an error about an invalid client as described by Section 4.1.2.1 of <xref target="RFC6749"/>.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>In addition to the security considerations in OAuth 2.0 Core <xref target="RFC6749"/>, and OAuth 2.0 Threat Model and Security Considerations <xref target="RFC6819"/>, and <xref target="I-D.draft-ietf-oauth-security-topics"/> the additional considerations apply.</t>
      <section anchor="documents_for_development">
        <name>Client ID Metadata Documents for Development Purposes</name>
        <t>When developing applications against a service that uses Client ID Metadata Documents, developers often encounter the issue of "how do I serve a Client ID Metadata Document at a https URL whilst developing my application?".</t>
        <t>For this purpose, it is recommended to either host a document on a webserver somewhere that describes the application under development (e.g., using localhost redirect URIs), or to use a service which can generate and host a Client ID Metadata Document for you. Such a service should issue URLs that are stable.</t>
      </section>
      <section anchor="client_authentication">
        <name>Client Authentication</name>
        <t>Since the client establishes its own registration data at the authorization server,
prior coordination of client credentials is not possible. However, clients <bcp14>MAY</bcp14> establish
credentials at the authorization server by using authentication methods that use
public/private key pairs, by publishing the public key in their metadata document.</t>
        <t>For example, the client <bcp14>MAY</bcp14> include the following properties in its metadata document
to establish a public key and the <tt>private_key_jwt</tt> authentication method defined in <xref target="OpenID"/>:</t>
        <artwork><![CDATA[
{
  ...
  "token_endpoint_auth_method": "private_key_jwt",
  "jwks_uri": "https://client.example.com/jwks.json"
  ...
}
]]></artwork>
        <t>This establishes this client as a confidential client, and any communication with
the authorization server <bcp14>MUST</bcp14> include client authentication of the registered type.</t>
      </section>
      <section anchor="oauth-phishing-attacks">
        <name>OAuth Phishing Attacks</name>
        <t>Authorization servers <bcp14>SHOULD</bcp14> fetch the <tt>client_id</tt> metadata document provided in the authorization request in order to provide users with additional information about the request, such as the application name and logo. If the server does not fetch the client metadata document, then it <bcp14>SHOULD</bcp14> take additional measures to ensure the user is provided with as much information as possible about the request.</t>
        <t>The authorization server <bcp14>SHOULD</bcp14> display the hostname of the <tt>client_id</tt> on the authorization interface, in addition to displaying the fetched client information if any. Displaying the hostname helps users know that they are authorizing the expected application.</t>
        <t>If fetching the client metadata document fails for any reason, the <tt>client_id</tt> URL is the only piece of information the user has as an indication of which application they are authorizing.</t>
      </section>
      <section anchor="server-side-request-forgery-ssrf-attacks">
        <name>Server Side Request Forgery (SSRF) Attacks</name>
        <t>Authorization servers fetching the client metadata document and resolving URLs located in the metadata document should be aware of possible SSRF attacks. Authorization servers <bcp14>SHOULD</bcp14> avoid fetching any URLs using private or loopback addresses and consider network policies or other measures to prevent making requests to these addresses. Authorization servers <bcp14>SHOULD</bcp14> also be aware of the possibility that URLs might be non-http-based URI schemes which can lead to other possible SSRF attack vectors.</t>
      </section>
      <section anchor="maximum-response-size-for-client-metadata-documents">
        <name>Maximum Response Size for Client Metadata Documents</name>
        <t>Authorization servers <bcp14>SHOULD</bcp14> limit the response size when fetching the client metadata document, as to avoid denial of service attacks against the authorization server by consuming excessive resources (memory, disk, database). The recommended maximum response size for client metadata documents is 5 kilobytes.</t>
      </section>
      <section anchor="displaying-logos-to-end-users">
        <name>Displaying Logos to End-Users</name>
        <t>Authorization servers that wish to make use of the <tt>logo_uri</tt> property within client metadata document <bcp14>SHOULD</bcp14> prefetch the file at <tt>logo_uri</tt> and cache it for the cache duration of the client metadata document. This allows for moderation tools to verify the file contents (e.g., preventing usage of logos that look like other logos), as well as preventing the logo from being dynamically changed to confuse an end-user.</t>
        <t>Caching of the <tt>logo_uri</tt> response can additionally prevent cross-domain tracking through the <tt>logo_uri</tt> being requested by the client, since the cached file would be served not from the remote URI but instead from a URI that the Authorization server trusts.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="oauth-authorization-server-metadata-registry">
        <name>OAuth Authorization Server Metadata Registry</name>
        <t>The following authorization server metadata value is defined by this specification and registered in the IANA "OAuth Authorization Server Metadata" registry established in OAuth 2.0 Authorization Server Metadata <xref target="RFC8414"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Metadata Name: <tt>client_id_metadata_document_supported</tt>:</t>
          </li>
          <li>
            <t>Metadata Description: JSON boolean value specifying whether the authorization server supports retrieving client metadata from a <tt>client_id</tt> URL.</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document: <xref target="as-metadata"/> of [draft-parecki-oauth-client-id-metadata-document-02]</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="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="RFC6819">
          <front>
            <title>OAuth 2.0 Threat Model and Security Considerations</title>
            <author fullname="T. Lodderstedt" initials="T." role="editor" surname="Lodderstedt"/>
            <author fullname="M. McGloin" initials="M." surname="McGloin"/>
            <author fullname="P. Hunt" initials="P." surname="Hunt"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document gives additional security considerations for OAuth, beyond those in the OAuth 2.0 specification, based on a comprehensive threat model for the OAuth 2.0 protocol. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6819"/>
          <seriesInfo name="DOI" value="10.17487/RFC6819"/>
        </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="I-D.draft-ietf-oauth-security-topics">
          <front>
            <title>OAuth 2.0 Security Best Current Practice</title>
            <author fullname="Torsten Lodderstedt" initials="T." surname="Lodderstedt">
              <organization>SPRIND</organization>
            </author>
            <author fullname="John Bradley" initials="J." surname="Bradley">
              <organization>Yubico</organization>
            </author>
            <author fullname="Andrey Labunets" initials="A." surname="Labunets">
              <organization>Independent Researcher</organization>
            </author>
            <author fullname="Daniel Fett" initials="D." surname="Fett">
              <organization>Authlete</organization>
            </author>
            <date day="3" month="June" year="2024"/>
            <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
   RFC 6749, RFC 6750, and RFC 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="Internet-Draft" value="draft-ietf-oauth-security-topics-29"/>
        </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="IndieAuth" target="https://indieauth.spec.indieweb.org/">
          <front>
            <title>IndieAuth</title>
            <author initials="A." surname="Parecki" fullname="Aaron Parecki">
              <organization/>
            </author>
            <date year="2022" month="February" day="12"/>
          </front>
        </reference>
        <reference anchor="Solid-OIDC" target="https://solidproject.org/TR/2022/oidc-20220328">
          <front>
            <title>Solid-OIDC</title>
            <author initials="A." surname="Coburn" fullname="Aaron Coburn">
              <organization>Inrupt</organization>
            </author>
            <author initials="" surname="elf Pavlik" fullname="elf Pavlik">
              <organization/>
            </author>
            <author initials="D." surname="Zagidulin" fullname="Dmitri Zagidulin">
              <organization/>
            </author>
            <date year="2022" month="March" day="28"/>
          </front>
        </reference>
        <reference anchor="OpenID" target="https://openid.net/specs/openid-connect-core-1_0.html">
          <front>
            <title>OpenID Connect Core 1.0</title>
            <author initials="N." surname="Sakimura" fullname="N. Sakimura">
              <organization>NAT.Consulting</organization>
            </author>
            <author initials="J." surname="Bradley" fullname="J. Bradley">
              <organization>Yubico</organization>
            </author>
            <author initials="M." surname="Jones" fullname="M. Jones">
              <organization>Self-Issued Consulting</organization>
            </author>
            <author initials="B. de" surname="Medeiros" fullname="B. de Medeiros">
              <organization>Google</organization>
            </author>
            <author initials="C." surname="Mortimore" fullname="C. Mortimore">
              <organization>Disney</organization>
            </author>
            <date year="2023" month="December" day="15"/>
          </front>
        </reference>
        <reference anchor="OpenID.Federation" target="https://openid.net/specs/openid-federation-1_0.html">
          <front>
            <title>OpenID Federation 1.0</title>
            <author initials="R." surname="Hedberg" fullname="R. Hedberg">
              <organization>independent</organization>
            </author>
            <author initials="M.B." surname="Jones" fullname="M.B. Jones">
              <organization>Self-Issued Consulting</organization>
            </author>
            <author initials="A.Å." surname="Solberg" fullname="A.Å. Solberg">
              <organization>Sikt</organization>
            </author>
            <author initials="J." surname="Bradley" fullname="J. Bradley">
              <organization>Yubico</organization>
            </author>
            <author initials="G. D." surname="Marco" fullname="G. De Marco">
              <organization>independent</organization>
            </author>
            <author initials="V." surname="Dzhuvinov" fullname="V. Dzhuvinov">
              <organization>Connect2id</organization>
            </author>
            <date year="2024" month="May" day="17"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 311?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The idea of using URIs as the <tt>client_id</tt> in OAuth based authorization requests is not new, and has previously been specified in varying ways by <xref target="IndieAuth"/>, <xref target="Solid-OIDC"/>, and <xref target="OpenID.Federation"/>. This specification is largely inspired by the work of Aaron Coburn, elf Pavlik, and Dmitri Zagidulin in their <xref target="Solid-OIDC"/> specification which defined dereferenceable Client Identifier Documents.</t>
      <t>The authors would like to thank the following people for their contributions and reviews of this specification: Dick Hardt, Matthieu Sieben.</t>
    </section>
    <section numbered="false" anchor="document-history">
      <name>Document History</name>
      <t>(This appendix to be deleted by the RFC editor in the final specification.)</t>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>Added security consideration around displaying logos to end users</t>
        </li>
        <li>
          <t>Changed query string parameters in Client ID Metadata Document URLs to "<bcp14>SHOULD NOT</bcp14>", since this encourages bad security practices (e.g., minting documents based on query string parameters)</t>
        </li>
        <li>
          <t>Added prohibition on the <tt>client_secret_expires_at</tt> property, as it is not relevant for Client ID Metadata Documents.</t>
        </li>
        <li>
          <t>Added security consideration for development use-cases.</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Added recommendation of max metadata document size</t>
        </li>
        <li>
          <t>Changed metadata property reference to IANA registry instead of Dynamic Client Registration</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial draft</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
EmOndDUaNscd9yj6X925OWOYOwAA

-->

</rfc>
