<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" ipr="trust200902" docName="draft-ietf-oauth-step-up-authn-challenge-17" number="9470" submissionType="IETF" category="std" consensus="true" tocInclude="true" symRefs="true" updates="" obsoletes="" xml:lang="en" sortRefs="true" prepTime="2023-09-08T09:31:23" indexInclude="true" scripts="Common,Latin" tocDepth="3">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-oauth-step-up-authn-challenge-17" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9470" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="OAuth Auth Challenge">OAuth 2.0 Step Up Authentication Challenge Protocol</title>
    <seriesInfo name="RFC" value="9470" stream="IETF"/>
    <author initials="V." surname="Bertocci" fullname="Vittorio Bertocci">
      <organization showOnFrontPage="true">Auth0/Okta</organization>
      <address>
        <email>vittorio@auth0.com</email>
      </address>
    </author>
    <author initials="B." surname="Campbell" fullname="Brian Campbell">
      <organization showOnFrontPage="true">Ping Identity</organization>
      <address>
        <email>bcampbell@pingidentity.com</email>
      </address>
    </author>
    <date month="09" year="2023"/>
    <area>sec</area>
    <workgroup>oauth</workgroup>
    <keyword>security</keyword>
    <keyword>oauth2</keyword>
    <keyword>openid connect</keyword>
    <keyword>oauth</keyword>
    <keyword>step up</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">It is not uncommon for resource servers to require different authentication strengths or recentness according to the characteristics of a request. This document introduces a mechanism that resource servers can use to signal to a client that the authentication event associated with the access token of the current request does not meet its authentication requirements and, further, how to meet them.
This document also codifies a mechanism for a client to request that an authorization server achieve a specific authentication strength or recentness when processing an authorization request.</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/rfc9470" 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) 2023 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" keepWithNext="true" 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-protocol-overview">Protocol Overview</xref></t>
          </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-authentication-requirements">Authentication Requirements Challenge</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-authorization-request">Authorization Request</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-authorization-response">Authorization Response</xref></t>
          </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-authentication-information-">Authentication Information Conveyed via Access Token</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-jwt-access-tokens">JWT Access Tokens</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-oauth-20-token-introspectio">OAuth 2.0 Token Introspection</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-authorization-server-metada">Authorization Server Metadata</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-deployment-considerations">Deployment Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="10" format="counter" sectionFormat="of" target="section-10"/>. <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.10.2">
              <li pn="section-toc.1-1.10.2.1">
                <t indent="0" pn="section-toc.1-1.10.2.1.1"><xref derivedContent="10.1" format="counter" sectionFormat="of" target="section-10.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-oauth-extensions-error-regi">OAuth Extensions Error Registration</xref></t>
              </li>
              <li pn="section-toc.1-1.10.2.2">
                <t indent="0" pn="section-toc.1-1.10.2.2.1"><xref derivedContent="10.2" format="counter" sectionFormat="of" target="section-10.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-oauth-token-introspection-r">OAuth Token Introspection Response Registration</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="11" format="counter" sectionFormat="of" target="section-11"/>. <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.11.2">
              <li pn="section-toc.1-1.11.2.1">
                <t indent="0" pn="section-toc.1-1.11.2.1.1"><xref derivedContent="11.1" format="counter" sectionFormat="of" target="section-11.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.11.2.2">
                <t indent="0" pn="section-toc.1-1.11.2.2.1"><xref derivedContent="11.2" format="counter" sectionFormat="of" target="section-11.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.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.13">
            <t indent="0" pn="section-toc.1-1.13.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">In simple API authorization scenarios, an authorization server will determine what authentication technique to use to handle a given request on the basis of aspects such as the scopes requested, the resource, the identity of the client, and other characteristics known at provisioning time.
Although that approach is viable in many situations, it falls short in several important circumstances. Consider, for instance, an eCommerce API requiring different authentication strengths depending on whether the item being purchased exceeds a certain threshold, dynamically estimated by the API itself using a logic that is opaque to the authorization server.
An API might also determine that  a more recent user authentication is required based on its own risk evaluation of the API request.</t>
      <t indent="0" pn="section-1-2">This document extends the collection of error codes defined by <xref target="RFC6750" format="default" sectionFormat="of" derivedContent="RFC6750"/> with a new value, <tt>insufficient_user_authentication</tt>, which can be used by resource servers to signal to the client that the authentication event associated with the access token presented with the request does not meet the authentication requirements of the resource server.
