<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-oauth-first-party-apps-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="OAuth for First-Party Apps">OAuth 2.0 for First-Party Applications</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-first-party-apps-02"/>
    <author fullname="Aaron Parecki">
      <organization>Okta</organization>
      <address>
        <email>aaron@parecki.com</email>
      </address>
    </author>
    <author fullname="George Fletcher">
      <organization>Capital One Financial</organization>
      <address>
        <email>george.fletcher@capitalone.com</email>
      </address>
    </author>
    <author fullname="Pieter Kasselman">
      <organization>Defakto Security</organization>
      <address>
        <email>pieter@defakto.security</email>
      </address>
    </author>
    <date year="2025" month="October" day="20"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>native apps</keyword>
    <keyword>first-party</keyword>
    <keyword>oauth</keyword>
    <abstract>
      <?line 89?>

<t>This document defines the Authorization Challenge Endpoint, which supports
a first-party client that wants to control the process of
obtaining authorization from the user using a native experience.</t>
      <t>In many cases, this can provide an entirely browserless OAuth 2.0 experience suited for native
applications, only delegating to the browser in unexpected, high risk, or error conditions.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://drafts.oauth.net/oauth-first-party-apps/draft-ietf-oauth-first-party-apps.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-oauth-first-party-apps/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Web Authorization Protocol Working Group mailing list (<eref target="mailto:oauth@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/oauth/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/oauth/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/oauth-wg/oauth-first-party-apps"/>.</t>
    </note>
  </front>
  <middle>
    <?line 99?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document, OAuth for First-Party Apps (FiPA),
extends the OAuth 2.0 Authorization Framework <xref target="RFC6749"/> with
a new endpoint, <tt>authorization_challenge_endpoint</tt>, to support first-party
applications that want to control the process of obtaining authorization from
the user using a native experience.</t>
      <t>The client collects any initial information from the user and POSTs that information
as well as information about the client's request to the Authorization Challenge Endpoint,
and receives either an authorization code or an error code in response. The error code
may indicate that the client can continue to prompt the user for more information,
or can indicate that the client needs to launch a browser to have the user complete
the flow in a browser.</t>
      <t>The Authorization Challenge Endpoint is used to initiate the OAuth flow in place of redirecting
or launching a browser to the authorization endpoint.</t>
      <t>While a fully-delegated approach using the redirect-based Authorization Code grant is generally
preferred, this draft provides a mechanism for the client to directly interact
with the user. This requires a high degree of trust between the authorization server
and the client, as there typically is for first-party applications.
It should only be considered when there are usability
concerns with a redirect-based approach, such as for native mobile or desktop applications.</t>
      <t>This draft also extends the token response (typically for use in response to a refresh token request) and resource server response to allow the authorization server or resource server to indicate that the client should re-request authorization from the user. This can include requesting step-up authentication by including parameters defined in <xref target="RFC9470"/> as well.</t>
      <section anchor="usage-and-applicability">
        <name>Usage and Applicability</name>
        <t>This specification <bcp14>MUST</bcp14> only be used by first-party applications, which is when the authorization server and application are controlled by the same entity and the user understands them both as the same entity.</t>
        <t>This specification <bcp14>MUST NOT</bcp14> be used by third party applications, and the authorization server <bcp14>SHOULD</bcp14> take measures to prevent use by third party applications. (e.g. only enable this grant for certain client IDs, and take measures to authenticate first-party apps when possible, such as by using app attestations as described in <xref target="I-D.ietf-oauth-attestation-based-client-auth"/>.)</t>
        <t>Using this specification in scenarios other than those described will lead to unintended security and privacy problems for users and service providers.</t>
        <t>This specification is designed to be used by first-party native applications, which includes both mobile and desktop applications.</t>
        <t>If you provide multiple apps and expect users to use multiple apps on the same device, there may be better ways of sharing a user's login between the apps other than each app implementing this specification or using an SDK that implements this specification. For example, <xref target="OpenID.Native-SSO"/> provides a mechanism for one app to obtain new tokens by exchanging tokens from another app, without any user interaction. See <xref target="multiple-applications"/> for more details.</t>
      </section>
      <section anchor="limitations-of-this-specification">
        <name>Limitations of this specification</name>
        <t>The scope of this specification is limited to first-party applications. Please review the entirety of <xref target="security-considerations"/>, and when more than one first-party application is supported, <xref target="multiple-applications"/>.</t>
        <t>While this draft provides the framework for a native OAuth experience, each implementation
will need to define the specific behavior that it expects from OAuth clients interacting with the authorization server. While this lack of clearly defining the details would typically lead to less interoperability, it is acceptable in this case since we intend this specification to be deployed in a tightly coupled environment since it is only applicable to first-party applications.</t>
      </section>
      <section anchor="user-experience-considerations">
        <name>User Experience Considerations</name>
        <t>It is important to consider the user experience implications of different authentication challenges as well as the device with which the user is attempting to authorize.</t>
        <t>For example, requesting a user to enter a password on a limited-input device (e.g. TV) creates a lot of user friction while also exposing the user's password to anyone else in the room. On the other hand, using a challenge method that involves, for example, a fingerprint reader on the TV remote allowing for a FIDO2 passkey authentication would be a good experience.</t>
        <t>The Authorization Server <bcp14>SHOULD</bcp14> consider the user's device when presenting authentication challenges and developers <bcp14>SHOULD</bcp14> consider whether the device implementing this specification can provide a good experience for the user. If the combination of user device and authentication challenge methods creates a lot of friction or security risk, consider using a specification like OAuth 2.0 Device Authorization Grant <xref target="RFC8628"/>. If selecting OAuth 2.0 Device Authorization Grant <xref target="RFC8628"/> which uses a cross-device authorization mechanism, please incorporate the security best practices identified in Cross-Device Flows: Security Best Current Practice <xref target="I-D.ietf-oauth-cross-device-security"/>.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<section anchor="terminology">
        <name>Terminology</name>
        <t>This specification uses the terms "Access Token", "Authorization Code",
"Authorization Endpoint", "Authorization Server" (AS), "Client", "Client Authentication",
"Client Identifier", "Client Secret", "Grant Type", "Protected Resource",
"Redirection URI", "Refresh Token", "Resource Owner", "Resource Server" (RS)
and "Token Endpoint" defined by <xref target="RFC6749"/>.</t>
        <t>TODO: Replace RFC6749 references with OAuth 2.1</t>
      </section>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>There are three primary ways this specification extends various parts of an OAuth system.</t>
      <section anchor="initial-authorization-request">
        <name>Initial Authorization Request</name>
        <artwork type="ascii-art"><![CDATA[
                                                +-------------------+
                                                |   Authorization   |
                          (B)Authorization      |      Server       |
             +----------+    Challenge Request  |+-----------------+|
(A)Client+---|  First-  |---------------------->||  Authorization  ||
   Starts|   |  Party   |                       ||   Challenge     ||
   Flow  +-->|  Client  |<----------------------||    Endpoint     ||
             |          | (C)Authorization      ||                 ||
             |          |    Error Response     ||                 ||
             |          |         :             ||                 ||
             |          |         :             ||                 ||
             |          | (D)Authorization      ||                 ||
             |          |    Challenge Request  ||                 ||
             |          |---------------------->||                 ||
             |          |                       ||                 ||
             |          |<----------------------||                 ||
             |          | (E) Authorization     |+-----------------+|
             |          |     Code Response     |                   |
             |          |                       |                   |
             |          |                       |                   |
             |          |                       |                   |
             |          | (F) Token             |                   |
             |          |     Request           |+-----------------+|
             |          |---------------------->||      Token      ||
             |          |                       ||     Endpoint    ||
             |          |<----------------------||                 ||
             |          | (G) Access Token      |+-----------------+|
             |          |                       |                   |
             +----------+                       +-------------------+
]]></artwork>
        <t>Figure: First-Party Client Authorization Code Request</t>
        <ul spacing="normal">
          <li>
            <t>(A) The first-party client starts the flow, by presenting the user with a "sign in" button, or collecting information from the user, such as their email address or username.</t>
          </li>
          <li>
            <t>(B) The client initiates the authorization request by making a POST request to the Authorization Challenge Endpoint, optionally with information collected from the user (e.g. email or username)</t>
          </li>
          <li>
            <t>(C) The authorization server determines whether the information provided to the Authorization Challenge Endpoint is sufficient to grant authorization, and either responds with an authorization code or responds with an error. In this example, it determines that additional information is needed and responds with an error. The error may contain additional information to guide the Client on what information to collect next. This pattern of collecting information, submitting it to the Authorization Challenge Endpoint and then receiving an error or authorization code may repeat several times.</t>
          </li>
          <li>
            <t>(D) The client gathers additional information (e.g. signed passkey challenge, or one-time code from email) and makes a POST request to the Authorization Challenge Endpoint.</t>
          </li>
          <li>
            <t>(E) The Authorization Challenge Endpoint returns an authorization code.</t>
          </li>
          <li>
            <t>(F) The client sends the authorization code received in step (E) to obtain a token from the Token Endpoint.</t>
          </li>
          <li>
            <t>(G) The Authorization Server returns an Access Token from the Token Endpoint.</t>
          </li>
        </ul>
      </section>
      <section anchor="refresh-token-request">
        <name>Refresh Token Request</name>
        <t>When the client uses a refresh token to obtain a new access token, the authorization server <bcp14>MAY</bcp14> respond with an error to indicate that re-authentication of the user is required.</t>
      </section>
      <section anchor="resource-request">
        <name>Resource Request</name>
        <t>When making a resource request to a resource server, the resource server <bcp14>MAY</bcp14> respond with an error according to OAuth 2.0 Step-Up Authentication Challenge Protocol <xref target="RFC9470"/>, indicating that re-authentication of the user is required.</t>
      </section>
    </section>
    <section anchor="protocol-endpoints">
      <name>Protocol Endpoints</name>
      <section anchor="authorization-challenge-endpoint">
        <name>Authorization Challenge Endpoint</name>
        <t>The authorization challenge endpoint is a new endpoint defined by this specification which the first-party application uses to obtain an authorization code.</t>
        <t>The authorization challenge endpoint is an HTTP API at the authorization server that accepts HTTP POST requests with parameters in the HTTP request message body using the <tt>application/x-www-form-urlencoded</tt> format. This format has a character encoding of UTF-8, as described in Appendix B of <xref target="RFC6749"/>. The authorization challenge endpoint URL <bcp14>MUST</bcp14> use the "https" scheme.</t>
        <t>If the authorization server requires client authentication for this client on the Token Endpoint, then the authorization server <bcp14>MUST</bcp14> also require client authentication for this client on the Authorization Challenge Endpoint. See <xref target="client-authentication"/> for more details.</t>
        <t>Authorization servers supporting this specification <bcp14>SHOULD</bcp14> include the URL of their authorization challenge endpoint in their authorization server metadata document <xref target="RFC8414"/> using the <tt>authorization_challenge_endpoint</tt> parameter as defined in <xref target="authorization-server-metadata"/>.</t>
        <t>The endpoint accepts the authorization request parameters defined in <xref target="RFC6749"/> for the authorization endpoint as well
