<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-oauth-iss-auth-resp-05" indexInclude="true" ipr="trust200902" number="9207" prepTime="2022-03-18T16:22:35" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-oauth-iss-auth-resp-05" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9207" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="OAuth 2.0 Auth Server ID">OAuth 2.0 Authorization Server Issuer Identification</title>
    <seriesInfo name="RFC" value="9207" stream="IETF"/>
    <author initials="K." surname="Meyer zu Selhausen" fullname="Karsten Meyer zu Selhausen">
      <organization showOnFrontPage="true">Hackmanit</organization>
      <address>
        <postal>
          <street/>
        </postal>
        <email>karsten.meyerzuselhausen@hackmanit.de</email>
      </address>
    </author>
    <author initials="D." surname="Fett" fullname="Daniel Fett">
      <organization showOnFrontPage="true">yes.com</organization>
      <address>
        <postal>
          <street/>
        </postal>
        <email>mail@danielfett.de</email>
      </address>
    </author>
    <date month="03" year="2022"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>security</keyword>
    <keyword>oauth2</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">This document specifies a new parameter called <tt>iss</tt>. This parameter is used to explicitly include the issuer identifier of the authorization server in the authorization response of an OAuth authorization flow. The <tt>iss</tt> parameter serves as an effective countermeasure to "mix-up attacks".</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9207" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2022 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-conventions-and-terminology">Conventions and Terminology</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-response-parameter-iss">Response Parameter <tt>iss</tt></xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2">
              <li pn="section-toc.1-1.2.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.2.1.1"><xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-example-authorization-respo">Example Authorization Response</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.2">
                <t indent="0" pn="section-toc.1-1.2.2.2.1"><xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-example-error-response">Example Error Response</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.3">
                <t indent="0" pn="section-toc.1-1.2.2.3.1"><xref derivedContent="2.3" format="counter" sectionFormat="of" target="section-2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-providing-the-issuer-identi">Providing the Issuer Identifier</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.4">
                <t indent="0" pn="section-toc.1-1.2.2.4.1"><xref derivedContent="2.4" format="counter" sectionFormat="of" target="section-2.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-validating-the-issuer-ident">Validating the Issuer Identifier</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-authorization-server-metada">Authorization Server Metadata</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-oauth-authorization-server-">OAuth Authorization Server Metadata</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-oauth-parameters-registrati">OAuth Parameters Registration</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.2">
                <t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="Introduction" numbered="true" removeInRFC="false" toc="include" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">The OAuth 2.0 Authorization Framework <xref target="RFC6749" format="default" sectionFormat="of" derivedContent="RFC6749"/> allows clients to interact with multiple independent authorization servers under the control of separate entities.
Some OAuth grant types utilize the resource owner's user agent to deliver the authorization server's response to the OAuth client. One example of this pattern is the authorization response of the authorization code grant.</t>
      <t indent="0" pn="section-1-2">The authorization response as specified in <xref target="RFC6749" section="4.1.2" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6749#section-4.1.2" derivedContent="RFC6749"/> does not contain any information about the identity of the authorization server that issued the response.
Therefore, clients receiving a response from the resource owner's user agent cannot be sure who initially issued the response and the secrets contained therein. The lack of certainty about the origin of the response enables a class of attacks called "mix-up attacks".</t>
      <t indent="0" pn="section-1-3">Mix-up attacks are a potential threat to all OAuth clients that interact with multiple authorization servers. When at least one of these authorization servers is under an attacker's control, the attacker can launch a mix-up attack to acquire authorization codes or access tokens issued by any one of the other authorization servers. There are multiple ways in which an attacker can gain control over an authorization server supported by the client; for instance, an authorization server could become compromised, or the attacker could register their own authorization server, for example, using dynamic client registration <xref target="RFC7591" format="default" sectionFormat="of" derivedContent="RFC7591"/>.</t>
      <t indent="0" pn="section-1-4">OAuth clients that interact with only one authorization server are not vulnerable to mix-up attacks. However, when such clients decide to add support for a second authorization server in the future, they become vulnerable and need to apply countermeasures to mix-up attacks.</t>
      <t indent="0" pn="section-1-5">Mix-up attacks aim to steal an authorization code or access token by tricking the client into sending the authorization code or access token to the attacker instead of the honest authorization or resource server. This marks a severe threat to the confidentiality and integrity of resources whose access is managed with OAuth.