This document also introduces <tt>acr_values</tt> and <tt>max_age</tt> parameters for the <tt>Bearer</tt> authentication scheme challenge defined by <xref target="RFC6750" format="default" sectionFormat="of" derivedContent="RFC6750"/>.  The resource server can use these parameters to explicitly communicate to the client the required authentication strength or recentness.</t>
      <t indent="0" pn="section-1-3">The client can use that information to reach back to the authorization server with an authorization request that specifies the authentication requirements indicated by the protected resource.   This is accomplished by including the <tt>acr_values</tt> or <tt>max_age</tt> authorization request parameters as defined in <xref target="OIDC" format="default" sectionFormat="of" derivedContent="OIDC"/>.</t>
      <t indent="0" pn="section-1-4">Those extensions will make it possible to implement interoperable step up authentication with minimal work from resource servers, clients, and authorization servers.</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 server", "authorization endpoint", "authorization request", "client", "protected resource", and "resource server" defined by "<xref target="RFC6749" format="title" sectionFormat="of" derivedContent="The OAuth 2.0 Authorization Framework"/>" <xref target="RFC6749" format="default" sectionFormat="of" derivedContent="RFC6749"/>.</t>
      </section>
    </section>
    <section anchor="protocol-overview" numbered="true" removeInRFC="false" toc="include" pn="section-2">
      <name slugifiedName="name-protocol-overview">Protocol Overview</name>
      <t indent="0" pn="section-2-1">The following is an end-to-end sequence of a typical step up authentication scenario implemented according to this specification.
The scenario assumes that, before the sequence described below takes place, the client already obtained an access token for the protected resource.</t>
      <figure anchor="abstract-flow" align="left" suppress-title="false" pn="figure-1">
        <name slugifiedName="name-abstract-protocol-flow">Abstract Protocol Flow </name>
        <artwork name="" type="" align="left" alt="" pn="section-2-2.1">
+----------+                                          +--------------+
|          |                                          |              |
|          |-----------(1) request ------------------&gt;|              |
|          |                                          |              |
|          |&lt;---------(2) challenge ------------------|   Resource   |
|          |                                          |    Server    |
|  Client  |                                          |              |
|          |-----------(5) request ------------------&gt;|              |
|          |                                          |              |
|          |&lt;-----(6) protected resource -------------|              |
|          |                                          +--------------+
|          |
|          |
|          |  +-------+                              +---------------+
|          |-&gt;|       |                              |               |
|          |  |       |--(3) authorization request--&gt;|               |
|          |  | User  |                              |               |
|          |  | Agent |&lt;-----------[...]------------&gt;| Authorization |
|          |  |       |                              |     Server    |
|          |&lt;-|       |                              |               |
|          |  +-------+                              |               |
|          |                                         |               |
|          |&lt;-------- (4) access token --------------|               |
|          |                                         |               |
+----------+                                         +---------------+
</artwork>
      </figure>
      <ol spacing="normal" indent="adaptive" start="1" type="1" pn="section-2-3">
<li pn="section-2-3.1" derivedCounter="1.">The client requests a protected resource, presenting an access token.</li>
        <li pn="section-2-3.2" derivedCounter="2.">The resource server determines that the circumstances in which the presented access token was obtained offer insufficient authentication strength and/or recentness; hence, it denies the request and returns a challenge describing (using a combination of <tt>acr_values</tt> and <tt>max_age</tt>) what authentication requirements must be met for the resource server to authorize a request.</li>
        <li pn="section-2-3.3" derivedCounter="3.">The client directs the user agent to the authorization server with an authorization request that includes the <tt>acr_values</tt> and/or <tt>max_age</tt> indicated by the resource server in the previous step.</li>
        <li pn="section-2-3.4" derivedCounter="4.">Whatever sequence required by the grant of choice plays out; this will include the necessary steps to authenticate the user in accordance with the <tt>acr_values</tt> and/or <tt>max_age</tt> values of the authorization request.  Then, the authorization server returns a new access token to the client. The new access token contains or references information about the authentication event.</li>
        <li pn="section-2-3.5" derivedCounter="5.">The client repeats the request from step 1, presenting the newly obtained access token.</li>
        <li pn="section-2-3.6" derivedCounter="6.">The resource server finds that the user authentication performed during the acquisition of the new access token complies with its requirements and returns the representation of the requested protected resource.</li>
      </ol>
      <t indent="0" pn="section-2-4">The validation operations mentioned in steps 2 and 6 imply that the resource server has a way of evaluating the authentication that occurred during the process by which the access token was obtained. In the context of this document, the assessment by the resource server of the specific authentication method used to obtain a token for the requested resource is called an "authentication level". This document will describe how the resource server can perform this assessment of an authentication level when the access token is a JSON Web Token (JWT) <xref target="RFC9068" format="default" sectionFormat="of" derivedContent="RFC9068"/> or is validated via introspection <xref target="RFC7662" format="default" sectionFormat="of" derivedContent="RFC7662"/>. Other methods of determining the authentication level by which the access token was obtained are possible, per agreement by the authorization server and the protected resource, but they are beyond the scope of this specification. Given an authentication level of a token, the resource server determines whether it meets the security criteria for the requested resource.</t>
      <t indent="0" pn="section-2-5">The terms "authentication level" and "step up" are metaphors in this specification. These metaphors do not suggest that there is an absolute hierarchy of authentication methods expressed in interoperable fashion. The notion of a level emerges from the fact that the resource server may only want to accept certain authentication methods. When presented with a token derived from a particular authentication method (i.e., a given authentication level) that it does not want to accept (i.e., below the threshold or level it will accept), the resource server seeks to step up (i.e., renegotiate) from the current authentication level to one that it may accept. The "step up" metaphor is intended to convey a shift from the original authentication level to one that is acceptable to the resource server.</t>
      <t indent="0" pn="section-2-6">Although the case in which the new access token supersedes old tokens by
