<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-watson-oauth-rich-error-response-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="Rich OAuth Error Responses">Rich OAuth Error Responses</title>
    <seriesInfo name="Internet-Draft" value="draft-watson-oauth-rich-error-response-00"/>
    <author fullname="Nicholas Watson">
      <organization>Google, LLC</organization>
      <address>
        <email>nwatson@google.com</email>
      </address>
    </author>
    <date year="2025" month="July" day="01"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>oauth</keyword>
    <keyword>error</keyword>
    <abstract>
      <?line 42?>

<t>Define an error-handling protocol extension for the OAuth 2.0 token endpoint
that allows the authorization server or resource server to specify an extra
parameter on error responses that should be passed through to follow-up
authorization requests.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://njwatson32.github.io/oauth-error/draft-watson-oauth-rich-error-response.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-watson-oauth-rich-error-response/"/>.
      </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/njwatson32/oauth-error"/>.</t>
    </note>
  </front>
  <middle>
    <?line 50?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>OAuth 2.0 <xref target="RFC6749"/> and <xref target="RFC6750"/> define several different error codes that
authorization servers and resource servers may return. On token endpoint calls,
most most runtime errors are lumped into <tt>invalid_grant</tt>, with the rest of the
errors indicating a coding or configuration error by the client. Similarly,
<tt>invalid_token</tt> covers most runtime errors on resource server calls.</t>
      <t>Given the changing security, privacy, and regulatory landscapes since OAuth 2.0
was released, many authorization servers have new types of error conditions,
which may be too complex to adequately describe in a JSON response.</t>
      <t>This specification extends OAuth to allow for authorization servers and resource
servers to return an extra parameter which can be passed back to the
authorization server when the user is present in order to provide a richer error
experience which may even allow for recovery by the user.</t>
    </section>
    <section anchor="motivating-use-cases">
      <name>Motivating Use Cases</name>
      <t>Some errors which may require a richer experience include:</t>
      <ul spacing="normal">
        <li>
          <t>User account types which have reduced capabilities (e.g. underage or
enterprise accounts)</t>
        </li>
        <li>
          <t>Applications which can be disabled or restricted</t>
        </li>
        <li>
          <t>Custom authentication strength requirements not covered by an existing spec</t>
        </li>
        <li>
          <t>TODO more?</t>
        </li>
      </ul>
      <t>In the common case, errors requiring user attention are likely to appear at
authorization time, when the user is present to see and/or address them.
However, in circumstances where data used for access control is changed out of
band, these errors could result in failures at refresh token exchange or access
token usage. In this situation, the error codes defined by the original OAuth
2.0 spec are insufficiently expressive to address these different error
scenarios. The <tt>error_description</tt> parameter also cannot cover errors that:</t>
      <ul spacing="normal">
        <li>
          <t>Need to display richer detail (e.g. explain to user why account is blocked)</t>
        </li>
        <li>
          <t>Contain sensitive data (e.g. account has been flagged as underage)</t>
        </li>
      </ul>
      <t>Because the user is not always be present when the client receives an error from
the authorization or resource server, there needs to be some way to preserve
error state until the user is present again. Simply returning <tt>invalid_grant</tt> so
that the client reattempts the authorization flow has a few downsides:</t>
      <ul spacing="normal">
        <li>
          <t>Some clients may not automatically restart authorization and instead render
a button to do so. In this case the user has no explanation for why they're
suddenly signed out of the client.</t>
        </li>
        <li>
          <t>It may result in unnecessary work for the user if they need to complete some
preliminary auth steps in order to reach the error state (e.g. sign in or
account selection for authorization servers that support multiple login).</t>
        </li>
        <li>
          <t><tt>invalid_grant</tt> is semantically the wrong error code for many error
conditions.</t>
        </li>
      </ul>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="error-responses">
      <name>Error Responses</name>
      <section anchor="token-endpoint">
        <name>Token endpoint</name>
        <t>When returning an error response from the token endpoint, the authorization
server <bcp14>MAY</bcp14> return an additional parameter with any error code.</t>
        <artwork><![CDATA[
error_state
    Indicates that the client SHOULD initiate a new authorization grant flow
    and add this parameter as the error_state parameter there. The client
    MUST NOT modify or introspect the error_state parameter.
]]></artwork>
        <t>In this case, <tt>error_state</tt> is a private contract wholly within the
authorization server, so its format requires no specification (though see
considerations below).</t>
      </section>
      <section anchor="bearer-authentication-scheme">
        <name>Bearer authentication scheme</name>
        <t>This specification defines the following <tt>WWW-Authenticate</tt> auth-param value,
which may be presented alongside any error code.</t>
        <artwork><![CDATA[
error_body
    A boolean indicating that the client SHOULD initiate a new authorization
    grant flow and add the response body as the error_state parameter there.
    The client MUST NOT modify or introspect the error response body.
]]></artwork>
        <t>If access tokens are validated by the authorization server, the error response