A detailed description and different variants of the mix-up attack class can be found in Section <xref target="I-D.ietf-oauth-security-topics" sectionFormat="bare" section="4.4" format="default" derivedLink="https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics-19#section-4.4" derivedContent="OAUTH-SECURITY-TOPICS"/> of "OAuth 2.0 Security Best Current Practice" <xref target="I-D.ietf-oauth-security-topics" format="default" sectionFormat="of" derivedContent="OAUTH-SECURITY-TOPICS"/> as well as in the original research first highlighting this attack class, "On the security of modern Single Sign-On Protocols: Second-Order Vulnerabilities in OpenID Connect" <xref target="arXiv.1508.04324" format="default" sectionFormat="of" derivedContent="arXiv.1508.04324"/> and "A Comprehensive Formal Security Analysis of OAuth 2.0" <xref target="arXiv.1601.01229" format="default" sectionFormat="of" derivedContent="arXiv.1601.01229"/>.</t>
      <t indent="0" pn="section-1-6">This document defines a new parameter in the authorization response called <tt>iss</tt>. The <tt>iss</tt> parameter allows the authorization server to include its identity in the authorization response explicitly. The client can compare the value of the <tt>iss</tt> parameter to the issuer identifier of the authorization server (e.g., retrieved from its metadata) it believes it is interacting with. The <tt>iss</tt> parameter gives the client certainty about the authorization server's identity and enables it to send credentials such as authorization codes and access tokens only to the intended recipients.</t>
      <t indent="0" pn="section-1-7">The effectiveness of the <tt>iss</tt> parameter against mix-up attacks was analyzed and formally proven in "A Comprehensive Formal Security Analysis of OAuth 2.0" <xref target="arXiv.1601.01229" format="default" sectionFormat="of" derivedContent="arXiv.1601.01229"/>.</t>
      <section anchor="conventions-and-terminology" numbered="true" removeInRFC="false" toc="include" pn="section-1.1">
        <name slugifiedName="name-conventions-and-terminology">Conventions and Terminology</name>
        <t indent="0" pn="section-1.1-1">
    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" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
        </t>
        <t indent="0" pn="section-1.1-2">This specification uses the terms "access token", "authorization code", "authorization code grant", "authorization server", "resource server", "authorization response", "grant type", and "client" defined by the OAuth 2.0 Authorization Framework <xref target="RFC6749" format="default" sectionFormat="of" derivedContent="RFC6749"/>. The term "issuer identifier" is defined by OAuth 2.0 Authorization Server Metadata <xref target="RFC8414" format="default" sectionFormat="of" derivedContent="RFC8414"/>.</t>
      </section>
    </section>
    <section anchor="iss_parameter" numbered="true" removeInRFC="false" toc="include" pn="section-2">
      <name slugifiedName="name-response-parameter-iss">Response Parameter <tt>iss</tt></name>
      <t indent="0" pn="section-2-1">In authorization responses to the client, including error responses, an authorization server supporting this specification <bcp14>MUST</bcp14> indicate its identity by including the <tt>iss</tt> parameter in the response.</t>
      <t indent="0" pn="section-2-2">The <tt>iss</tt> parameter value is the issuer identifier of the authorization server that created the authorization response, as defined in <xref target="RFC8414" format="default" sectionFormat="of" derivedContent="RFC8414"/>. Its value <bcp14>MUST</bcp14> be a URL that uses the "https" scheme without any query or fragment components.</t>
      <section anchor="example-authorization-response" numbered="true" removeInRFC="false" toc="include" pn="section-2.1">
        <name slugifiedName="name-example-authorization-respo">Example Authorization Response</name>
        <t indent="0" pn="section-2.1-1">The following example shows an authorization response from the authorization server whose issuer identifier is <tt>https://honest.as.example</tt> (extra line breaks and indentation are for display purposes only):</t>
        <sourcecode type="http-message" markers="false" pn="section-2.1-2">HTTP/1.1 302 Found