virtue of a higher authentication level is common, in line with the connotation
of the term "step up authentication", it is important to keep in mind
that this might not necessarily hold true in the general case.  For example, for a particular request, a
resource server might require a higher authentication
level and a shorter validity, resulting in a token suitable for one-off calls
but leading to frequent prompts: hence, offering a suboptimal user experience if the token is reused
for routine operations. In such a scenario, the client would be better served
by keeping both the old tokens, which are associated with a lower authentication level,
and the new one: selecting the appropriate token for each API call. This is
not a new requirement for clients, as incremental consent and least-privilege
principles will require similar heuristics for managing access tokens
associated with different scopes and permission levels. This document does not
recommend any specific token-caching strategy: that choice will be dependent on
the characteristics of every particular scenario and remains
application-dependent as in the core OAuth cases.  Also recall that OAuth 2.0
<xref target="RFC6749" format="default" sectionFormat="of" derivedContent="RFC6749"/> assumes access tokens are treated as opaque by
clients. The token format might be unreadable to the client or might change at
any time to become unreadable. So, during the course of any token-caching
strategy, a client must not attempt to inspect the content of the access token
to determine the associated authentication information or other details (see
<xref target="RFC9068" sectionFormat="of" section="6" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9068#section-6" derivedContent="RFC9068"/> for a more detailed
discussion).</t>
    </section>
    <section anchor="Challenge" numbered="true" removeInRFC="false" toc="include" pn="section-3">
      <name slugifiedName="name-authentication-requirements">Authentication Requirements Challenge</name>
      <t indent="0" pn="section-3-1">This specification introduces a new error code value for the challenge of the <tt>Bearer</tt> authentication scheme's <tt>error</tt> parameter (from <xref target="RFC6750" format="default" sectionFormat="of" derivedContent="RFC6750"/>) and other OAuth authentication schemes, such as those seen in <xref target="RFC9449" format="default" sectionFormat="of" derivedContent="RFC9449"/>, which use the same <tt>error</tt> parameter:</t>
      <dl spacing="normal" indent="3" newline="false" pn="section-3-2">
        <dt pn="section-3-2.1"><tt>insufficient_user_authentication</tt>:</dt>
        <dd pn="section-3-2.2">The authentication event associated with the access token presented with the request does not meet the authentication requirements of the protected resource.</dd>
      </dl>
      <t indent="0" pn="section-3-3">Note: the logic through which the resource server determines that the current request does not meet the authentication requirements of the protected resource, and associated functionality (such as expressing, deploying and publishing such requirements), is out of scope for this document.</t>
      <t indent="0" pn="section-3-4">Furthermore, this specification defines the following <tt>WWW-Authenticate</tt> auth-param values for those OAuth authentication schemes to convey the authentication requirements back to the client.</t>
      <dl spacing="normal" indent="3" newline="false" pn="section-3-5">
        <dt pn="section-3-5.1"><tt>acr_values</tt>:</dt>
        <dd pn="section-3-5.2">A space-separated string listing the authentication context class reference values in order of preference. The protected resource requires one of these values for the authentication event associated with the access token. As defined in Section 1.2 of <xref target="OIDC" format="default" sectionFormat="of" derivedContent="OIDC"/>, the authentication context conveys information about how authentication takes place (e.g., what authentication method(s) or assurance level to meet).</dd>
        <dt pn="section-3-5.3"><tt>max_age</tt>:</dt>
        <dd pn="section-3-5.4">This value indicates the allowable elapsed time in seconds since the last active authentication event associated with the access token. An active authentication event entails a user interacting with the authorization server in response to an authentication prompt. Note that, while the auth-param value can be conveyed as a token or quoted-string (see <xref target="RFC9110" sectionFormat="of" section="11.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9110#section-11.2" derivedContent="RFC9110"/>), it has to represent a non-negative integer.</dd>
      </dl>
      <t indent="0" pn="section-3-6"><xref target="acr-challenge" format="default" sectionFormat="of" derivedContent="Figure 2"/> is an example of a <tt>Bearer</tt> authentication scheme challenge with the <tt>WWW-Authenticate</tt> header using:</t>
      <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-3-7">
        <li pn="section-3-7.1">
  the <tt>insufficient_user_authentication</tt> error code value to inform the client that the access token presented is not sufficient to gain access to the protected resource, and</li>
        <li pn="section-3-7.2">the <tt>acr_values</tt> parameter to let the client know that the expected authentication level corresponds to the authentication context class reference identified by <tt>myACR</tt>.</li>
      </ul>
      <t indent="0" pn="section-3-8">Note that while this specification only defines usage of the above auth-params with the <tt>insufficient_user_authentication</tt> error code, it does not preclude future specifications or profiles from defining their usage with other error codes.</t>
      <figure anchor="acr-challenge" align="left" suppress-title="false" pn="figure-2">
        <name slugifiedName="name-authentication-requirements-">Authentication Requirements Challenge Indicating <tt>acr_values</tt> </name>
        <sourcecode type="http-message" markers="false" pn="section-3-9.1">HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer error="insufficient_user_authentication",
  error_description="A different authentication level is required",
  acr_values="myACR"