as all applicable extensions defined for the authorization endpoint. Some examples of such extensions include Proof
Key for Code Exchange (PKCE) <xref target="RFC7636"/>, Resource Indicators <xref target="RFC8707"/>, and OpenID Connect <xref target="OpenID"/>. It is
important to note that some extension parameters have meaning in a web context but don't have meaning in a native
mechanism (e.g. <tt>response_mode=query</tt>). It is out of scope as to what the AS does in the case that an extension
defines a parameter that has no meaning in this use case.</t>
        <t>The client initiates the authorization flow with or without information collected from the user (e.g. a signed passkey challenge or MFA code).</t>
        <t>The authorization challenge endpoint response is either an authorization code or an error code, and may also contain an <tt>auth_session</tt> which the client uses on subsequent requests.</t>
        <t>Further communication between the client and authorization server <bcp14>MAY</bcp14> happen at the Authorization Challenge Endpoint or any other proprietary endpoints at the authorization server.</t>
      </section>
      <section anchor="token-endpoint">
        <name>Token endpoint</name>
        <t>The token endpoint is used by the client to obtain an access token by
presenting its authorization grant or refresh token, as described in
Section 3.2 of OAuth 2.0 <xref target="RFC6749"/>.</t>
        <t>This specification extends the token endpoint response to allow the authorization
server to indicate that further authentication of the user is required.</t>
      </section>
    </section>
    <section anchor="authorization-initiation">
      <name>Authorization Initiation</name>
      <t>A client may wish to initiate an authorization flow by first prompting the user for their user identifier or other account information. The authorization challenge endpoint is a new endpoint to collect this login hint and direct the client with the next steps, whether that is to do an MFA flow, or perform an OAuth redirect-based flow.</t>
      <t>In order to preserve the security of this specification, the Authorization Server <bcp14>MUST</bcp14> verify the "first-partyness" of the client before continuing with the authentication flow. Please see <xref target="first-party-applications"/> for additional considerations.</t>
      <section anchor="challenge-request">
        <name>Authorization Challenge Request</name>
        <t>The client makes a request to the authorization challenge endpoint by adding the
following parameters, as well as parameters from any extensions, using the <tt>application/x-www-form-urlencoded</tt>
format with a character encoding of UTF-8 in the HTTP request body:</t>
        <dl>
          <dt>"client_id":</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> if the client is not authenticating with the
authorization server and if no <tt>auth_session</tt> is included.</t>
          </dd>
          <dt>"scope":</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. The OAuth scope defined in <xref target="RFC6749"/>.</t>
          </dd>
          <dt>"auth_session":</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. If the client has previously obtained an auth session, described in <xref target="auth-session"/>.</t>
          </dd>
          <dt>"code_challenge":</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. The code challenge as defined by <xref target="RFC7636"/>.
See <xref target="redirect-to-web"/> for details.</t>
          </dd>
          <dt>"code_challenge_method":</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. The code challenge method as defined by <xref target="RFC7636"/>.
See <xref target="redirect-to-web"/> for details.</t>
          </dd>
        </dl>
        <t>Specific implementations as well as extensions to this specification <bcp14>MAY</bcp14> define additional parameters to be used at this endpoint.</t>
        <t>For example, the client makes the following request to initiate a flow
given the user's phone number, line breaks shown for illustration purposes only:</t>
        <artwork><![CDATA[
POST /authorize-challenge HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

login_hint=%2B1-310-123-4567&scope=profile
&client_id=bb16c14c73415
]]></artwork>
      </section>
      <section anchor="challenge-response">
        <name>Authorization Challenge Response</name>
        <t>The authorization server determines whether the information provided up to this point is sufficient to issue an authorization code, and if so responds with an authorization code. If the information is not sufficient for issuing an authorization code, then the authorization server <bcp14>MUST</bcp14> respond with an error response.</t>
        <section anchor="authorization-code-response">
          <name>Authorization Code Response</name>
          <t>The authorization server issues an authorization code
by creating an HTTP response content using the <tt>application/json</tt>
media type as defined by <xref target="RFC8259"/> with the following parameters
and an HTTP 200 (OK) status code:</t>
          <dl>
            <dt>"authorization_code":</dt>
            <dd>
              <t><bcp14>REQUIRED</bcp14>. The authorization code issued by the authorization server.</t>
            </dd>
          </dl>
          <t>For example,</t>
          <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
  "authorization_code": "uY29tL2F1dGhlbnRpY"
}
]]></artwork>
        </section>
        <section anchor="challenge-error-response">
          <name>Error Response</name>
          <t>If the request contains invalid parameters or incorrect data,
or if the authorization server wishes to interact with the user directly,
the authorization server responds with an HTTP 400 (Bad Request)
status code (unless specified otherwise below) and includes the following
parameters with the response:</t>
          <dl>
            <dt>"error":</dt>
            <dd>
              <t><bcp14>REQUIRED</bcp14>.  A single ASCII <xref target="USASCII"/> error code from the following:
</t>
              <dl>
                <dt>"invalid_request":</dt>
                <dd>
                  <t>The request is missing a required parameter, includes an
unsupported parameter value,
repeats a parameter, includes multiple credentials,
utilizes more than one mechanism for authenticating the
client, or is otherwise malformed.</t>
                </dd>
                <dt>"invalid_client":</dt>
                <dd>
                  <t>Client authentication failed (e.g., unknown client, no
client authentication included, or unsupported
authentication method).  The authorization server <bcp14>MAY</bcp14>
return an HTTP 401 (Unauthorized) status code to indicate
which HTTP authentication schemes are supported.  If the
client attempted to authenticate via the <tt>Authorization</tt>
request header field, the authorization server <bcp14>MUST</bcp14>
respond with an HTTP 401 (Unauthorized) status code and
include the <tt>WWW-Authenticate</tt> response header field
matching the authentication scheme used by the client.</t>
                </dd>
                <dt>"unauthorized_client":</dt>
                <dd>
                  <t>The authenticated client is not authorized to use this
endpoint.</t>
                </dd>
                <dt>"invalid_session":</dt>
                <dd>
                  <t>The provided <tt>auth_session</tt> is
invalid, expired, revoked, or is otherwise invalid.</t>
                </dd>
                <dt>"invalid_scope":</dt>
                <dd>
                  <t>The requested scope is invalid, unknown, malformed, or
exceeds the scope granted by the resource owner.</t>
                </dd>
                <dt>"insufficient_authorization":</dt>
                <dd>
                  <t>The presented authorization is insufficient, and the authorization
server is requesting the client take additional steps to
complete the authorization.</t>
                </dd>
                <dt>"redirect_to_web":</dt>
                <dd>
                  <t>The request is not able to be fulfilled with any further
direct interaction with the user. Instead, the client
should initiate a new authorization code flow so that the
user interacts with the authorization server in a web browser.
See <xref target="redirect-to-web"/> for details.</t>
                </dd>
              </dl>
              <t>Values for the <tt>error</tt> parameter <bcp14>MUST NOT</bcp14> include characters
outside the set %x20-21 / %x23-5B / %x5D-7E.</t>
              <t>The authorization server <bcp14>MAY</bcp14> extend these error codes with custom
messages based on the requirements of the authorization server.</t>
            </dd>
            <dt>"error_description":</dt>
            <dd>
              <t><bcp14>OPTIONAL</bcp14>.  Human-readable ASCII <xref target="USASCII"/> text providing