Location: https://client.example/cb?
  code=x1848ZT64p4IirMPT0R-X3141MFPTuBX-VFL_cvaplMH58
  &amp;state=ZWVlNDBlYzA1NjdkMDNhYjg3ZjUxZjAyNGQzMTM2NzI
  &amp;iss=https%3A%2F%2Fhonest.as.example
</sourcecode>
      </section>
      <section anchor="example-error-response" numbered="true" removeInRFC="false" toc="include" pn="section-2.2">
        <name slugifiedName="name-example-error-response">Example Error Response</name>
        <t indent="0" pn="section-2.2-1">The following example shows an error response from the same authorization server (extra line breaks and indentation are for display purposes only):</t>
        <sourcecode type="http-message" markers="false" pn="section-2.2-2">HTTP/1.1 302 Found
Location: https://client.example/cb?
  error=access_denied
  &amp;state=N2JjNGJhY2JiZjRhYzA3MGJkMzNmMDE5OWJhZmJhZjA
  &amp;iss=https%3A%2F%2Fhonest.as.example
</sourcecode>
      </section>
      <section anchor="providing_iss_parameter" numbered="true" removeInRFC="false" toc="include" pn="section-2.3">
        <name slugifiedName="name-providing-the-issuer-identi">Providing the Issuer Identifier</name>
        <t indent="0" pn="section-2.3-1">Authorization servers supporting this specification <bcp14>MUST</bcp14> provide their issuer identifier to enable clients to validate the <tt>iss</tt> parameter effectively.</t>
        <t indent="0" pn="section-2.3-2">For authorization servers publishing metadata according to <xref target="RFC8414" format="default" sectionFormat="of" derivedContent="RFC8414"/>, the following rules apply:</t>
        <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-2.3-3">
          <li pn="section-2.3-3.1">
            <t indent="0" pn="section-2.3-3.1.1">The issuer identifier included in the server's metadata value <tt>issuer</tt> <bcp14>MUST</bcp14> be identical to the <tt>iss</tt> parameter's value.</t>
          </li>
          <li pn="section-2.3-3.2">
            <t indent="0" pn="section-2.3-3.2.1">The server <bcp14>MUST</bcp14> indicate its support for the <tt>iss</tt> parameter by setting the metadata parameter <tt>authorization_response_iss_parameter_supported</tt>, defined in <xref target="as_metadata" format="default" sectionFormat="of" derivedContent="Section 3"/>, to <tt>true</tt>.</t>
          </li>
        </ul>
        <t indent="0" pn="section-2.3-4">Authorization servers <bcp14>MAY</bcp14> additionally provide the issuer identifier to clients by any other mechanism, which is outside of the scope of this specification.</t>
      </section>
      <section anchor="iss_parameter_validation" numbered="true" removeInRFC="false" toc="include" pn="section-2.4">
        <name slugifiedName="name-validating-the-issuer-ident">Validating the Issuer Identifier</name>
        <t indent="0" pn="section-2.4-1">Clients that support this specification <bcp14>MUST</bcp14> extract the value of the <tt>iss</tt> parameter from authorization responses they receive if the parameter is present. Clients <bcp14>MUST</bcp14> then decode the value from its "application/x-www-form-urlencoded" form according to <xref target="RFC6749" sectionFormat="of" section="B" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6749#appendix-B" derivedContent="RFC6749"/> and compare the result to the issuer identifier of the authorization server where the authorization request was sent to. This comparison <bcp14>MUST</bcp14> use simple string comparison as defined in <xref target="RFC3986" sectionFormat="of" section="6.2.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3986#section-6.2.1" derivedContent="RFC3986"/>. If the value does not match the expected issuer identifier, clients <bcp14>MUST</bcp14> reject the authorization response and <bcp14>MUST NOT</bcp14> proceed with the authorization grant. For error responses, clients <bcp14>MUST NOT</bcp14> assume that the error originates from the intended authorization server.</t>
        <t indent="0" pn="section-2.4-2">More precisely, clients that interact with authorization servers supporting OAuth metadata <xref target="RFC8414" format="default" sectionFormat="of" derivedContent="RFC8414"/> <bcp14>MUST</bcp14> compare the <tt>iss</tt> parameter value to the <tt>issuer</tt> value in the server's metadata document. If OAuth metadata is not used, clients <bcp14>MUST</bcp14> use deployment-specific ways (for example, a static configuration) to decide if the returned <tt>iss</tt> value is the expected value in the current flow (see also <xref target="security_considerations" format="default" sectionFormat="of" derivedContent="Section 4"/>).</t>
        <t indent="0" pn="section-2.4-3">If clients interact with both authorization servers supporting this specification and authorization servers not supporting this specification,