</sourcecode>
      </figure>
      <t indent="0" pn="section-3-10">The example in <xref target="age-challenge" format="default" sectionFormat="of" derivedContent="Figure 3"/> shows a challenge informing the client that the last active authentication event associated with the presented access token is too old and a more recent authentication is needed.</t>
      <figure anchor="age-challenge" align="left" suppress-title="false" pn="figure-3">
        <name slugifiedName="name-authentication-requirements-c">Authentication Requirements Challenge Indicating <tt>max_age</tt> </name>
        <sourcecode type="http-message" markers="false" pn="section-3-11.1">HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer error="insufficient_user_authentication",
  error_description="More recent authentication is required",
  max_age="5"
</sourcecode>
      </figure>
      <t indent="0" pn="section-3-12">The auth-params <tt>max_age</tt> and <tt>acr_values</tt> <bcp14>MAY</bcp14> both occur in the same challenge if the resource server needs to express requirements about both recency and authentication level.
If the resource server determines that the request is also lacking the scopes required by the requested resource, it <bcp14>MAY</bcp14> include the <tt>scope</tt> attribute with the value necessary to access the protected resource, as described in <xref target="RFC6750" sectionFormat="of" section="3.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6750#section-3.1" derivedContent="RFC6750"/>.</t>
    </section>
    <section anchor="authorization-request" numbered="true" removeInRFC="false" toc="include" pn="section-4">
      <name slugifiedName="name-authorization-request">Authorization Request</name>
      <t indent="0" pn="section-4-1">A client receiving a challenge from the resource server carrying the <tt>insufficient_user_authentication</tt> error code <bcp14>SHOULD</bcp14> parse the <tt>WWW-Authenticate</tt> header for  <tt>acr_values</tt> and <tt>max_age</tt> and use them, if present, in constructing an authorization request. This request is then conveyed to the authorization server's authorization endpoint via the user agent in order to obtain a new access token complying with the corresponding requirements.
The <tt>acr_values</tt> and <tt>max_age</tt> authorization request parameters are both <bcp14>OPTIONAL</bcp14> parameters defined in Section 3.1.2.1. of <xref target="OIDC" format="default" sectionFormat="of" derivedContent="OIDC"/>. This document does not introduce any changes in the authorization server behavior defined in <xref target="OIDC" format="default" sectionFormat="of" derivedContent="OIDC"/> for processing those parameters; hence, any authorization server implementing OpenID Connect will be able to participate in the flow described here with little or no changes. See <xref target="AuthzResp" format="default" sectionFormat="of" derivedContent="Section 5"/> for more details.</t>
      <t indent="0" pn="section-4-2">The example authorization request URI below, which might be used after receiving the challenge in <xref target="acr-challenge" format="default" sectionFormat="of" derivedContent="Figure 2"/>, indicates to the authorization server that the client would like the authentication to occur according to the authentication context class reference identified by <tt>myACR</tt>.</t>
      <figure align="left" suppress-title="false" pn="figure-4">
        <name slugifiedName="name-authorization-request-indic">Authorization Request Indicating <tt>acr_values</tt>
        </name>
        <artwork align="left" pn="section-4-3.1">https://as.example.net/authorize?client_id=s6BhdRkqt3
&amp;response_type=code&amp;scope=purchase&amp;acr_values=myACR
</artwork>
      </figure>
      <t indent="0" pn="section-4-4">After the challenge in <xref target="age-challenge" format="default" sectionFormat="of" derivedContent="Figure 3"/>, a client might direct the user agent to the following example authorization request URI where the <tt>max_age</tt> parameter indicates to the authorization server that the user-authentication event needs to have occurred no more than five seconds prior.</t>
      <figure align="left" suppress-title="false" pn="figure-5">
        <name slugifiedName="name-authorization-request-indica">Authorization Request Indicating <tt>max_age</tt>
        </name>
        <artwork align="left" pn="section-4-5.1">https://as.example.net/authorize?client_id=s6BhdRkqt3
&amp;response_type=code&amp;scope=purchase&amp;max_age=5
</artwork>
      </figure>
    </section>
    <section anchor="AuthzResp" numbered="true" removeInRFC="false" toc="include" pn="section-5">
      <name slugifiedName="name-authorization-response">Authorization Response</name>
      <t indent="0" pn="section-5-1">Section 5.5.1.1 of <xref target="OIDC" format="default" sectionFormat="of" derivedContent="OIDC"/>  establishes that an authorization server receiving a request containing the <tt>acr_values</tt> parameter <bcp14>MAY</bcp14> attempt to authenticate the user in a manner that satisfies the requested authentication context class reference and include the corresponding value in the <tt>acr</tt> claim in the resulting ID Token. The same section also establishes that, in case the desired authentication level cannot be met, the authorization server <bcp14>SHOULD</bcp14> include a value reflecting the authentication level of the current session (if any) in the <tt>acr</tt> claim. Furthermore, Section 3.1.2.1 <xref target="OIDC" format="default" sectionFormat="of" derivedContent="OIDC"/> states that if a request includes the <tt>max_age</tt> parameter, the authorization server <bcp14>MUST</bcp14> include the <tt>auth_time</tt> claim in the issued ID Token.