body is a private contract wholly within the authorization server and requires
no specification (though see considerations below).</t>
        <t>If access tokens are validated directly on the resource server (e.g. using an
authorization server public key), then the authorization server will need to
understand the <tt>error_state</tt> generated by the resource server. It is <bcp14>RECOMMENDED</bcp14>
to represent <tt>error_state</tt> as a JWT <xref target="RFC7519"/>, and use JSON Web Encryption
<xref target="RFC7516"/> to encrypt it.</t>
        <section anchor="resource-server-errorstate-jwt">
          <name>Resource server <tt>error_state</tt> JWT</name>
          <t>If using a JWT to represent <tt>error_state</tt>, the standard JWT claims <bcp14>MUST</bcp14> be set
as follows:</t>
          <ul spacing="normal">
            <li>
              <t>typ: "error+jwt"</t>
            </li>
            <li>
              <t>iss: Endpoint URL of the resource server endpoint returning the error</t>
            </li>
            <li>
              <t>aud: Authorization server issuer as defined by its metadata endpoint
<xref target="RFC8414"/></t>
            </li>
            <li>
              <t>sub: Identifier of the user whose access token triggered the error</t>
            </li>
            <li>
              <t>iat: Issue time</t>
            </li>
            <li>
              <t>nbf: Not before</t>
            </li>
            <li>
              <t>exp: Expiration time, but see considerations below</t>
            </li>
          </ul>
          <t>The JWT will contain other custom claims that can be understood by the
authorization server to display the error, but due to the diverse nature of
potential errors, it's not possible to enumerate them in a spec. Authorization
servers <bcp14>MUST</bcp14> ignore unknown claims.</t>
        </section>
      </section>
      <section anchor="errorstate-considerations">
        <name><tt>error_state</tt> considerations</name>
        <t>It is <bcp14>RECOMMENDED</bcp14> that <tt>error_state</tt> be opaque to the client, though clients
<bcp14>MUST NOT</bcp14> introspect the parameter regardless. If <tt>error_state</tt> contains any user
data, it <bcp14>MUST</bcp14> be encrypted. It is <bcp14>RECOMMENDED</bcp14> that <tt>error_state</tt> contains a
timestamp and the authorization server defines a reasonable timeframe in which
it must be used. Given that there may be some human-introduced delay before
<tt>error_state</tt> is sent to the authorization endpoint and the expected lack of
sensitivity of the <tt>error_state</tt> parameter, it is <bcp14>RECOMMENDED</bcp14> that the
expiration timestamp be at least 1 day.</t>
        <t>The authorization server and resource server <bcp14>MAY</bcp14> use <tt>error_state</tt> to represent
both recoverable and non-recoverable errors. Examples of recoverable errors
could include step-up auth or re-acknowledgment of updated terms of service.
Examples of non-recoverable errors could include account or API disables where
the authorization server needs to communicate some information to the user.</t>
        <t>It is <bcp14>NOT RECOMMENDED</bcp14> to distinguish between recoverable and non-recoverable
errors to the client, as it potentially leaks sensitive information to the
client. (Signals that should be shared for security and abuse reasons should use
the protocols defined in [OpenID SSF].)</t>
      </section>
      <section anchor="new-error-codes">
        <name>New error codes</name>
        <t>This specification additionally defines the <tt>access_denied</tt> error code for
the token endpoint and resource servers, as an error code that may be more
appropriate in some cases where <tt>error_state</tt> is returned.</t>
        <artwork><![CDATA[
access_denied
    Indicates that the request could not be completed, despite being
    well-formed and properly authenticated. This error code MUST be returned
    as an HTTP 403.
]]></artwork>
      </section>
    </section>
    <section anchor="authorization-grant-request">
      <name>Authorization Grant Request</name>
      <t>If the client is not running in a context where it can initiate an authorization
grant flow (e.g. a workflow running on some cloud VM), it <bcp14>MAY</bcp14> transmit the
<tt>error_state</tt> parameter to the system that can.</t>
      <t>Authorization servers that support <tt>error_state</tt> <bcp14>MUST</bcp14> support at least one of
the following to avoid sending long encrypted parameters in the URL:</t>
      <ul spacing="normal">
        <li>
          <t>HTTP POST requests to the authorization grant flow</t>
        </li>
        <li>
          <t>Pushed authorization requests <xref target="RFC9126"/></t>
        </li>
      </ul>
      <t>The authorization server <bcp14>MUST</bcp14> ignore an expired <tt>error_state</tt> parameter (though
it is entirely possible that the same error will be re-encountered during a
fresh authorization grant flow).</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The resource server could in theory return an entire authorization URL that the
client should follow, but doing so could allow a compromised resource server to
direct the user to a malicious authorization server that would phish or steal
user credentials. Returning just the <tt>error_state</tt> parameter prevents this as
clients are responsible for targeting the correct authorization endpoint.</t>
      <t>TODO Risk of attaching error_state to URL for different user.</t>
      <t>TODO Guidance on background-running clients that need to notify the user. Don't