clients <bcp14>MUST</bcp14> retain state about whether each
authorization server supports the <tt>iss</tt> parameter.

Clients <bcp14>MUST</bcp14> reject authorization responses without the <tt>iss</tt> parameter from authorization servers that do support the parameter according to the client's configuration. Clients <bcp14>SHOULD</bcp14> discard authorization responses with the <tt>iss</tt> parameter from authorization servers that do not indicate their support for the parameter. However, there might be legitimate authorization servers that provide the <tt>iss</tt> parameter without indicating their support in their metadata. Local policy or configuration can determine whether to accept such responses, and specific guidance is out of scope for this specification.</t>
        <t indent="0" pn="section-2.4-4">In general, clients that support this specification <bcp14>MAY</bcp14> accept authorization responses that do not contain the <tt>iss</tt> parameter or reject them and exclusively support authorization servers that provide the <tt>iss</tt> parameter in the authorization response. Local policy or configuration can determine when to accept such responses, and specific guidance is out of scope for this specification.</t>
        <t indent="0" pn="section-2.4-5">In OpenID Connect <xref target="OIDC.Core" format="default" sectionFormat="of" derivedContent="OIDC.Core"/> flows where an ID Token is returned from the authorization endpoint, the value in the <tt>iss</tt> parameter <bcp14>MUST</bcp14> always be identical to the <tt>iss</tt> claim in the ID Token.</t>
        <t indent="0" pn="section-2.4-6"><xref target="RFC6749" sectionFormat="of" section="4.1.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6749#section-4.1.2" derivedContent="RFC6749"/> already mandates that clients that do not support this specification <bcp14>MUST</bcp14> ignore the unrecognized <tt>iss</tt> parameter.</t>
        <aside pn="section-2.4-7">
          <t indent="0" pn="section-2.4-7.1">Note: The "JWT Secured Authorization Response Mode for OAuth 2.0 (JARM)" <xref target="JARM" format="default" sectionFormat="of" derivedContent="JARM"/> defines a mechanism that conveys all authorization response parameters in a JSON Web Token (JWT). This JWT contains an <tt>iss</tt> claim that provides the same protection if it is validated as described in <xref target="iss_parameter_validation" format="default" sectionFormat="of" derivedContent="Section 2.4"/>. Therefore, an additional <tt>iss</tt> parameter outside the JWT is not necessary when JARM is used.</t>
        </aside>
      </section>
    </section>
    <section anchor="as_metadata" numbered="true" removeInRFC="false" toc="include" pn="section-3">
      <name slugifiedName="name-authorization-server-metada">Authorization Server Metadata</name>
      <t indent="0" pn="section-3-1">The following parameter for the authorization server metadata <xref target="RFC8414" format="default" sectionFormat="of" derivedContent="RFC8414"/> is introduced to signal the authorization server's support for this specification:</t>
      <dl indent="3" newline="false" spacing="normal" pn="section-3-2">
        <dt pn="section-3-2.1"><tt>authorization_response_iss_parameter_supported</tt>:</dt>
        <dd pn="section-3-2.2">
          <t indent="0" pn="section-3-2.2.1">Boolean parameter indicating whether the authorization server provides the <tt>iss</tt> parameter in the authorization response as defined in <xref target="iss_parameter" format="default" sectionFormat="of" derivedContent="Section 2"/>. If omitted, the default value is false.</t>
        </dd>
      </dl>
    </section>
    <section anchor="security_considerations" numbered="true" removeInRFC="false" toc="include" pn="section-4">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-4-1">Clients <bcp14>MUST</bcp14> validate the <tt>iss</tt> parameter precisely as described in <xref target="iss_parameter_validation" format="default" sectionFormat="of" derivedContent="Section 2.4"/> and <bcp14>MUST NOT</bcp14> allow multiple authorization servers to use the same issuer identifier. In particular, when authorization server details can be manually configured in the client, the client <bcp14>MUST</bcp14> ensure that the accepted <tt>iss</tt> values are unique for each authorization server.</t>
      <t indent="0" pn="section-4-2">The <tt>iss</tt> parameter enables a client to decide if an authorization server "expects" to be used in an OAuth flow together with a certain token endpoint and potentially other endpoints, like the userinfo endpoint <xref target="OIDC.Core" format="default" sectionFormat="of" derivedContent="OIDC.Core"/>. When OAuth metadata is used, the <tt>iss</tt> parameter identifies the issuer and therefore the respective OAuth metadata document that points to the other endpoints. When OAuth metadata is not used, the client can use, for example, a statically configured expected <tt>iss</tt> value for each configured authorization server.</t>
      <t indent="0" pn="section-4-3">The issuer identifier contained in the authorization response is not cryptographically protected against tampering. In general, mechanisms such as JWTs (as specified in <xref target="JARM" format="default" sectionFormat="of" derivedContent="JARM"/>) could be used to protect the integrity of the authorization response. However, in mix-up attacks, the client generally receives the authorization response from an uncompromised authorization server. If an attacker can tamper with this authorization response before it is received by the client, the attacker would also have direct access to the authorization code. The attacker does not need to execute a mix-up attack to steal the authorization code. Therefore, integrity protection for the authorization response is not necessary to defend against mix-up attacks.</t>
      <t indent="0" pn="section-4-4">There are also alternative countermeasures to mix-up attacks. When an authorization response already includes an authorization server's issuer identifier by other means and this identifier is checked as laid out in <xref target="iss_parameter_validation" format="default" sectionFormat="of" derivedContent="Section 2.4"/>, the use and verification of the <tt>iss</tt> parameter is not necessary and <bcp14>MAY</bcp14> be omitted.