An authorization server complying with this specification will react to the presence of the <tt>acr_values</tt> and <tt>max_age</tt> parameters by including <tt>acr</tt> and <tt>auth_time</tt> in the access token (see <xref target="authn-info-in-at" format="default" sectionFormat="of" derivedContent="Section 6"/> for details).
Although <xref target="OIDC" format="default" sectionFormat="of" derivedContent="OIDC"/> leaves the authorization server free to decide how to handle the inclusion of <tt>acr</tt> in the ID Token when requested via <tt>acr_values</tt>, when it comes to access tokens in this specification, the authorization server <bcp14>SHOULD</bcp14> consider the requested acr value as necessary for successfully fulfilling the request.  That is, the requested <tt>acr</tt> value is included in the access token if the authentication operation successfully met its requirements; otherwise,
the authorization request fails and returns an <tt>unmet_authentication_requirements</tt> error as defined in <xref target="OIDCUAR" format="default" sectionFormat="of" derivedContent="OIDCUAR"/>. The recommended behavior will help prevent clients getting stuck in a loop where the authorization server keeps returning tokens that the resource server already identified as not meeting its requirements.</t>
    </section>
    <section anchor="authn-info-in-at" numbered="true" removeInRFC="false" toc="include" pn="section-6">
      <name slugifiedName="name-authentication-information-">Authentication Information Conveyed via Access Token</name>
      <t indent="0" pn="section-6-1">To evaluate whether an access token meets the protected resource's requirements, the resource server needs a way of accessing information about the authentication event by which that access token was obtained. This specification provides guidance on how to convey that information in conjunction with two common access-token-validation methods:</t>
      <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-6-2">
        <li pn="section-6-2.1">the one described in <xref target="RFC9068" format="default" sectionFormat="of" derivedContent="RFC9068"/>, where the access token is encoded in JWT format and verified via a set of validation rules, and</li>
        <li pn="section-6-2.2"> the one described in <xref target="RFC7662" format="default" sectionFormat="of" derivedContent="RFC7662"/>, where the token is validated and decoded by sending it to an introspection endpoint.</li>
      </ul>
      <t indent="0" pn="section-6-3">Authorization servers and resource servers <bcp14>MAY</bcp14> elect to use other encoding and validation methods; however, those are out of scope for this document.</t>
      <section anchor="jwt-access-tokens" numbered="true" removeInRFC="false" toc="include" pn="section-6.1">
        <name slugifiedName="name-jwt-access-tokens">JWT Access Tokens</name>
        <t indent="0" pn="section-6.1-1">When access tokens are represented as JSON Web Tokens (JWTs) <xref target="RFC7519" format="default" sectionFormat="of" derivedContent="RFC7519"/>, the <tt>auth_time</tt> and <tt>acr</tt> claims (per <xref target="RFC9068" sectionFormat="of" section="2.2.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9068#section-2.2.1" derivedContent="RFC9068"/>) are used to convey the time and context of the user-authentication event that the authentication server performed during the course of obtaining the access token. It is useful to bear in mind that the values of those two parameters are established at user-authentication time and will not change in the event of access token renewals. See the aforementioned <xref target="RFC9068" sectionFormat="of" section="2.2.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9068#section-2.2.1" derivedContent="RFC9068"/> for details. The following is a conceptual example showing the decoded content of such a JWT access token.</t>
        <figure align="left" suppress-title="false" pn="figure-6">
          <name slugifiedName="name-decoded-jwt-access-token">Decoded JWT Access Token</name>
          <sourcecode type="json" markers="false" pn="section-6.1-2.1">Header:

{"typ":"at+JWT","alg":"ES256","kid":"LTacESbw"}

Claims:

{
 "iss": "https://as.example.net",
 "sub": "someone@example.net",
 "aud": "https://rs.example.com",
 "exp": 1646343000,
 "iat": 1646340200,
 "jti" : "e1j3V_bKic8-LAEB_lccD0G",
 "client_id": "s6BhdRkqt3",
 "scope": "purchase",
 "auth_time": 1646340198,
 "acr": "myACR"
}
</sourcecode>
        </figure>
      </section>
      <section anchor="introspect" numbered="true" removeInRFC="false" toc="include" pn="section-6.2">
        <name slugifiedName="name-oauth-20-token-introspectio">OAuth 2.0 Token Introspection</name>
        <t indent="0" pn="section-6.2-1">"<xref target="RFC7662" format="title" sectionFormat="of" derivedContent="OAuth 2.0 Token Introspection"/>" <xref target="RFC7662" format="default" sectionFormat="of" derivedContent="RFC7662"/> defines a method for a protected resource to query an authorization server about the active state of an access token as well as to determine metainformation about the token.