additional information, used to assist the client developer in
understanding the error that occurred.
Values for the <tt>error_description</tt> parameter <bcp14>MUST NOT</bcp14> include
characters outside the set %x20-21 / %x23-5B / %x5D-7E.</t>
            </dd>
            <dt>"error_uri":</dt>
            <dd>
              <t><bcp14>OPTIONAL</bcp14>.  A URI identifying a human-readable web page with
information about the error, used to provide the client
developer with additional information about the error.
Values for the <tt>error_uri</tt> parameter <bcp14>MUST</bcp14> conform to the
URI-reference syntax and thus <bcp14>MUST NOT</bcp14> include characters
outside the set %x21 / %x23-5B / %x5D-7E.</t>
            </dd>
            <dt>"auth_session":</dt>
            <dd>
              <t><bcp14>OPTIONAL</bcp14>.  The auth session allows the authorization server to
associate subsequent requests by this client with an ongoing
authorization request sequence. The client <bcp14>MUST</bcp14> include
the <tt>auth_session</tt> in follow-up requests to the authorization challenge
endpoint if it receives one along with the error response.</t>
            </dd>
            <dt>"request_uri":</dt>
            <dd>
              <t><bcp14>OPTIONAL</bcp14>.  A request URI as described by <xref target="RFC9126"/> Section 2.2.</t>
            </dd>
            <dt>"expires_in":</dt>
            <dd>
              <t><bcp14>OPTIONAL</bcp14>.  The lifetime of the <tt>request_uri</tt> in seconds, as
described by <xref target="RFC9126"/> Section 2.2.</t>
            </dd>
          </dl>
          <t>This specification requires the authorization server to define new
error codes that relate to the actions the client must take in order
to properly authenticate the user. These new error codes are specific
to the authorization server's implementation of this specification and are
intentionally left out of scope.</t>
          <t>The parameters are included in the content of the HTTP response
using the <tt>application/json</tt> media type as defined by <xref target="RFC7159"/>.  The
parameters are serialized into a JSON structure by adding each
parameter at the highest structure level.  Parameter names and string
values are included as JSON strings.  Numerical values are included
as JSON numbers.  The order of parameters does not matter and can
vary.</t>
          <t>The authorization server <bcp14>MAY</bcp14> define additional parameters in the response
depending on the implementation. The authorization server <bcp14>MAY</bcp14> also define
more specific content types for the error responses as long as the response
is JSON and conforms to <tt>application/&lt;AS-defined&gt;+json</tt>.</t>
          <section anchor="redirect-to-web">
            <name>Redirect to Web Error Response</name>
            <t>The authorization server may choose to interact directly with the user based on a risk
assesment, the introduction of a new authentication method not supported
in the application, or to handle an exception flow like account recovery.
To indicate this error to the client, the authorization server returns an
error response as defined above with the <tt>redirect_to_web</tt> error code.</t>
            <t>In this case, the client is expected to initiate a new OAuth
Authorization Code flow with PKCE according to <xref target="RFC6749"/> and <xref target="RFC7636"/>.</t>
            <t>If the client expects the frequency of this error response to be high,
the client <bcp14>MAY</bcp14> include a PKCE <xref target="RFC7636"/> <tt>code_challenge</tt> in the initial authorization
challenge request. This enables the authorization server to essentially treat
the authorization challenge request as a PAR <xref target="RFC9126"/> request, and
return the <tt>request_uri</tt> and <tt>expires_in</tt> as defined by <xref target="RFC9126"/> in the error response.
The client then uses the <tt>request_uri</tt> value to build an authorization request
as defined in <xref target="RFC9126"/> Section 4.</t>
          </section>
        </section>
      </section>
      <section anchor="intermediate-requests">
        <name>Intermediate Requests</name>
        <t>If the authorization server returns an <tt>insufficient_authorization</tt> error as described
above, this is an indication that there is further information the client
should request from the user, and continue to make requests to the authorization
server until the authorization request is fulfilled and an authorization code returned.</t>
        <t>These intermediate requests are out of scope of this specification, and are expected
to be defined by the authorization server. The format of these requests is not required
to conform to the format of the initial authorization challenge requests
(e.g. the request format may be <tt>application/json</tt> rather than <tt>application/x-www-form-urlencoded</tt>).</t>
        <t>These intermediate requests <bcp14>MAY</bcp14> also be sent to proprietary endpoints at the authorization server
rather than the Authorization Challenge Endpoint.</t>
        <section anchor="auth-session">
          <name>Auth Session</name>
          <t>The <tt>auth_session</tt> is a value that the authorization server issues in order to be able to associate subsequent requests from the same client. It is intended to be analagous to how a browser cookie associates multiple requests by the same browser to the authorization server.</t>
          <t>The <tt>auth_session</tt> value is completely opaque to the client, and as such the authorization server <bcp14>MUST</bcp14> adequately protect the value from inspection by the client, for example by using a random string or using a JWE if the authorization server is not maintaining state on the backend.</t>
          <t>If the client has an <tt>auth_session</tt>, the client <bcp14>MUST</bcp14> include it in future requests to the authorization challenge endpoint. The client <bcp14>MUST</bcp14> store the <tt>auth_session</tt> beyond the issuance of the authorization code to be able to use it in future requests.</t>
          <t>Every response defined by this specification may include a new <tt>auth_session</tt> value. Clients <bcp14>MUST NOT</bcp14> assume that <tt>auth_session</tt> values are static, and <bcp14>MUST</bcp14> be prepared to update the stored <tt>auth_session</tt> value if one is received in a response.</t>
          <t>To mitigate the risk of session hijacking, the 'auth_session' <bcp14>MUST</bcp14> be bound to the device, and the authorization server <bcp14>MUST</bcp14> reject an 'auth_session' if it is presented from a different device than the one it was bound to.</t>
          <t>See <xref target="auth-session-security"/> for additional security considerations.</t>
        </section>
      </section>
    </section>
    <section anchor="token-request">
      <name>Token Request</name>
      <t>The client makes a request to the token endpoint using the authorization code it obtained from the authorization challenge endpoint.</t>
      <t>This specification does not define any additional parameters beyond the token request parameters defined in  Section 4.1.3 of <xref target="RFC6749"/>. However, notably, the <tt>redirect_uri</tt> parameter will not be included in this request, because no <tt>redirect_uri</tt> parameter was included in the authorization request.</t>
      <section anchor="token-endpoint-successful-response">
        <name>Token Endpoint Successful Response</name>
        <t>This specification extends the OAuth 2.0 <xref target="RFC6749"/> token response
defined in Section 5.1 with the additional parameter <tt>auth_session</tt>, defined in <xref target="auth-session"/>.</t>
        <t>An example successful token response is below:</t>
        <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
  "access_token": "2YotnFZFEjr1zCsicMWpAA",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "tGzv3JOkF0XG5Qx2TlKWIA",
  "auth_session": "uY29tL2F1dGhlbnRpY"
}
]]></artwork>
        <t>The response <bcp14>MAY</bcp14> include an <tt>auth_session</tt> parameter which the client is expected to include on any subsequent requests to the authorization challenge endpoint, as described in <xref target="auth-session"/>. The <tt>auth_session</tt> parameter <bcp14>MAY</bcp14> also be included even if the authorization code was obtained through a traditional OAuth authorization code flow rather than the flow defined by this specification.</t>
        <t>Including the <tt>auth_session</tt> parameter in the token response enables flows such as step-up authentication <xref target="RFC9470"/>, so that the authorization server can restore the context of a previous session and prompt only for the needed step-up factors. See <xref target="step-up-sms-example"/> for an example application.</t>
      </section>
      <section anchor="token-endpoint-error-response">
        <name>Token Endpoint Error Response</name>
        <t>Upon any request to the token endpoint, including a request with a valid refresh token,
the authorization server can respond with an authorization challenge instead of a successful access token response.</t>
        <t>An authorization challenge error response is a particular type of
error response as defined in Section 5.2 of OAuth 2.0 <xref target="RFC6749"/> where
the error code is set to the following value:</t>
        <dl>
          <dt>"error": "insufficient_authorization":</dt>
          <dd>
            <t>The presented authorization is insufficient, and the authorization
server is requesting the client take additional steps to
complete the authorization.</t>
          </dd>
        </dl>
        <t>Additionally, the response <bcp14>MAY</bcp14> contain an <tt>auth_session</tt> parameter which the client is expected to include on a subsequent request to the authorization challenge endpoint.</t>
        <dl>
          <dt>"auth_session":</dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>.  The optional auth session value allows the authorization server to