For example, this is the case when OpenID Connect response types that return an ID Token from the authorization endpoint (e.g., <tt>response_type=code id_token</tt>) or <xref target="JARM" format="default" sectionFormat="of" derivedContent="JARM"/> are used.
However, if a client receives an authorization response that contains multiple issuer identifiers, the client <bcp14>MUST</bcp14> reject the response if these issuer identifiers do not match. The details of alternative countermeasures are outside of the scope of this specification.</t>
      <t indent="0" pn="section-4-5">Mix-up attacks are only relevant to clients that interact with multiple authorization servers. However, clients interacting with only one authorization server might add support for a second authorization server in the future. By supporting multiple authorization servers, they become vulnerable to mix-up attacks and need to apply countermeasures.</t>
    </section>
    <section anchor="iana_considerations" numbered="true" removeInRFC="false" toc="include" pn="section-5">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <section anchor="oauth-authorization-server-metadata" numbered="true" removeInRFC="false" toc="include" pn="section-5.1">
        <name slugifiedName="name-oauth-authorization-server-">OAuth Authorization Server Metadata</name>
        <t indent="0" pn="section-5.1-1">IANA has registered the following value in the "OAuth Authorization Server Metadata" registry of <xref target="IANA.OAuth.Parameters" format="default" sectionFormat="of" derivedContent="IANA.OAuth.Parameters"/> established by <xref target="RFC8414" format="default" sectionFormat="of" derivedContent="RFC8414"/>.</t>
        <dl newline="false" spacing="compact" indent="3" pn="section-5.1-2">
          <dt pn="section-5.1-2.1">Metadata Name:</dt>
          <dd pn="section-5.1-2.2">
            <tt>authorization_response_iss_parameter_supported</tt>
          </dd>
          <dt pn="section-5.1-2.3">Metadata Description:</dt>
          <dd pn="section-5.1-2.4">Boolean value indicating whether the authorization server provides the <tt>iss</tt> parameter in the authorization response.