The following two top-level introspection response members are defined to convey information about the user-authentication event that the authentication server performed during the course of obtaining the access token.</t>
        <dl spacing="normal" indent="3" newline="false" pn="section-6.2-2">
          <dt pn="section-6.2-2.1"><tt>acr</tt>:</dt>
          <dd pn="section-6.2-2.2">String specifying an authentication context class reference value that identifies the authentication context class that was satisfied by the user-authentication event performed.</dd>
          <dt pn="section-6.2-2.3"><tt>auth_time</tt>:</dt>
          <dd pn="section-6.2-2.4">Time when the user authentication occurred. A JSON numeric value representing the number of seconds from 1970-01-01T00:00:00Z UTC until the date/time of the authentication event.</dd>
        </dl>
        <t indent="0" pn="section-6.2-3">The following example shows an introspection response with information about the user-authentication event by which the access token was obtained.</t>
        <figure align="left" suppress-title="false" pn="figure-7">
          <name slugifiedName="name-introspection-response">Introspection Response</name>
          <sourcecode type="http-message" markers="false" pn="section-6.2-4.1">HTTP/1.1 200 OK
Content-Type: application/json

{
  "active": true,
  "client_id": "s6BhdRkqt3",
  "scope": "purchase",
  "sub": "someone@example.net",
  "aud": "https://rs.example.com",
  "iss": "https://as.example.net",
  "exp": 1639528912,
  "iat": 1618354090,
  "auth_time": 1646340198,
  "acr": "myACR"
}
</sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="ASMetadata" numbered="true" removeInRFC="false" toc="include" pn="section-7">
      <name slugifiedName="name-authorization-server-metada">Authorization Server Metadata</name>
      <t indent="0" pn="section-7-1">Authorization servers can advertise their support of this specification by including in their metadata document, as defined in <xref target="RFC8414" format="default" sectionFormat="of" derivedContent="RFC8414"/>, the value <tt>acr_values_supported</tt>, as defined in Section 3 of <xref target="OIDCDISC" format="default" sectionFormat="of" derivedContent="OIDCDISC"/>. The presence of <tt>acr_values_supported</tt> in the authorization server metadata document signals that the authorization server will understand and honor the <tt>acr_values</tt> and <tt>max_age</tt> parameters in incoming authorization requests.</t>
    </section>
    <section anchor="Deployment" numbered="true" removeInRFC="false" toc="include" pn="section-8">
      <name slugifiedName="name-deployment-considerations">Deployment Considerations</name>
      <t indent="0" pn="section-8-1">This specification facilitates the communication of requirements from a resource server to a client, which, in turn, can enable a smooth step up authentication experience. However, it is important to realize that the user experience achievable in every specific deployment is a function of the policies each resource server and authorization server pair establishes. Imposing constraints on those policies is out of scope for this specification; hence, it is perfectly possible for resource servers and authorization servers to impose requirements that are impossible for users to comply with or that lead to an undesirable user-experience outcome.
The authentication prompts presented by the authorization server as a result of the method of propagating authentication requirements described here might require the user to perform some specific actions such as using multiple devices, having access to devices complying with specific security requirements, and so on. Those extra requirements, that are more concerned with how to comply with a particular requirement rather than indicating the identifier of the requirement itself, are out of scope for this specification.</t>
    </section>
    <section anchor="Security" numbered="true" removeInRFC="false" toc="include" pn="section-9">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-9-1">This specification adds to previously defined OAuth mechanisms.  Their respective security considerations apply:</t>
      <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-9-2">
        <li pn="section-9-2.1">OAuth 2.0 <xref target="RFC6749" format="default" sectionFormat="of" derivedContent="RFC6749"/>,</li>
        <li pn="section-9-2.2">JWT access tokens <xref target="RFC9068" format="default" sectionFormat="of" derivedContent="RFC9068"/>,</li>
        <li pn="section-9-2.3">Bearer <tt>WWW-Authenticate</tt> <xref target="RFC6750" format="default" sectionFormat="of" derivedContent="RFC6750"/>,</li>
        <li pn="section-9-2.4">token introspection <xref target="RFC7662" format="default" sectionFormat="of" derivedContent="RFC7662"/>, and</li>
        <li pn="section-9-2.5">authorization server metadata <xref target="RFC8414" format="default" sectionFormat="of" derivedContent="RFC8414"/>.</li>
      </ul>
      <t indent="0" pn="section-9-3">This document <bcp14>MUST NOT</bcp14> be used to position OAuth as an authentication protocol. For the purposes of this specification, the way in which a user authenticated with the authorization server to obtain an access token is salient information, as a resource server might decide whether to grant access on the basis of how that authentication operation was performed. Nonetheless, this specification does not attempt to define the mechanics by which authentication takes place, relying on a separate authentication layer to take care of the details. In line with other specifications of the OAuth family, this document assumes the existence of a session without going into the details of how it is established or maintained, what protocols are used to implement that layer (e.g., OpenID Connect), and so forth.