associate subsequent requests by this client with an ongoing
authorization request sequence. The client <bcp14>MUST</bcp14> include
the <tt>auth_session</tt> in follow-up requests to the challenge
endpoint if it receives one along with the error response.</t>
          </dd>
        </dl>
        <t>For example:</t>
        <artwork><![CDATA[
HTTP/1.1 403 Forbidden
Content-Type: application/json
Cache-Control: no-store

{
  "error": "insufficient_authorization",
  "auth_session": "uY29tL2F1dGhlbnRpY"
}
]]></artwork>
      </section>
    </section>
    <section anchor="resource-server-error-response">
      <name>Resource Server Error Response</name>
      <t>Step-Up Authentication <xref target="RFC9470"/> defines new error code values that a resource server can use to tell the client to start a new authorization request including <tt>acr_values</tt> and <tt>max_age</tt> from <xref target="OpenID"/>. Upon receiving this error response, the client starts a new first-party authorization request at the authorization challenge endpoint, and includes the <tt>acr_values</tt>, <tt>max_age</tt> and <tt>scope</tt> that were returned in the error response.</t>
      <t>This specification does not define any new parameters for the resource server error response beyond those defined in <xref target="RFC9470"/> and <xref target="RFC6750"/>.</t>
    </section>
    <section anchor="authorization-server-metadata">
      <name>Authorization Server Metadata</name>
      <t>The following authorization server metadata parameters <xref target="RFC8414"/> are introduced to signal the server's capability and policy with respect to first-party applications.</t>
      <dl>
        <dt>"authorization_challenge_endpoint":</dt>
        <dd>
          <t>The URL of the authorization challenge endpoint at which a client can initiate