</dd>
          <dt pn="section-5.1-2.5">Change Controller:</dt>
          <dd pn="section-5.1-2.6">IETF
</dd>
          <dt pn="section-5.1-2.7">Specification Document(s):</dt>
          <dd pn="section-5.1-2.8">
            <xref target="as_metadata" format="default" sectionFormat="of" derivedContent="Section 3"/> of RFC 9207
</dd>
        </dl>
      </section>
      <section anchor="oauth-parameters-registration" numbered="true" removeInRFC="false" toc="include" pn="section-5.2">
        <name slugifiedName="name-oauth-parameters-registrati">OAuth Parameters Registration</name>
        <t indent="0" pn="section-5.2-1">IANA has updated the <tt>iss</tt> entry to appear as follows in the "OAuth Parameters" registry of <xref target="IANA.OAuth.Parameters" format="default" sectionFormat="of" derivedContent="IANA.OAuth.Parameters"/> established by <xref target="RFC6749" format="default" sectionFormat="of" derivedContent="RFC6749"/>.</t>
        <dl newline="false" spacing="compact" indent="3" pn="section-5.2-2">
          <dt pn="section-5.2-2.1">Parameter name:</dt>
          <dd pn="section-5.2-2.2">
            <tt>iss</tt>
          </dd>
          <dt pn="section-5.2-2.3">Parameter usage location:</dt>
          <dd pn="section-5.2-2.4">authorization request, authorization response
</dd>
          <dt pn="section-5.2-2.5">Change Controller:</dt>
          <dd pn="section-5.2-2.6">IETF
</dd>
          <dt pn="section-5.2-2.7">Specification Document(s):</dt>
          <dd pn="section-5.2-2.8">
            <xref target="iss_parameter" format="default" sectionFormat="of" derivedContent="Section 2"/> of RFC 9207, <xref target="RFC9101" format="default" sectionFormat="of" derivedContent="RFC9101"/>, and <xref target="RFC7519" sectionFormat="of" section="4.1.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7519#section-4.1.1" derivedContent="RFC7519"/>.
</dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-oauth-security-topics" to="OAUTH-SECURITY-TOPICS"/>
    <references pn="section-6">
      <name slugifiedName="name-references">References</name>
      <references pn="section-6.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t indent="0">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="RFC3986" target="https://www.rfc-editor.org/info/rfc3986" quoteTitle="true" derivedAnchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author initials="T." surname="Berners-Lee" fullname="T. Berners-Lee">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Fielding" fullname="R. Fielding">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L." surname="Masinter" fullname="L. Masinter">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2005" month="January"/>
            <abstract>
              <t indent="0">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" target="https://www.rfc-editor.org/info/rfc6749" quoteTitle="true" derivedAnchor="RFC6749">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author initials="D." surname="Hardt" fullname="D. Hardt" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2012" month="October"/>
            <abstract>
              <t indent="0">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="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t indent="0">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>
        <reference anchor="RFC8414" target="https://www.rfc-editor.org/info/rfc8414" quoteTitle="true" derivedAnchor="RFC8414">
          <front>
            <title>OAuth 2.0 Authorization Server Metadata</title>
            <author initials="M." surname="Jones" fullname="M. Jones">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="N." surname="Sakimura" fullname="N. Sakimura">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Bradley" fullname="J. Bradley">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="June"/>
            <abstract>
              <t indent="0">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>
      </references>
      <references pn="section-6.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="arXiv.1508.04324" target="https://arxiv.org/abs/1508.04324" quoteTitle="true" derivedAnchor="arXiv.1508.04324">
          <front>
            <title>On the security of modern Single Sign-On Protocols: Second-Order Vulnerabilities in OpenID Connect</title>
            <author fullname="Christian Mainka" initials="C." surname="Mainka">
              <organization showOnFrontPage="true">Ruhr University Bochum</organization>
            </author>
            <author fullname="Vladislav Mladenov" initials="V." surname="Mladenov">
              <organization showOnFrontPage="true">Ruhr University Bochum</organization>
            </author>
            <author fullname="Jörg Schwenk" initials="J." surname="Schwenk">
              <organization showOnFrontPage="true">Ruhr University Bochum</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
        </reference>
        <reference anchor="arXiv.1601.01229" target="https://arxiv.org/abs/1601.01229" quoteTitle="true" derivedAnchor="arXiv.1601.01229">
          <front>
            <title>A Comprehensive Formal Security Analysis of OAuth 2.0</title>
            <author fullname="Daniel Fett" initials="D." surname="Fett">
              <organization showOnFrontPage="true">University of Trier</organization>
            </author>
            <author fullname="Ralf Kuesters" initials="R." surname="Kuesters">
              <organization showOnFrontPage="true">University of Trier</organization>
            </author>
            <author fullname="Guido Schmitz" initials="G." surname="Schmitz">
              <organization showOnFrontPage="true">University of Trier</organization>
            </author>
            <date year="2016" month="January"/>
          </front>
          <seriesInfo name="DOI" value="10.1145/2976749.2978385"/>
        </reference>
        <reference anchor="IANA.OAuth.Parameters" target="https://www.iana.org/assignments/oauth-parameters" quoteTitle="true" derivedAnchor="IANA.OAuth.Parameters">
          <front>
            <title>OAuth Parameters</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="JARM" target="https://openid.net/specs/openid-financial-api-jarm.html" quoteTitle="true" derivedAnchor="JARM">
          <front>
            <title>Financial-grade API: JWT Secured Authorization Response Mode for OAuth 2.0 (JARM)</title>
            <author fullname="Torsten Lodderstedt" initials="T." surname="Lodderstedt">
              <organization showOnFrontPage="true">Yes</organization>
            </author>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization showOnFrontPage="true">Ping</organization>
            </author>
            <date year="2018" month="Oct"/>
          </front>
        </reference>
        <reference anchor="I-D.ietf-oauth-security-topics" quoteTitle="true" target="https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics-19" derivedAnchor="OAUTH-SECURITY-TOPICS">
          <front>
            <title>OAuth 2.0 Security Best Current Practice</title>
            <author fullname="Torsten Lodderstedt">
              <organization showOnFrontPage="true">yes.com</organization>
            </author>
            <author fullname="John Bradley">
              <organization showOnFrontPage="true">Yubico</organization>
            </author>
            <author fullname="Andrey Labunets">
              <organization showOnFrontPage="true">Independent Researcher</organization>
            </author>
            <author fullname="Daniel Fett">
              <organization showOnFrontPage="true">yes.com</organization>
            </author>
            <date month="December" day="16" year="2021"/>
            <abstract>
              <t indent="0">   This document describes best current security practice for OAuth 2.0.
   It updates and extends the OAuth 2.0 Security Threat Model 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.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-security-topics-19"/>
          <format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-oauth-security-topics-19.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="OIDC.Core" target="https://openid.net/specs/openid-connect-core-1_0.html" quoteTitle="true" derivedAnchor="OIDC.Core">
          <front>
            <title>OpenID Connect Core 1.0 incorporating errata set 1</title>
            <author fullname="Nat Sakimura" initials="N." surname="Sakimura">
              <organization showOnFrontPage="true">NRI</organization>
            </author>
            <author fullname="John Bradley" initials="J." surname="Bradley">
              <organization showOnFrontPage="true">Ping Identity</organization>
            </author>
            <author fullname="Mike Jones" initials="M." surname="Jones">
              <organization showOnFrontPage="true">Microsoft</organization>
            </author>
            <author fullname="Breno de Medeiros" initials="B." surname="de Medeiros">
              <organization showOnFrontPage="true">Google</organization>
            </author>
            <author fullname="Chuck Mortimore" initials="C." surname="Mortimore">
              <organization showOnFrontPage="true">Salesforce</organization>
            </author>
            <date year="2014" month="Nov"/>
          </front>
        </reference>
        <reference anchor="RFC7519" target="https://www.rfc-editor.org/info/rfc7519" quoteTitle="true" derivedAnchor="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author initials="M." surname="Jones" fullname="M. Jones">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Bradley" fullname="J. Bradley">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="N." surname="Sakimura" fullname="N. Sakimura">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2015" month="May"/>
            <abstract>
              <t indent="0">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="RFC7591" target="https://www.rfc-editor.org/info/rfc7591" quoteTitle="true" derivedAnchor="RFC7591">
          <front>
            <title>OAuth 2.0 Dynamic Client Registration Protocol</title>
            <author initials="J." surname="Richer" fullname="J. Richer" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Jones" fullname="M. Jones">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Bradley" fullname="J. Bradley">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Machulak" fullname="M. Machulak">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Hunt" fullname="P. Hunt">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2015" month="July"/>
            <abstract>
              <t indent="0">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="RFC9101" target="https://www.rfc-editor.org/info/rfc9101" quoteTitle="true" derivedAnchor="RFC9101">
          <front>
            <title>The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR)</title>
            <author initials="N." surname="Sakimura" fullname="N. Sakimura">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Bradley" fullname="J. Bradley">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Jones" fullname="M. Jones">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2021" month="August"/>
            <abstract>
              <t indent="0">The authorization request in OAuth 2.0 described in RFC 6749 utilizes query parameter serialization, which means that authorization request parameters are encoded in the URI of the request and sent through user agents such as web browsers.  While it is easy to implement, it means that a) the communication through the user agents is not integrity protected and thus, the parameters can be tainted, b) the source of the communication is not authenticated, and c) the communication through the user agents can be monitored.  Because of these weaknesses, several attacks to the protocol have now been put forward.</t>
              <t indent="0">This document introduces the ability to send request parameters in a JSON Web Token (JWT) instead, which allows the request to be signed with JSON Web Signature (JWS) and encrypted with JSON Web Encryption (JWE) so that the integrity, source authentication, and confidentiality properties of the authorization request are attained.  The request can be sent by value or by reference.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9101"/>
          <seriesInfo name="DOI" value="10.17487/RFC9101"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="Acknowledgements" removeInRFC="false" toc="include" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">We would like to thank
<contact fullname="Brian Campbell"/>,
<contact fullname="Roman Danyliw"/>,
<contact fullname="Vladimir Dzhuvinov"/>,
<contact fullname="Joseph Heenan"/>,
<contact fullname="Takahiko Kawasaki"/>,
<contact fullname="Torsten Lodderstedt"/>,
<contact fullname="Christian Mainka"/>,
<contact fullname="Vladislav Mladenov"/>,
<contact fullname="Warren Parad"/>,
<contact fullname="Aaron Parecki"/>,
and
<contact fullname="Rifaat Shekh-Yusef"/>
for their valuable feedback on this document.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author initials="K." surname="Meyer zu Selhausen" fullname="Karsten Meyer zu Selhausen">
        <organization showOnFrontPage="true">Hackmanit</organization>
        <address>
          <postal>
            <street/>
          </postal>
          <email>karsten.meyerzuselhausen@hackmanit.de</email>
        </address>
      </author>
      <author initials="D." surname="Fett" fullname="Daniel Fett">
        <organization showOnFrontPage="true">yes.com</organization>
        <address>
          <postal>
            <street/>
          </postal>
          <email>mail@danielfett.de</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