Depending on the policies adopted by the resource server, the <tt>acr_values</tt> parameter introduced in <xref target="Challenge" format="default" sectionFormat="of" derivedContent="Section 3"/> might unintentionally disclose information about the authenticated user, the resource itself, the authorization server, and any other context-specific data that an attacker might use to gain knowledge about their target.
For example, a resource server requesting an acr value corresponding to a high level of assurance for some users but not others might identify possible high-privilege users to target with spearhead phishing attacks.
Implementers should use care in determining what to disclose in the challenge and in what circumstances.
The logic examining the incoming access token to determine whether or not a challenge should be returned can be executed either before or after the conventional token-validation logic, be it based on JWT validation, introspection, or any other method. The resource server <bcp14>MAY</bcp14> return a challenge without verifying the client presented a valid token. However, this approach will leak the required properties of an authorization token to an actor who has not proven they can obtain a token for this resource server.</t>
      <t indent="0" pn="section-9-4">As this specification provides a mechanism for the resource server to trigger user interaction, it's important for the authorization server and clients to consider that a malicious resource server might abuse that feature.</t>
    </section>
    <section anchor="IANA" numbered="true" removeInRFC="false" toc="include" pn="section-10">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <section anchor="oauth-extensions-error-registration" numbered="true" removeInRFC="false" toc="include" pn="section-10.1">
        <name slugifiedName="name-oauth-extensions-error-regi">OAuth Extensions Error Registration</name>
        <t indent="0" pn="section-10.1-1">This specification registers the following error value in the "OAuth Extensions Error Registry" <xref target="IANA.OAuth.Params" format="default" sectionFormat="of" derivedContent="IANA.OAuth.Params"/> established by <xref target="RFC6749" format="default" sectionFormat="of" derivedContent="RFC6749"/>.</t>
        <dl spacing="compact" newline="false" indent="3" pn="section-10.1-2">
          <dt pn="section-10.1-2.1">Name:</dt>
          <dd pn="section-10.1-2.2">
            <tt>insufficient_user_authentication</tt></dd>
          <dt pn="section-10.1-2.3">Usage Location:</dt>
          <dd pn="section-10.1-2.4">resource access error response</dd>
          <dt pn="section-10.1-2.5">Protocol Extension:</dt>
          <dd pn="section-10.1-2.6">OAuth 2.0 Step Up Authentication Challenge Protocol</dd>
          <dt pn="section-10.1-2.7">Change controller:</dt>
          <dd pn="section-10.1-2.8">IETF</dd>
          <dt pn="section-10.1-2.9">Specification document(s):</dt>
          <dd pn="section-10.1-2.10">
            <xref target="Challenge" format="default" sectionFormat="of" derivedContent="Section 3"/> of RFC 9470</dd>
        </dl>
      </section>
      <section anchor="oauth-token-introspection-response-registration" numbered="true" removeInRFC="false" toc="include" pn="section-10.2">
        <name slugifiedName="name-oauth-token-introspection-r">OAuth Token Introspection Response Registration</name>
        <t indent="0" pn="section-10.2-1">This specification registers the following values in the "OAuth Token Introspection Response" registry <xref target="IANA.OAuth.Params" format="default" sectionFormat="of" derivedContent="IANA.OAuth.Params"/> established by <xref target="RFC7662" format="default" sectionFormat="of" derivedContent="RFC7662"/>.</t>
        <t indent="0" pn="section-10.2-2">Authentication Context Class Reference:</t>
        <dl spacing="compact" newline="false" indent="3" pn="section-10.2-3">
          <dt pn="section-10.2-3.1">Name:</dt>
          <dd pn="section-10.2-3.2">
            <tt>acr</tt></dd>
          <dt pn="section-10.2-3.3">Description:</dt>
          <dd pn="section-10.2-3.4">Authentication Context Class Reference</dd>
          <dt pn="section-10.2-3.5">Change Controller:</dt>
          <dd pn="section-10.2-3.6">IETF</dd>
          <dt pn="section-10.2-3.7">Specification Document(s):</dt>
          <dd pn="section-10.2-3.8">
            <xref target="introspect" format="default" sectionFormat="of" derivedContent="Section 6.2"/> of RFC 9470</dd>
        </dl>
        <t indent="0" pn="section-10.2-4">Authentication Time:</t>
        <dl spacing="compact" newline="false" indent="3" pn="section-10.2-5">
          <dt pn="section-10.2-5.1">Name:</dt>
          <dd pn="section-10.2-5.2">
            <tt>auth_time</tt></dd>
          <dt pn="section-10.2-5.3">Description:</dt>
          <dd pn="section-10.2-5.4">Time when the user authentication occurred</dd>
          <dt pn="section-10.2-5.5">Change Controller:</dt>
          <dd pn="section-10.2-5.6">IETF</dd>
          <dt pn="section-10.2-5.7">Specification Document(s):</dt>
          <dd pn="section-10.2-5.8">
            <xref target="introspect" format="default" sectionFormat="of" derivedContent="Section 6.2"/> of RFC 9470</dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references pn="section-11">
      <name slugifiedName="name-references">References</name>
      <references pn="section-11.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 fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <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="RFC6749" target="https://www.rfc-editor.org/info/rfc6749" quoteTitle="true" derivedAnchor="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 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="RFC6750" target="https://www.rfc-editor.org/info/rfc6750" quoteTitle="true" derivedAnchor="RFC6750">
          <front>
            <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t indent="0">This specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources. Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6750"/>
          <seriesInfo name="DOI" value="10.17487/RFC6750"/>
        </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 fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <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>
      </references>
      <references pn="section-11.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="IANA.OAuth.Params" target="https://www.iana.org/assignments/oauth-parameters" quoteTitle="true" derivedAnchor="IANA.OAuth.Params">
          <front>
            <title>OAuth Parameters</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="OIDC" target="https://openid.net/specs/openid-connect-core-1_0.html" quoteTitle="true" derivedAnchor="OIDC">
          <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" day="8"/>
          </front>
        </reference>
        <reference anchor="OIDCDISC" target="https://openid.net/specs/openid-connect-discovery-1_0.html" quoteTitle="true" derivedAnchor="OIDCDISC">
          <front>
            <title>OpenID Connect Discovery 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="Edmund Jay" initials="E." surname="Jay">
              <organization showOnFrontPage="true">Illumila</organization>
            </author>
            <date year="2014" month="Nov" day="8"/>
          </front>
        </reference>
        <reference anchor="OIDCUAR" target="https://openid.net/specs/openid-connect-unmet-authentication-requirements-1_0.html" quoteTitle="true" derivedAnchor="OIDCUAR">
          <front>
            <title>OpenID Connect Core Error Code unmet_authentication_requirements</title>
            <author fullname="Torsten Lodderstedt" initials="T." surname="Lodderstedt">
              <organization showOnFrontPage="true">YES</organization>
            </author>
            <date year="2019" month="May" day="8"/>
          </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 fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <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="RFC7662" target="https://www.rfc-editor.org/info/rfc7662" quoteTitle="true" derivedAnchor="RFC7662">
          <front>
            <title>OAuth 2.0 Token Introspection</title>
            <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
            <date month="October" year="2015"/>
            <abstract>
              <t indent="0">This specification defines a method for a protected resource to query an OAuth 2.0 authorization server to determine the active state of an OAuth 2.0 token and to determine meta-information about this token. OAuth 2.0 deployments can use this method to convey information about the authorization context of the token from the authorization server to the protected resource.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7662"/>
          <seriesInfo name="DOI" value="10.17487/RFC7662"/>
        </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 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 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>
        <reference anchor="RFC9068" target="https://www.rfc-editor.org/info/rfc9068" quoteTitle="true" derivedAnchor="RFC9068">
          <front>
            <title>JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens</title>
            <author fullname="V. Bertocci" initials="V." surname="Bertocci"/>
            <date month="October" year="2021"/>
            <abstract>
              <t indent="0">This specification defines a profile for issuing OAuth 2.0 access tokens in JSON Web Token (JWT) format. Authorization servers and resource servers from different vendors can leverage this profile to issue and consume access tokens in an interoperable manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9068"/>
          <seriesInfo name="DOI" value="10.17487/RFC9068"/>
        </reference>
        <reference anchor="RFC9110" target="https://www.rfc-editor.org/info/rfc9110" quoteTitle="true" derivedAnchor="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 indent="0">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 indent="0">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="RFC9449" target="https://www.rfc-editor.org/info/rfc9449" quoteTitle="true" derivedAnchor="RFC9449">
          <front>
            <title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title>
            <author initials="D" surname="Fett" fullname="Daniel Fett">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B" surname="Campbell" fullname="Brian Campbell">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J" surname="Bradley" fullname="John Bradley">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T" surname="Lodderstedt" fullname="Torsten Lodderstedt">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M" surname="Jones" fullname="Michael Jones">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="D" surname="Waite" fullname="David Waite">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2023" month="September"/>
          </front>
          <seriesInfo name="RFC" value="9449"/>
          <seriesInfo name="DOI" value="10.17487/RFC9449"/>
        </reference>
      </references>
    </references>
    <section anchor="Acknowledgements" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">I wanted to thank the Academy, the viewers at home, the shampoo manufacturers, etc.</t>
      <t indent="0" pn="section-appendix.a-2">This specification was developed within the OAuth Working Group under the