want to train users to click on authz links.</t>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>Encrypting the <tt>error_state</tt> parameter allows the authorization and resource
servers to embed additional user data into the parameter that should not be
visible to clients. For example, unencrypted, a server couldn't reveal in the
error that access was denied because the user is underage. However, encrypted
(and salted), there's no problem plumbing an <tt>under_age</tt> flag to the
authorization server.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="oauth-parameters-registration">
        <name>OAuth Parameters Registration</name>
        <t>This specification registers the following OAuth parameter definitions in the
IANA OAuth Parameters registry.</t>
        <section anchor="registry-contents">
          <name>Registry Contents</name>
          <ul spacing="normal">
            <li>
              <t>Name: error_state
              </t>
              <ul spacing="normal">
                <li>
                  <t>Parameter Usage Location: authorization request, token response</t>
                </li>
                <li>
                  <t>Change Controller: IETF</t>
                </li>
                <li>
                  <t>Reference: This document</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <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="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="RFC7516">
        <front>
          <title>JSON Web Encryption (JWE)</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="J. Hildebrand" initials="J." surname="Hildebrand"/>
          <date month="May" year="2015"/>
          <abstract>
            <t>JSON Web Encryption (JWE) represents encrypted content 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 IANA registries defined by that specification. Related digital signature and Message Authentication Code (MAC) capabilities are described in the separate JSON Web Signature (JWS) specification.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7516"/>
        <seriesInfo name="DOI" value="10.17487/RFC7516"/>
      </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="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="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="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>
    <?line 267?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA51a23IbNxJ9x1dgmYdYWZK2EuemyiYry5coZUtaSV5XKuWy
wBmQRDQcTAYzoplU/mW/Zb9sT3djbiTluDYPDjWXRqP79OkLZjKZqMpVmT3S
o0uXLPX5cV0t9bOy9KW+tKHwebBhpMxsVtq7v3goMZVd+HJzpF0+90qlPsnN
CqLT0syrydpUwecTb/DypISciSUJkzJKmDx6pEI9W7kQnM+rTYE3T59dP9f6
E22y4LG6y1NbWPyTV6OxHtnUVb50JqM/To+f4H/QaHR6ef18pPJ6NbPlkUqh
1ZFKaIU81OFIV2VtFfbyhTKlNZB6ZZO6dNVmpNa+vF2Uvi5w9Y2dadonFvjd
VNBIX5S+8onPRurWbvBoeqT0RPN+6AfvRt3ZvMZ6Wn+MHK1lm6M3WNjlC/2C
XqLrK+MyXGfh/3S2mk99uaAbpkyWuLGsqiIcPXxIz9Eld2enzWMP6cLDWenX
wT5kCQ/pzYWrlvUM7+a/iiu++Fzuih/okQy2ClVPfPfoVF6fOt9/6eHHuXa6
rFbYrjJsBzIbFtN6XmeZIOQM7/jMBP2GJfFd7MTk0WZH+oX3i8yO9cuXJ3zX
ioVyWfqfC749TfxKqdyXK7x1x264fH7y1dePv21/fvko/vz6y8Ovup/NA988
Pnwcf357+DkeUITlVp5Sk8lEm1moSpNUSj21c5dbbXLx/mRp8jQjRxbRx9q+
r4A7cjvE6GppY/R8Pn2kK39r8WaeFt7llaqWpgLSM/iNHzQD1ARb3tmSAA6r
+rpMbHOp8joUNnHzDSvyHrqpwpQwbEUvRN104wwSjoXC0tdZqmdWFyYEm+Iq
wLdYkri5Jy0mdaGGOpT2txoACdNoiJVL08wq9Yk+zavSp3VCjynVbfGXaP+3
UC2Nf3356K1OxXDBYgMm06mbz22JsI66Jj6Neqp9VggsbcsOAUGzwcWqLvOp
Ps+3zKsTmDaM1cqHSvM/ZZ1XbmVlSYgsrc7qVQFT4HGvb1x+ZzKXvluUJq9u
xnqNCGDHYOFK+zn9VvFlMJMD/5HrDWlPP3gf+dwt6lKUl73NNiwkyRz2O9VX
bkUhnG3Gql2RNb/B27KtPcqyM4Yw4P3BMy+A1FyWABwXpEmIDDcGLt2dSfBD
DLioEfKgbER+nobEFLB6cHnSQ6laIyxLm1kDkIxh43yzF5lBL82d1bldM6kF
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
xsjtynjU6f8DeZy/Kj4pAAA=

-->

</rfc>