an authorization request and eventually obtain an authorization code.</t>
        </dd>
      </dl>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="first-party-applications">
        <name>First-Party Applications</name>
        <t>First-party applications are applications that are controlled by the same entity as the authorization server used by the application, and the user understands them both as the same entity.</t>
        <t>For first-party applications, it is important that the user recognizes the application and authorization server as belonging to the same brand. For example, a bank publishing their own mobile application.</t>
        <t>Because this specification enables a client application to interact directly with the end user, and the application handles sending any information collected from the user to the authorization server, it is expected to be used only for first-party applications when the authorization server also has a high degree of trust of the client.</t>
        <t>This specification is not prescriptive on how the Authorization Server establishes its trust in the first-partyness of the application. For mobile platforms, most support some mechanism for application attestation that can be used to identify the entity that created/signed/uploaded the app to the app store. App attestation can be combined with mechanisms such as Attestation-Based Client Authentication [<xref target="I-D.ietf-oauth-attestation-based-client-auth"/>] or Dynamic Client Registration <xref target="RFC7591"/> to enable strong client authentication in addition to client verification (first-partyness). The exact steps required are out of scope for this specification. Note that applications running inside a browser (e.g. Single Page Apps) context it is much more difficult to verify the first-partyness of the client. Please see <xref target="single-page-apps"/> for additional details.</t>
      </section>
      <section anchor="phishing">
        <name>Phishing</name>
        <t>There are two ways using this specification increases the risk of phishing.</t>
        <ol spacing="normal" type="1"><li>
            <t>Malicious application: With this specification, the client interacts directly with the end user, collecting information provided by the user and sending it to the authorization server. If an attacker impersonates the client and successfully tricks a user into using it, they may not realize they are giving their credentials to the malicious application.</t>
          </li>
          <li>
            <t>User education: In a traditional OAuth deployment using the redirect-based authorization code flow, the user will only ever enter their credentials at the authorization server, and it is straightforward to explain to avoid entering credentials in other "fake" websites. By introducing a new place the user is expected to enter their credentials using this specification, it is more complicated to teach users how to recognize other fake login prompts that might be attempting to steal their credentials.</t>
          </li>
        </ol>
        <t>Because of these risks, the authorization server <bcp14>MAY</bcp14> decide to require that the user go through a redirect-based flow at any stage of the process based on its own risk assessment.</t>
      </section>
      <section anchor="credential-attacks">
        <name>Credential Stuffing Attacks</name>
        <t>The authorization challenge endpoint is capable of directly receiving user credentials and returning authorization codes. This exposes a new vector to perform credential stuffing attacks, if additional measures are not taken to ensure the authenticity of the application.</t>
        <t>An authorization server may already have a combination of built-in or 3rd party security tools in place to monitor and reduce this risk in browser-based authentication flows. Implementors <bcp14>SHOULD</bcp14> consider similar security measures to reduce this risk in the authorization challenge endpoint. Additionally, the attestation APIs <bcp14>SHOULD</bcp14> be used when possible to assert a level of confidence to the authorization server that the request is originating from an application owned by the same party.</t>
      </section>
      <section anchor="client-authentication">
        <name>Client Authentication</name>
        <t>Typically, mobile and desktop applications are considered "public clients" in OAuth, since they cannot be shipped with a statically configured set of client credentials <xref target="RFC8252"/>. Because of this, client impersonation should be a concern of anyone deploying this pattern. Without client authentication, a malicious user or attacker can mimick the requests the application makes to the authorization server, pretending to be the legitimate client.</t>
        <t>Implementers <bcp14>SHOULD</bcp14> consider additional measures to limit the risk of client impersonation, such as using attestation APIs available from the operating system.</t>
      </section>
      <section anchor="sender-constrained-tokens">
        <name>Sender-Constrained Tokens</name>
        <t>Tokens issued in response to an authorization challenge request <bcp14>SHOULD</bcp14> be sender constrained to mitigate the risk of token theft and replay.</t>
        <t>Proof-of-Possession techniques constrain tokens by binding them to a cryptographic key. Whenever the token is presented, it <bcp14>MUST</bcp14> be accompanied by a proof that the client presenting the token also controls the cryptographic key bound to the token. If a proof-of-possession sender constrained token is presented without valid proof of possession of the cryptographic key, it <bcp14>MUST</bcp14> be rejected.</t>
        <section anchor="dpop-demonstrating-proof-of-possession">
          <name>DPoP: Demonstrating Proof-of-Possession</name>
          <t>DPoP <xref target="RFC9449"/> is an application-level mechanism for sender-constraining OAuth <xref target="RFC6749"/> access and refresh tokens. If DPoP is used to sender constrain tokens, the client <bcp14>SHOULD</bcp14> use DPoP for every token request to the Authorization Server and interaction with the Resource Server.</t>
          <t>DPoP includes an optional capability to bind the authorization code to the DPoP key to enable end-to-end binding of the entire authorization flow. Given the back-channel nature of this specification, there are far fewer opportunities for an attacker to access the authorization code and PKCE code verifier compared to the redirect-based Authorization Code Flow. In this specification, the Authorization Code is obtained via a back-channel request. Despite this, omitting Authorization Code binding leaves a gap in the end-to-end protection that DPoP provides, so DPoP Authorization Code binding <bcp14>SHOULD</bcp14> be used.</t>
          <t>The mechanism for Authorization Code binding with DPoP is similar as that defined for Pushed Authorization Requests (PARs) in Section 10.1 of <xref target="RFC9449"/>. In order to bind the Authorization Code with DPoP, the client <bcp14>MUST</bcp14> add the DPoP header to the Authorization Challenge Request. The authorization server <bcp14>MUST</bcp14> check the DPoP proof JWT that was included in the DPoP header as defined in Section 4.3 of <xref target="RFC9449"/>. The authorization server <bcp14>MUST</bcp14> ensure that the same key is used in all subsequent Authorization Challenge Requests and in the eventual token request. The authorization server <bcp14>MUST</bcp14> reject subsequent Authorization Challenge Requests, or the eventual token request, unless a DPoP proof for the same key presented in the original Authorization Challenge Request is provided.</t>
          <t>The above mechanism simplifies the implementation of the client, as it can attach the DPoP header to all requests to the authorization server regardless of the type of request. This mechanism provides a stronger binding than using the <tt>dpop_jkt</tt> parameter, as the DPoP header contains a proof of possession of the private key.</t>
        </section>
        <section anchor="other-proof-of-possession-mechanisms">
          <name>Other Proof of Possession Mechanisms</name>
          <t>It may be possible to use other proof of possession mechanisms to sender constrain access and refresh tokens. Defining these mechanisms are out of scope for this specification.</t>
        </section>
      </section>
      <section anchor="auth-session-security">
        <name>Auth Session</name>
        <section anchor="auth-session-dpop-binding">
          <name>Auth Session DPoP Binding</name>
          <t>If the client and authorization server are using DPoP binding of access tokens and/or authorization codes, then the <tt>auth_session</tt> value <bcp14>SHOULD</bcp14> be protected as well. The authorization server <bcp14>SHOULD</bcp14> associate the <tt>auth_session</tt> value with the DPoP public key. This removes the need for the authorization server to include additional claims in the DPoP proof, while still benefitting from the assurance that the client presenting the proof has control over the DPoP key. To associate the <tt>auth_session</tt> value with the DPoP public key, the authorization server:</t>
          <ul spacing="normal">
            <li>
              <t><bcp14>MUST</bcp14> check that the same DPoP public key is being used when the client presents the DPoP proof.</t>
            </li>
            <li>
              <t><bcp14>MUST</bcp14> verify the DPoP proof to ensure the client controls the corresponding private key whenever the client includes the <tt>auth_session</tt> in an Authorization Challenge Request as described in <xref target="challenge-request"/>.</t>
            </li>
          </ul>
          <t>DPoP binding of the <tt>auth_session</tt> value ensures that the context referenced by the <tt>auth_session</tt> cannot be stolen and reused by another device.</t>
        </section>
        <section anchor="auth-session-lifetime">
          <name>Auth Session Lifetime</name>
          <t>This specification makes no requirements or assumptions on the lifetime of the <tt>auth_session</tt> value. The lifetime and expiration is at the discretion of the authorization server, and the authorization server may choose to invalidate the value for any reason such as scheduled expiration, security events, or revocation events.</t>
          <t>Clients <bcp14>MUST NOT</bcp14> make any assumptions or depend on any particular lifetime of the <tt>auth_session</tt> value.</t>
        </section>
      </section>
      <section anchor="multiple-applications">
        <name>Multiple Applications</name>
        <t>When multiple first-party applications are supported by the AS, then it is important to consider a number of additional risks. These risks fall into two main categories: Experience Risk and Technical Risk which are described below.</t>
        <section anchor="user-experience-risk">
          <name>User Experience Risk</name>
          <t>Any time a user is asked to provide the authentication credentials in user experiences that differ, it has the effect of increasing the likelihood that the user will fall prey to a phishing attack because they are used to entering credentials in different looking experiences. When multiple first-party applications are supported, the implementation <bcp14>MUST</bcp14> ensure the native experience is identical across all the first-party applications.</t>
          <t>Another experience risk is user confusion caused by different looking experiences and behaviors. This can increase the likelihood the user will not complete the authentication experience for the first-party application.</t>
        </section>
        <section anchor="technical-risk">
          <name>Technical Risk</name>
          <t>In addition to the experience risks, multiple implementations in first-party applications increases the risk of an incorrect implementation as well as increasing the attack surface as each implementation may expose its own weaknesses.</t>
        </section>
        <section anchor="mitigation">
          <name>Mitigation</name>
          <t>To address these risks, when multiple first-party applications must be supported, and other methods such as <xref target="OpenID.Native-SSO"/> are not applicable, it is <bcp14>RECOMMENDED</bcp14> that a client-side SDK be used to ensure the implementation is consistent across the different applications and to ensure the user experience is identical for all first-party apps.</t>
        </section>
      </section>
      <section anchor="single-page-apps">
        <name>Single Page Applications</name>
        <t>Single Page Applications (SPA) run in a scripting language inside the context of a browser instance. This environment poses several unique challenges compared to native applications, in particular:</t>
        <ul spacing="normal">
          <li>
            <t>Significant attack vectors due to the possibility of Cross-Site Scripting (XSS) attacks</t>
          </li>
          <li>
            <t>Fewer options to securely attest to the first-partyness of a browser based application</t>
          </li>
        </ul>
        <t>See <xref target="I-D.ietf-oauth-browser-based-apps"/> for a detailed discussion of the risks of XSS attacks in browsers.</t>
        <t>Additionally, the nature of a Single-Page App means the user is already in a browser context, so the user experience cost of doing a full page redirect or a popup window for the traditional OAuth Authorization Code Flow is much less than the cost of doing so in a native application. The complexity and risk of implementing this specification in a browser likely does not outweigh the user experience benefits that would be gained in that context.</t>
        <t>For these reasons, it is <bcp14>NOT RECOMMENDED</bcp14> to use this specification in browser-based applications.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="oauth-parameters-registration">
        <name>OAuth Parameters Registration</name>
        <t>IANA has (TBD) registered the following values in the IANA "OAuth Parameters" registry of <xref target="IANA.oauth-parameters"/> established by <xref target="RFC6749"/>.</t>
        <t><strong>Parameter name</strong>: <tt>auth_session</tt></t>
        <t><strong>Parameter usage location</strong>: token response</t>
        <t><strong>Change Controller</strong>: IETF</t>
        <t><strong>Specification Document</strong>: Section 5.4 of this specification</t>
      </section>
      <section anchor="oauth-server-metadata-registration">
        <name>OAuth Server Metadata Registration</name>
        <t>IANA has (TBD) registered the following values in the IANA "OAuth Authorization Server Metadata" registry of <xref target="IANA.oauth-parameters"/> established by <xref target="RFC8414"/>.</t>
        <t><strong>Metadata Name</strong>: <tt>authorization_challenge_endpoint</tt></t>
        <t><strong>Metadata Description</strong>: URL of the authorization server's authorization challenge endpoint.</t>
        <t><strong>Change Controller</strong>: IESG</t>
        <t><strong>Specification Document</strong>: Section 4.1 of [[ this specification ]]</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC6749">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6749"/>
          <seriesInfo name="DOI" value="10.17487/RFC6749"/>
        </reference>
        <reference anchor="RFC7159">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="March" year="2014"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7159"/>
          <seriesInfo name="DOI" value="10.17487/RFC7159"/>
        </reference>
        <reference anchor="RFC7515">
          <front>
            <title>JSON Web Signature (JWS)</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>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </reference>
        <reference anchor="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>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">
          <front>
            <title>OAuth 2.0 Dynamic Client Registration Protocol</title>
            <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="M. Machulak" initials="M." surname="Machulak"/>
            <author fullname="P. Hunt" initials="P." surname="Hunt"/>
            <date month="July" year="2015"/>
            <abstract>
              <t>This specification defines mechanisms for dynamically registering OAuth 2.0 clients with authorization servers. Registration requests send a set of desired client metadata values to the authorization server. The resulting registration responses return a client identifier to use at the authorization server and the client metadata values registered for the client. The client can then use this registration information to communicate with the authorization server using the OAuth 2.0 protocol. This specification also defines a set of common client metadata fields and values for clients to use during registration.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7591"/>
          <seriesInfo name="DOI" value="10.17487/RFC7591"/>
        </reference>
        <reference anchor="RFC7636">
          <front>
            <title>Proof Key for Code Exchange by OAuth Public Clients</title>
            <author fullname="N. Sakimura" initials="N." role="editor" surname="Sakimura"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Agarwal" initials="N." surname="Agarwal"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>OAuth 2.0 public clients utilizing the Authorization Code Grant are susceptible to the authorization code interception attack. This specification describes the attack as well as a technique to mitigate against the threat through the use of Proof Key for Code Exchange (PKCE, pronounced "pixy").</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7636"/>
          <seriesInfo name="DOI" value="10.17487/RFC7636"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC8414">
          <front>
            <title>OAuth 2.0 Authorization Server Metadata</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <date month="June" year="2018"/>
            <abstract>
              <t>This specification defines a metadata format that an OAuth 2.0 client can use to obtain the information needed to interact with an OAuth 2.0 authorization server, including its endpoint locations and authorization server capabilities.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8414"/>
          <seriesInfo name="DOI" value="10.17487/RFC8414"/>
        </reference>
        <reference anchor="RFC8628">
          <front>
            <title>OAuth 2.0 Device Authorization Grant</title>
            <author fullname="W. Denniss" initials="W." surname="Denniss"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2019"/>
            <abstract>
              <t>The OAuth 2.0 device authorization grant is designed for Internet- connected devices that either lack a browser to perform a user-agent- based authorization or are input constrained to the extent that requiring the user to input text in order to authenticate during the authorization flow is impractical. It enables OAuth clients on such devices (like smart TVs, media consoles, digital picture frames, and printers) to obtain user authorization to access protected resources by using a user agent on a separate device.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8628"/>
          <seriesInfo name="DOI" value="10.17487/RFC8628"/>
        </reference>
        <reference anchor="RFC8707">
          <front>
            <title>Resource Indicators for OAuth 2.0</title>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document specifies an extension to the OAuth 2.0 Authorization Framework defining request parameters that enable a client to explicitly signal to an authorization server about the identity of the protected resource(s) to which it is requesting access.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8707"/>
          <seriesInfo name="DOI" value="10.17487/RFC8707"/>
        </reference>
        <reference anchor="RFC9126">
          <front>
            <title>OAuth 2.0 Pushed Authorization Requests</title>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="D. Tonge" initials="D." surname="Tonge"/>
            <author fullname="F. Skokan" initials="F." surname="Skokan"/>
            <date month="September" year="2021"/>
            <abstract>
              <t>This document defines the pushed authorization request (PAR) endpoint, which allows clients to push the payload of an OAuth 2.0 authorization request to the authorization server via a direct request and provides them with a request URI that is used as reference to the data in a subsequent call to the authorization endpoint.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9126"/>
          <seriesInfo name="DOI" value="10.17487/RFC9126"/>
        </reference>
        <reference anchor="RFC9449">
          <front>
            <title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title>
            <author fullname="D. Fett" initials="D." surname="Fett"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Waite" initials="D." surname="Waite"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>This document describes a mechanism for sender-constraining OAuth 2.0 tokens via a proof-of-possession mechanism on the application level. This mechanism allows for the detection of replay attacks with access and refresh tokens.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9449"/>
          <seriesInfo name="DOI" value="10.17487/RFC9449"/>
        </reference>
        <reference anchor="RFC9470">
          <front>
            <title>OAuth 2.0 Step Up Authentication Challenge Protocol</title>
            <author fullname="V. Bertocci" initials="V." surname="Bertocci"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>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>
          </front>
          <seriesInfo name="RFC" value="9470"/>
          <seriesInfo name="DOI" value="10.17487/RFC9470"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-cross-device-security">
          <front>
            <title>Cross-Device Flows: Security Best Current Practice</title>
            <author fullname="Pieter Kasselman" initials="P." surname="Kasselman">
              <organization>SPIRL</organization>
            </author>
            <author fullname="Daniel Fett" initials="D." surname="Fett">
              <organization>Authlete</organization>
            </author>
            <author fullname="Filip Skokan" initials="F." surname="Skokan">
              <organization>Okta</organization>
            </author>
            <date day="5" month="September" year="2025"/>
            <abstract>
              <t>   This document describes threats against cross-device flows along with
   practical mitigations, protocol selection guidance, and a summary of
   formal analysis results identified as relevant to the security of
   cross-device flows.  It serves as a security guide to system
   designers, architects, product managers, security specialists, fraud
   analysts and engineers implementing cross-device flows.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-cross-device-security-12"/>
        </reference>
        <reference anchor="OpenID.Native-SSO" target="https://openid.net/specs/openid-connect-native-sso-1_0.html">
          <front>
            <title>OpenID Connect Native SSO for Mobile Apps</title>
            <author initials="G." surname="Fletcher">
              <organization/>
            </author>
            <date year="2022" month="November"/>
          </front>
        </reference>
        <reference anchor="OpenID" target="https://openid.net/specs/openid-connect-core-1_0.html">
          <front>
            <title>OpenID Connect Core 1.0</title>
            <author initials="N." surname="Sakimura">
              <organization/>
            </author>
            <author initials="J." surname="Bradley">
              <organization/>
            </author>
            <author initials="M." surname="Jones">
              <organization/>
            </author>
            <author initials="B." surname="de Medeiros">
              <organization/>
            </author>
            <author initials="C." surname="Mortimore">
              <organization/>
            </author>
            <date year="2014" month="November"/>
          </front>
        </reference>
        <reference anchor="IANA.oauth-parameters" target="https://www.iana.org/assignments/oauth-parameters">
          <front>
            <title>OAuth Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.JWT">
          <front>
            <title>*** BROKEN REFERENCE ***</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="USASCII">
          <front>
            <title>Coded Character Set -- 7-bit American Standard Code for Information Interchange, ANSI X3.4</title>
            <author initials="A. N. S." surname="Institute" fullname="American National Standards Institute">
              <organization/>
            </author>
            <date year="1986"/>
          </front>
        </reference>
        <reference anchor="SHS" target="http://dx.doi.org/10.6028/NIST.FIPS.180-4">
          <front>
            <title>"Secure Hash Standard (SHS)", FIPS PUB 180-4, DOI 10.6028/NIST.FIPS.180-4</title>
            <author initials="N. I. of S. and" surname="Technology" fullname="National Institute of Standards and Technology">
              <organization/>
            </author>
            <date year="2015" month="August"/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="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>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="RFC8252">
          <front>
            <title>OAuth 2.0 for Native Apps</title>
            <author fullname="W. Denniss" initials="W." surname="Denniss"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>OAuth 2.0 authorization requests from native apps should only be made through external user-agents, primarily the user's browser. This specification details the security and usability reasons why this is the case and how native apps and authorization servers can implement this best practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="212"/>
          <seriesInfo name="RFC" value="8252"/>
          <seriesInfo name="DOI" value="10.17487/RFC8252"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-browser-based-apps">
          <front>
            <title>OAuth 2.0 for Browser-Based Applications</title>
            <author fullname="Aaron Parecki" initials="A." surname="Parecki">
              <organization>Okta</organization>
            </author>
            <author fullname="Philippe De Ryck" initials="P." surname="De Ryck">
              <organization>Pragmatic Web Security</organization>
            </author>
            <author fullname="David Waite" initials="D." surname="Waite">
              <organization>Ping Identity</organization>
            </author>
            <date day="3" month="July" year="2025"/>
            <abstract>
              <t>   This specification details the threats, attack consequences, security
   considerations and best practices that must be taken into account
   when developing browser-based applications that use OAuth 2.0.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the Web Authorization
   Protocol Working Group mailing list (oauth@ietf.org), which is
   archived at https://mailarchive.ietf.org/arch/browse/oauth/.

   Source for this draft and an issue tracker can be found at
   https://github.com/oauth-wg/oauth-browser-based-apps.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-browser-based-apps-25"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-attestation-based-client-auth">
          <front>
            <title>OAuth 2.0 Attestation-Based Client Authentication</title>
            <author fullname="Tobias Looker" initials="T." surname="Looker">
              <organization>MATTR</organization>
            </author>
            <author fullname="Paul Bastian" initials="P." surname="Bastian">
              <organization>Bundesdruckerei</organization>
            </author>
            <author fullname="Christian Bormann" initials="C." surname="Bormann">
              <organization>SPRIND</organization>
            </author>
            <date day="15" month="September" year="2025"/>
            <abstract>
              <t>   This specification defines an extension to the OAuth 2 protocol as
   defined in [RFC6749] which enables a Client Instance to include a
   key-bound attestation in interactions with an Authorization Server or
   a Resource Server.  This new method enables Client Instances involved
   in a client deployment that is traditionally viewed as a public
   client, to be able to utilize this key-bound attestation to
   authenticate.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-attestation-based-client-auth-07"/>
        </reference>
      </references>
    </references>
    <?line 714?>