chairpersonship of <contact fullname="Rifaat Shekh-Yusef"/> and <contact fullname="Hannes Tschofenig"/> with <contact fullname="Paul Wouters"/> and
<contact fullname="Roman Danyliw"/> serving as Security Area
Directors. Additionally, the following individuals contributed ideas,
feedback, corrections, and wording that helped shape this specification:
<contact fullname="Caleb Baker"/>, <contact fullname="Ivan Kanakarakis"/>,
<contact fullname="Pieter Kasselman"/>, <contact fullname="Aaron Parecki"/>,
<contact fullname="Denis Pinkas"/>, <contact fullname="Dima Postnikov"/>, and
<contact fullname="Filip Skokan"/>.</t>
      <t indent="0" pn="section-appendix.a-3">Some early discussion of the motivations and concepts that precipitated the
initial draft version of this document occurred at the 2021 OAuth Security
Workshop. The authors thank the organizers of the workshop (<contact fullname="Guido Schmitz"/>, <contact fullname="Steinar Noem"/>, and <contact fullname="Daniel Fett"/>) for hosting an event that is conducive to
collaboration and community input.</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="V." surname="Bertocci" fullname="Vittorio Bertocci">
        <organization showOnFrontPage="true">Auth0/Okta</organization>
        <address>
          <email>vittorio@auth0.com</email>
        </address>
      </author>
      <author initials="B." surname="Campbell" fullname="Brian Campbell">
        <organization showOnFrontPage="true">Ping Identity</organization>
        <address>
          <email>bcampbell@pingidentity.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
