<?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.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-oauth-first-party-apps-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <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-01"/>
    <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>SPIRL</organization>
      <address>
        <email>pieter@spirl.com</email>
      </address>
    </author>
    <date year="2025" month="April" day="25"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>native apps</keyword>
    <keyword>first-party</keyword>
    <keyword>oauth</keyword>
    <abstract>
      <?line 88?>

<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 98?>

<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.)</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 other mechanisms like 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, or 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="6" month="January" 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-09"/>
        </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="March" 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-24"/>
        </reference>
      </references>
    </references>
    <?line 713?>

<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>-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, Jeff Corrigan, John Bradley, Justin Richer, Mike Jones, Orie Steele, Tim Cappalli, Tobias Looker, Yaron Sheffer.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1963rb1pXofz4FjvJNI7UkLcnyJfqaTmXJdpTElmrKdXM6
/SyQ3BQRgQAHACWzSfos51nOk5112zdgA6IcN5OeGX8zDUUC+7L22ut+GQwG
vSqpUnUYbZ0drap5tD/cjWZ5Eb1IirIanMdFtY6Olss0mcRVkmflVi8ejwt1
Y14IPAwPwdPqKi/Wh1FZTXu9aT7J4gXMMi3iWTVIVDUb5DG8PpjRq0t8dRDD
q4PdvV65Gi+SsoTpqvUSXjp9fvGil60WY1Uc9qYw8mFvAktRWbkqD6OqWKke
rOdhLy5UDOsaqcmqSKr1Vu82L66viny1hG/fqXGEC86L5O+0lei8yKt8kqdb
vWu1hkenh71oEGXw442KcC34p7M+/JMW3btR2QoWEUWbDB5FvIutd7CaJLuK
XuJL+P0iTlL4nsb8I8JkmBdX+ENcTObww7yqluXhgwf4HH4F6xrqxx7gFw/G
RX5bqgc0wgN88yqp5quxHnRwe/UgDGZ8NgVIlpUzDx1OOaQ3hpmqWt59cOch
DufVAnbeiwkkCFaYLopmqzRlNDiKC4QRHNjkOqHfYEtxJsA7jM6uq5i+Vgyj
GJ//45KfH07yBZ6FM95LBe+r6EWqqslcFYERj+NlUsVpdJbBY0kWZ5MkTt0p
rmiI4UyG+OOEX8gzFZjvHDaviuibuCxVuoizwISj89M337oTLOmdP5bLpEhp
yF6WFwvCNkSlNy+OHz85+EI+Ptl7ZD4+2ntkP9pvv9jTHx8/fCwfn+6b154e
7B3oj4/3n+qPT3afyMcv9vb1a18cmIm/OHiyix9PBydD54QnRV6Wg6m6SSZq
UMoFw+fOlio7PRm+pn0MRqOzQ9qzEBX+NTrOs0xNqoifiuApIhuv8nGSKqIY
/FIMJwAIqfExh7eTKWFiuVSTUr4YTHi4AV/VQVnmg733u4R0NI5BO/o3iJIM
yMTLoY8eREei1/mNQroS7e/u75vtdO3hOC9UtDfc/agVT+Blf621ZTztw0r2
Dtq38XoYjeLrZLEqYv+Hr4fRsyKepmrtf/9qGH0NSFz63z4bRlMVvVJTlcDJ
+r8dD+FkiipZwGIRE45eHzFNwBsO6A9YXB7qH75+d4Gf346ORsenpx7gto7z
qZpGx3N4a4LXZaSqaDCIngzGSRUdLVQBTCWLRlWcTeMCHoTHCS9OsxnfDKAR
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
c7hb8NZ3QGdgJXMs+I/0vvf/ANRhnksa+wAA

-->

</rfc>