<section anchor="example-user-experiences">
      <name>Example User Experiences</name>
      <t>This section provides non-normative examples of how this specification may be used to support specific use cases.</t>
      <section anchor="passkey">
        <name>Passkey</name>
        <t>A user may log in with a passkey (without a password).</t>
        <ol spacing="normal" type="1"><li>
            <t>The Client collects the username from the user.</t>
          </li>
          <li>
            <t>The Client sends an Authorization Challenge Request (<xref target="challenge-request"/>) to the Authorization Challenge Endpoint (<xref target="authorization-challenge-endpoint"/>) including the username.</t>
          </li>
          <li>
            <t>The Authorization Server verifies the username and returns a challenge</t>
          </li>
          <li>
            <t>The Client signs the challenge using the platform authenticator, which results in the user being prompted for verification with biometrics or a PIN.</t>
          </li>
          <li>
            <t>The Client sends the signed challenge, username, and credential ID to the Authorization Challenge Endpoint (<xref target="authorization-challenge-endpoint"/>).</t>
          </li>
          <li>
            <t>The Authorization Server verifies the signed challenge and returns an Authorization Code.</t>
          </li>
          <li>
            <t>The Client requests an Access Token and Refresh Token by issuing a Token Request (<xref target="token-request"/>) to the Token Endpoint.</t>
          </li>
          <li>
            <t>The Authorization Server verifies the Authorization Code and issues the requested tokens.</t>
          </li>
        </ol>
      </section>
      <section anchor="redirect-to-authorization-server">
        <name>Redirect to Authorization Server</name>
        <t>A user may be redirected to the Authorization Server to perfrom an account reset.</t>
        <ol spacing="normal" type="1"><li>
            <t>The Client collects username from the user.</t>
          </li>
          <li>
            <t>The Client sends an Authorization Challenge Request (<xref target="challenge-request"/>) to the Authorization Challenge Endpoint (<xref target="authorization-challenge-endpoint"/>) including the username.</t>
          </li>
          <li>
            <t>The Authorization Server verifies the username and determines that the account is locked and returns a Redirect error response.</t>
          </li>
          <li>
            <t>The Client parses the redirect message, opens a browser and redirects the user to the Authorization Server performing an OAuth 2.0 flow with PKCE.</t>
          </li>
          <li>
            <t>The user resets their account by performing a multi-step authentication flow with the Authorization Server.</t>
          </li>
          <li>
            <t>The Authorization Server issues an Authorization Code in a redirect back to the client, which then exchanges it for an access and refresh token.</t>
          </li>
        </ol>
      </section>
      <section anchor="passwordless-one-time-password-otp">
        <name>Passwordless One-Time Password (OTP)</name>
        <t>In a passwordless One-Time Password (OTP) scheme, the user is in possession of a one-time password generator. This generator may be a hardware device, or implemented as an app on a mobile phone. The user provides a user identifier and one-time password, which is verified by the Authorization Server before it issues an Authorization Code, which can be exchanged for an Access and Refresh Token.</t>
        <ol spacing="normal" type="1"><li>
            <t>The Client collects username and OTP from user.</t>
          </li>
          <li>
            <t>The Client sends an Authorization Challenge Request (<xref target="challenge-request"/>) to the Authorization Challenge Endpoint (<xref target="authorization-challenge-endpoint"/>) including the username and OTP.</t>
          </li>
          <li>
            <t>The Authorization Server verifies the username and OTP and returns an Authorization Code.</t>
          </li>
          <li>
            <t>The Client requests an Access Token and Refresh Token by issuing a Token Request (<xref target="token-request"/>) to the Token Endpoint.</t>
          </li>
          <li>
            <t>The Authorization Server verifies the Authorization Code and issues the requested tokens.</t>
          </li>
        </ol>
      </section>
      <section anchor="e-mail-confirmation-code">
        <name>E-Mail Confirmation Code</name>
        <t>A user may be required to provide an e-mail confirmation code as part of an authentication ceremony to prove they control an e-mail address. The user provides an e-mail address and is then required to enter a verification code sent to the e-mail address. If the correct verification code is returned to the Authorization Server, it issues Access and Refresh Tokens.</t>
        <ol spacing="normal" type="1"><li>
            <t>The Client collects an e-mail address from the user.</t>
          </li>
          <li>
            <t>The Client sends the e-mail address in an Authorization Challenge Request (<xref target="challenge-request"/>) to the Authorization Challenge Endpoint (<xref target="authorization-challenge-endpoint"/>).</t>
          </li>
          <li>
            <t>The Authorization Server sends a verification code to the e-mail address and returns an Error Response (<xref target="challenge-error-response"/>) including <tt>"error": "insufficient_authorization"</tt>, <tt>"auth_session"</tt> and a custom property indicating that an e-mail verification code must be entered.</t>
          </li>
          <li>
            <t>The Client presents a user experience guiding the user to copy the e-mail verification code to the Client. Once the e-mail verification code is entered, the Client sends an Authorization Challenge Request to the Authorization Challenge Endpoint, including the e-mail verification code as well as the <tt>auth_session</tt> parameter returned in the previous Error Response.</t>
          </li>
          <li>
            <t>The Authorization Server uses the <tt>auth_session</tt> to maintain the session and verifies the e-mail verification code before issuing an Authorization Code to the Client.</t>
          </li>
          <li>
            <t>The Client sends the Authorization Code in a Token Request (<xref target="token-request"/>) to the Token Endpoint.</t>
          </li>
          <li>
            <t>The Authorization Server verifies the Authorization Code and issues the Access Token and Refresh Token.</t>
          </li>
        </ol>
        <t>An alternative version of this verification involves the user clicking a link in an email rather than manually entering a verification code. This is typically done for email verification flows rather than inline in a login flow. The protocol-level details remain the same for the alternative flow despite the different user experience. All steps except step 4 above remain the same, but the client presents an alternative user experience for step 4 described below:</t>
        <ul spacing="normal">
          <li>
            <t>The Client presents a message to the user instructing them to click the link sent to their email address. The user clicks the link in the email, which contains the verification code in the URL. The URL launches the app providing the verification code to the Client. The Client sends the verification code and <tt>auth_session</tt> to the Authorization Challenge Endpoint.</t>
          </li>
        </ul>
      </section>
      <section anchor="mobile-confirmation-code">
        <name>Mobile Confirmation Code</name>
        <t>A user may be required to provide a confirmation code as part of an authentication ceremony to prove they control a mobile phone number. The user provides a phone number and is then required to enter a confirmation code sent to the phone. If the correct confirmation code is returned to the Authorization Server, it issues Access and Refresh Tokens.</t>
        <ol spacing="normal" type="1"><li>
            <t>The Client collects a mobile phone number from the user.</t>
          </li>
          <li>
            <t>The Client sends the phone number in an Authorization Challenge Request (<xref target="challenge-request"/>) to the Authorization Challenge Endpoint (<xref target="authorization-challenge-endpoint"/>).</t>
          </li>
          <li>
            <t>The Authorization Server sends a confirmation code to the phone number and returns an Error Response (<xref target="challenge-error-response"/>) including <tt>"error": "insufficient_authorization"</tt>, <tt>"auth_session"</tt> and a custom property indicating that a confirmation code must be entered.</t>
          </li>
          <li>
            <t>The Client presents a user experience guiding the user to enter the confirmation code. Once the code is entered, the Client sends an Authorization Challenge Request to the Authorization Challenge Endpoint, including the confirmation code as well as the <tt>auth_session</tt> parameter returned in the previous Error Response.</t>
          </li>
          <li>
            <t>The Authorization Server uses the <tt>auth_session</tt> to maintain the session context and verifies the code before issuing an Authorization Code to the Client.</t>
          </li>
          <li>
            <t>The Client sends the Authorization Code in a Token Request (<xref target="token-request"/>) to the Token Endpoint.</t>
          </li>
          <li>
            <t>The Authorization Server verifies the Authorization Code and issues the Access Token and Refresh Token.</t>
          </li>
        </ol>
      </section>
      <section anchor="re-authenticating-to-an-app-a-week-later-using-otp">
        <name>Re-authenticating to an app a week later using OTP</name>
        <t>A client may be in possession of an Access and Refresh Token as the result of a previous succesful user authentication. The user returns to the app a week later and accesses the app. The Client presents the Access Token, but receives an error indicating the Access Token is no longer valid. The Client presents a Refresh Token to the Authorization Server to obtain a new Access Token. If the Authorization Server requires user interaction for reasons based on its own policies, it rejects the Refresh Token and the Client re-starts the user authentication flow to obtain new Access and Refresh Tokens.</t>
        <ol spacing="normal" type="1"><li>
            <t>The Client has a short-lived access token and long-lived refresh token following a previous completion of an Authorization Grant Flow which included user authentication.</t>
          </li>
          <li>
            <t>A week later, the user launches the app and tries to access a protected resource at the Resource Server.</t>
          </li>
          <li>
            <t>The Resource Server responds with an error code indicating an invalid access token since it has expired.</t>
          </li>
          <li>
            <t>The Client presents the refresh token to the Authorization Server to obtain a new access token (section 6 <xref target="RFC6749"/>)</t>
          </li>
          <li>
            <t>The Authorization Server responds with an error code indicating that an OTP from the user is required, as well as an <tt>auth_session</tt>.</t>
          </li>
          <li>
            <t>The Client prompts the user to enter an OTP.</t>
          </li>
          <li>
            <t>The Client sends the OTP and <tt>auth_session</tt> in an Authorization Challenge Request (<xref target="challenge-request"/>) to the Authorization Challenge Endpoint (<xref target="authorization-challenge-endpoint"/>).</t>
          </li>
          <li>
            <t>The Authorization Server verifies the <tt>auth_session</tt> and OTP, and returns an Authorization Code.</t>
          </li>
          <li>
            <t>The Client sends the Authorization Code in a Token Request (<xref target="token-request"/>) to the Token Endpoint.</t>
          </li>
          <li>
            <t>The Authorization Server verifies the Authorization Code and issues the requested tokens.</t>
          </li>
          <li>
            <t>The Client presents the new Access Token to the Resource Server in order to access the protected resource.</t>
          </li>
        </ol>
      </section>
      <section anchor="step-up-sms-example">
        <name>Step-up Authentication using Confirmation SMS</name>
        <t>A Client previously obtained an Access and Refresh Token after the user authenticated with an OTP. When the user attempts to access a protected resource, the Resource Server determines that it needs an additional level of authentication and triggers a step-up authentication, indicating the desired level of authentication using <tt>acr_values</tt> and <tt>max_age</tt> as defined in the Step-up Authentication specification. The Client initiates an authorization request with the Authorization Server indicating the <tt>acr_values</tt> and <tt>max_age</tt> parameters. The Authorization Server responds with error messages promptng for additional authentication until the <tt>acr_values</tt> and <tt>max_age</tt> values are satisfied before issuing fresh Access and Refresh Tokens.</t>
        <ol spacing="normal" type="1"><li>
            <t>The Client has a short-lived access token and long-lived refresh token following the completion of an Authorization Code Grant Flow which included user authentication.</t>
          </li>
          <li>
            <t>When the Client presents the Access token to the Resource Server, the Resource Server determines that the <tt>acr</tt> claim in the Access Token is insufficient given the resource the user wants to access and responds with an <tt>insufficient_user_authentication</tt> error code, along with the desired <tt>acr_values</tt> and desired <tt>max_age</tt>.</t>
          </li>
          <li>
            <t>The Client sends an Authorization Challenge Request (<xref target="challenge-request"/>) to the Authorization Challenge Endpoint (<xref target="authorization-challenge-endpoint"/>) including the <tt>auth_session</tt>, <tt>acr_values</tt> and <tt>max_age</tt> parameters.</t>
          </li>
          <li>
            <t>The Authorization Server verifies the <tt>auth_session</tt> and determines which authentication methods must be satisfied based on the <tt>acr_values</tt>, and responds with an Error Response (<xref target="challenge-error-response"/>) including <tt>"error": "insufficient_authorization"</tt> and a custom property indicating that an OTP must be entered.</t>
          </li>
          <li>
            <t>The Client prompts the user for an OTP, which the user obtains and enters.</t>
          </li>
          <li>
            <t>The Client sends an Authorization Challenge Request to the Authorization Challenge Endpoint including the <tt>auth_session</tt> and OTP.</t>
          </li>
          <li>
            <t>The Authorization Server verifies the OTP and returns an Authorization Code.</t>
          </li>
          <li>
            <t>The Client sends the Authorization Code in a Token Request (<xref target="token-request"/>) to the Token Endpoint.</t>
          </li>
          <li>
            <t>The Authorization Server verifies the Authorization Code and issues an Access Token with the updated <tt>acr</tt> value along with the Refresh Token.</t>
          </li>
          <li>
            <t>The Client presents the Access Token to the Resources Server, which verifies that the <tt>acr</tt> value meets its requirements before granting access to the protected resource.</t>
          </li>
        </ol>
      </section>
      <section anchor="registration">
        <name>Registration</name>
        <t>This example describes how to use the mechanisms defined in this draft to create a complete user registration flow starting with an email address. In this example, it is the Authorization Server's policy to allow these challenges to be sent to email and phone number that were previously unrecognized, and creating the user account on the fly.</t>
        <ol spacing="normal" type="1"><li>
            <t>The Client collects a username from the user.</t>
          </li>
          <li>
            <t>The Client sends an Authorization Challenge Request (<xref target="challenge-request"/>) to the Authorization Challenge Endpoint (<xref target="authorization-challenge-endpoint"/>) including the username.</t>
          </li>
          <li>
            <t>The Authorization Server returns an Error Response (<xref target="challenge-error-response"/>) including <tt>"error": "insufficient_authorization"</tt>, <tt>"auth_session"</tt>, and a custom property indicating that an e-mail address must be collected.</t>
          </li>
          <li>
            <t>The Client collects an e-mail address from the user.</t>
          </li>
          <li>
            <t>The Client sends the e-mail address as part of a second Authorization Challenge Request to the Authorization Challenge Endpoint, along with the <tt>auth_session</tt> parameter.</t>
          </li>
          <li>
            <t>The Authorization Server sends a verification code to the e-mail address and returns an Error Response including <tt>"error": "insufficient_authorization"</tt>, <tt>"auth_session"</tt> and a custom property indicating that an e-mail verification code must be entered.</t>
          </li>
          <li>
            <t>The Client presents a user experience guiding the user to copy the e-mail verification code to the Client. Once the e-mail verification code is entered, the Client sends an Authorization Challenge Request to the Authorization Challenge Endpoint, including the e-mail verification code as well as the <tt>auth_session</tt> parameter returned in the previous Error Response.</t>
          </li>
          <li>
            <t>The Authorization Server uses the <tt>auth_session</tt> to maintain the session context, and verifies the e-mail verification code. It determines that it also needs a phone number for account recovery purposes and returns an Error Response including <tt>"error": "insufficient_authorization"</tt>, <tt>"auth_session"</tt> and a custom property indicating that a phone number must be collected.</t>
          </li>
          <li>
            <t>The Client collects a mobile phone number from the user.</t>
          </li>
          <li>
            <t>The Client sends the phone number in an Authorization Challenge Request to the Authorization Challenge Endpoint, along with the <tt>auth_session</tt>.</t>
          </li>
          <li>
            <t>The Authorization Server uses the <tt>auth_session</tt> parameter to link the previous requests. It sends a confirmation code to the phone number and returns an Error Response including <tt>"error": "insufficient_authorization"</tt>, <tt>"auth_session"</tt> and a custom property indicating that a SMS confirmation code must be entered.</t>
          </li>
          <li>
            <t>The Client presents a user experience guiding the user to enter the SMS confirmation code. Once the SMS verification code is entered, the Client sends an Authorization Challenge Request to the Authorization Challenge Endpoint, including the confirmation code as well as the <tt>auth_session</tt> parameter returned in the previous Error Response.</t>
          </li>
          <li>
            <t>The Authorization Server uses the <tt>auth_session</tt> to maintain the session context, and verifies the SMS verification code before issuing an Authorization Code to the Client.</t>
          </li>
          <li>
            <t>The Client sends the Authorization Code in a Token Request (<xref target="token-request"/>) to the Token Endpoint.</t>
          </li>
          <li>
            <t>The Authorization Server verifies the Authorization Code and issues the requested tokens.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="example-implementations">
      <name>Example Implementations</name>
      <t>In order to successfully implement this specification, the Authorization Server will need to define its own specific requirements for what values clients are expected to send in the Authorization Challenge Request (<xref target="challenge-request"/>), as well as its own specific error codes in the Authorization Challenge Response (<xref target="challenge-response"/>).</t>
      <t>Below is an example of parameters required for a complete implementation that enables the user to log in with a username and OTP.</t>
      <section anchor="authorization-challenge-request-parameters">
        <name>Authorization Challenge Request Parameters</name>
        <t>In addition to the request parameters defined in <xref target="challenge-request"/>, the authorization server defines the additional parameters below.</t>
        <dl>
          <dt>"username":</dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14> for the initial Authorization Challenge Request.</t>
          </dd>
          <dt>"otp":</dt>
          <dd>
            <t>The OTP collected from the user. <bcp14>REQUIRED</bcp14> when re-trying an Authorization Challenge Request in response to the <tt>otp_required</tt> error defined below.</t>
          </dd>
        </dl>
      </section>
      <section anchor="authorization-challenge-response-parameters">
        <name>Authorization Challenge Response Parameters</name>
        <t>In addition to the response parameters defined in <xref target="challenge-response"/>, the authorization server defines the additional value for the <tt>error</tt> response below.</t>
        <dl>
          <dt>"otp_required":</dt>
          <dd>
            <t>The client should collect an OTP from the user and send the OTP in
a second request to the Authorization Challenge Endpoint. The HTTP
response code to use with this error value is <tt>401 Unauthorized</tt>.</t>
          </dd>
        </dl>
      </section>
      <section anchor="example-sequence">
        <name>Example Sequence</name>
        <t>The client prompts the user to enter their username, and sends the username in an initial Authorization Challenge Request.</t>
        <artwork><![CDATA[
POST /authorize-challenge HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

username=alice
&scope=photos
&client_id=bb16c14c73415
]]></artwork>
        <t>The Authorization Server sends an error response indicating that an OTP is required.</t>
        <artwork><![CDATA[
HTTP/1.1 401 Unauthorized
Content-Type: application/json
Cache-Control: no-store

{
  "error": "otp_required",
  "auth_session": "ce6772f5e07bc8361572f"
}
]]></artwork>
        <t>The client prompts the user for an OTP, and sends a new Authorization Challenge Request.</t>
        <artwork><![CDATA[
POST /authorize-challenge HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

auth_session=ce6772f5e07bc8361572f
&otp=555121
]]></artwork>
        <t>The Authorization Server validates the <tt>auth_session</tt> to find the expected user, then validates the OTP for that user, and responds with an authorization code.</t>
        <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
  "authorization_code": "uY29tL2F1dGhlbnRpY"
}
]]></artwork>
        <t>The client sends the authorization code to the token endpoint.</t>
        <artwork><![CDATA[
POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&client_id=bb16c14c73415
&code=uY29tL2F1dGhlbnRpY
]]></artwork>
        <t>The Authorization Server responds with an access token and refresh token.</t>
        <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
  "token_type": "Bearer",
  "expires_in": 3600,
  "access_token": "d41c0692f1187fd9b326c63d",
  "refresh_token": "e090366ac1c448b8aed84cbc07"
}
]]></artwork>
      </section>
    </section>
    <section anchor="design-goals">
      <name>Design Goals</name>
      <t>This specification defines a new authorization flow the client can use to obtain an authorization grant. There are two primary reasons for designing the specification this way.</t>
      <t>This enables existing OAuth implementations to make fewer modifications to existing code by not needing to extend the token endpoint with new logic. Instead, the new logic can be encapsulated in an entirely new endpoint, the output of which is an authorization code which can be redeemed for an access token at the existing token endpoint.</t>
      <t>This also mirrors more closely the existing architecture of the redirect-based authorization code flow. In the authorization code flow, the client first initiates a request by redirecting a browser to the authorization endpoint, at which point the authorization server takes over with its own custom logic to authenticate the user in whatever way appropriate, possibly including interacting with other endpoints for the actual user authentication process. Afterwards, the authorization server redirects the user back to the client application with an authorization code in the query string. This specification mirrors the existing approach by having the client first make a POST request to the Authorization Challenge Endpoint, at which point the authorization server provides its own custom logic to authenticate the user, eventually returning an authorization code.</t>
      <t>An alternative design would be to define new custom grant types for the different authentication factors such as WebAuthn, OTP, etc. The drawback to this design is that conceptually, these authentication methods do not map to an OAuth grant. In other words, the OAuth authorization grant captures the user's intent to authorize access to some data, and that authorization is represented by an authorization code, not by different methods of authenticating the user.</t>
      <t>Another alternative option would be to have the Authorization Challenge Endpoint return an access token upon successful authentication of the user. This was deliberately not chosen, as this adds a new endpoint that tokens would be returned from. In most deployments, the Token Endpoint is the only endpoint that actually issues tokens, and includes all the implmentation logic around token binding, rate limiting, etc. Instead of defining a new endpoint that issues tokens which would have to have similar logic and protections, instead the new endpoint only issues authorization codes, which can be exchanged for tokens at the existing Token Endpoint just like in the redirect-based Authorization Code flow.</t>
      <t>These design decisions should enable authorization server implementations to isolate and encapsulate the changes needed to support this specification.</t>
    </section>
    <section anchor="document-history">
      <name>Document History</name>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>Updated affiliations and acks</t>
        </li>
        <li>
          <t>Editorial clarifications</t>
        </li>
        <li>
          <t>Added reference to Attestation-Based Client Authentication</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Corrected "re-authorization of the user" to "re-authentication of the user"</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Adopted into the OAuth WG, no changes from previous individual draft</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank the attendees of the OAuth Security Workshop 2023 session in which this was discussed, as well as the following individuals who contributed ideas, feedback, and wording that shaped and formed the final specification:</t>
      <t>Alejo Fernandez, Brian Campbell, Dean Saxe, Dick Hardt, Dmitry Telegin, Janak Amarasena, Jeff Corrigan, John Bradley, Justin Richer, Mike Jones, Orie Steele, Tim Cappalli, Tobias Looker, Yaron Sheffer.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
