<?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.8 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-parecki-oauth-global-token-revocation-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.1 -->
  <front>
    <title>Global Token Revocation</title>
    <seriesInfo name="Internet-Draft" value="draft-parecki-oauth-global-token-revocation-03"/>
    <author fullname="Aaron Parecki">
      <organization>Okta</organization>
      <address>
        <email>aaron@parecki.com</email>
        <uri>https://aaronparecki.com</uri>
      </address>
    </author>
    <date year="2024" month="March" day="21"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>oauth</keyword>
    <keyword>token revocation</keyword>
    <keyword>logout</keyword>
    <abstract>
      <?line 56?>

<t>Global Token Revocation enables parties such as a security incident management tool or an external Identity Provider to send a request to an Authorization Server to indicate that it should revoke all of the user's existing tokens and require that the user re-authenticates before issuing new tokens.</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.aaronpk.com/global-token-revocation/draft-parecki-oauth-global-token-revocation.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-parecki-oauth-global-token-revocation/"/>.
      </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/aaronpk/global-token-revocation"/>.</t>
    </note>
  </front>
  <middle>
    <?line 61?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>An OAuth Authorization Server issues tokens in response to a user authorizing a client. A party external to the OAuth Authorization Server may wish to instruct the Authorization Server to revoke all tokens belonging to a particular user, and prevent the server from issuing new tokens until the user re-authenticates.</t>
      <t>For example, a security incident management tool may detect anomalous behaviour on a user's account, or if the user logged in through an enterprise Identity Provider, the Identity Provider may want to revoke all of a user's tokens in the event of a security incident or on the employee's termination.</t>
      <t>This specification describes an API endpoint on an Authorization Server that can accept requests from external parties to revoke all tokens associated with a given user.</t>
    </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", "End-User", "Grant Type", "Protected Resource",
"Redirection URI", "Refresh Token", "Resource Owner", "Resource Server" (RS)
and "Token Endpoint" defined by <xref target="RFC6749"/>,
and the terms "OpenID Provider" (OP) and "ID Token" defined by <xref target="OpenID"/>.</t>
        <t>This specification uses the term "Identity Provider" (IdP) to refer to
the Authorization Server or OpenID Provider that is used for End-User authentication.</t>
        <t>TODO: Replace RFC6749 references with OAuth 2.1</t>
      </section>
      <section anchor="roles">
        <name>Roles</name>
        <t>In a typical OAuth deployment, the OAuth client obtains tokens from the authorization server when a user logs in and authorizes the client. In many cases, the method by which a user logs in at the authorization server is through an external identity provider.</t>
        <t>For example, a mobile chat application is an OAuth Client, and obtains tokens from its backend server which stores the chat messages. The mobile chat backend plays the OAuth roles of "Resource Server" and "Authorization Server".</t>
        <t>In some cases, the user will log in to the Authorization Server using an external (e.g. enterprise) Identity Provider. In that case, when a user logs in to the chat application, the backend server may play the role of an OAuth client (or OpenID or SAML relying party) to the Identity Provider in a new authorization or authentication flow.</t>
      </section>
    </section>
    <section anchor="token-revocation">
      <name>Token Revocation</name>
      <t>A revocation request is a POST request to the Global Token Revocation endpoint, which starts the process of revoking all tokens for the identified subject.</t>
      <section anchor="revocation-endpoint">
        <name>Revocation Endpoint</name>
        <t>The Global Token Revocation endpoint is a URL at the authorization server which accepts HTTP POST requests with parameters in the HTTP request message body using the <tt>application/json</tt> format. The Global Token Revocation endpoint URL <bcp14>MUST</bcp14> use the <tt>https</tt> scheme.</t>
        <t>If the authorization server supports OAuth Server Metadata (<xref target="RFC8414"/>), the authorization server <bcp14>SHOULD</bcp14> include the URL of their Global Token Revocation endpoint in their authorization server metadata document using the <tt>global_token_revocation_endpoint</tt> parameter as defined in <xref target="authorization-server-metadata"/>.</t>
        <t>The authorization server <bcp14>MAY</bcp14> alternatively register the endpoint with tools that will use it.</t>
      </section>
      <section anchor="revocation-request">
        <name>Revocation Request</name>
        <t>The request is a POST request with an <tt>application/json</tt> body containing a single property <tt>subject</tt>, the value of which is a Security Event Token Subject Identifier as defined in "Subject Identifiers for Security Event Tokens" <xref target="RFC9493"/>.</t>
        <t>In practice, this means the value of <tt>subject</tt> is a JSON object with a property <tt>format</tt>, and at least one additional property depending on the value of <tt>format</tt>.</t>
        <t>The request <bcp14>MUST</bcp14> also be authenticated, the particular authentication method and means by which the authentication is established is out of scope of this specification, but may include OAuth 2.0 Bearer Token <xref target="RFC6750"/> or a JWT <xref target="RFC7523"/>.</t>
        <t>The following example requests that all tokens for a user identified by an email address be revoked:</t>
        <artwork><![CDATA[
POST /global-token-revocation
Host: example.com
Content-Type: application/json
Authorization: Bearer f5641763544a7b24b08e4f74045

{
  "sub_id": {
    "format": "email",
    "email": "user@example.com"
  }
}
]]></artwork>
        <t>If the user identifier at the authorization server is known by the system making the revocation request, the request can use the "Opaque Identifer" format to provide the user identifier:</t>
        <artwork><![CDATA[
POST /global-token-revocation
Host: example.com
Content-Type: application/json
Authorization: Bearer f5641763544a7b24b08e4f74045

{
  "sub_id": {
    "format": "opaque",
    "id": "e193177dfdc52e3dd03f78c"
  }
}
]]></artwork>
        <t>If it is expected that the authorization server knows about the user identifier at the IdP, the request can use the "Issuer and Subject Identifier" format:</t>
        <artwork><![CDATA[
POST /global-token-revocation
Host: example.com
Content-Type: application/json
Authorization: Bearer f5641763544a7b24b08e4f74045

{
  "sub_id": {
    "format": "iss_sub",
    "iss": "https://issuer.example.com/",
    "sub": "af19c476f1dc4470fa3d0d9a25"
  }
}
]]></artwork>
      </section>
      <section anchor="revocation-expectations">
        <name>Revocation Expectations</name>
        <t>Upon receiving a revocation request, authorizing the request, and validating the identified user, the Authorization Server:</t>
        <ul spacing="normal">
          <li>
            <t><bcp14>MUST</bcp14> revoke all active refresh tokens</t>
          </li>
          <li>
            <t><bcp14>SHOULD</bcp14> invalidate all access tokens, although it is recognized that it might not be technically feasible to invalidate access tokens (see <xref target="access-tokens"/> below)</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> re-authenticate the user before issuing new access tokens or refresh tokens</t>
          </li>
        </ul>
      </section>
      <section anchor="revocation-response">
        <name>Revocation Response</name>
        <t>This specification indicates success and error conditions by using HTTP response codes, and does not define the response body format or content.</t>
        <section anchor="successful-response">
          <name>Successful Response</name>
          <t>To indicate that the request was successful and revocation of the requested set of tokens has begun, the server returns an HTTP 204 response.</t>
        </section>
        <section anchor="error-response">
          <name>Error Response</name>
          <t>The following HTTP response codes can be used to indicate various error conditions:</t>
          <ul spacing="normal">
            <li>
              <t><strong>400 Bad Request</strong>: The request was malformed, e.g. an unrecognized or unsupported type of subject identifier.</t>
            </li>
            <li>
              <t><strong>401 Unauthorized</strong>: Authentication provided was invalid.</t>
            </li>
            <li>
              <t><strong>403 Forbidden</strong>: Insufficient authorization, e.g. missing scopes.</t>
            </li>
            <li>
              <t><strong>404 User Not Found</strong>: The user indicated by the subject identifier was not found.</t>
            </li>
            <li>
              <t><strong>422 Unable to Process Request</strong>: Unable to log out the user.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="access-tokens">
      <name>Revocation of Access Tokens</name>
      <t>OAuth 2.0 allows deployment flexibility with respect to the style of
access tokens.  The access tokens may be self-contained (e.g. <xref target="RFC9068"/>) so that a
resource server needs no further interaction with an authorization
server issuing these tokens to perform an authorization decision of
the client requesting access to a protected resource.  A system
design may, however, instead use access tokens that are handles (also known as "reference tokens")
referring to authorization data stored at the authorization server.</t>
      <t>While these are not the only options, they illustrate the
implications for revocation.  In the latter case of reference tokens, the authorization
server is able to revoke an access token by removing it from storage. In the former case, without storing tokens, it may be impossible to revoke tokens without taking additional measures. One such measure is to use <xref target="I-D.ietf-oauth-status-list"/> to maintain a distributed and easily-compressed list of token revocation statuses.</t>
      <t>For this reason, revocation of access tokens is optional in this specification, since it may pose too significant of a burden for implementers. It is not required to revoke access tokens to be able to return a success code to the caller.</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 Global Token Revocation.</t>
      <dl>
        <dt>"global_token_revocation_endpoint":</dt>
        <dd>
          <t>The URL of the authorization server's global token revocation endpoint.</t>
        </dd>
        <dt>"global_token_revocation_endpoint_auth_methods_supported":</dt>
        <dd>
          <t><bcp14>OPTIONAL</bcp14>. JSON array containing a list of client authentication methods supported by this introspection endpoint.  The valid client authentication method values are those registered in the IANA "OAuth Token Endpoint Authentication Methods" registry <xref target="IANA.oauth-parameters"/> or those registered in the IANA "OAuth Access Token Types" registry <xref target="IANA.oauth-parameters"/>.  (These values are and will remain distinct, due to Section 7.2.)  If omitted, the set of supported authentication methods <bcp14>MUST</bcp14> be determined by other means.</t>
        </dd>
      </dl>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="revocation-request-authentication">
        <name>Authentication of Revocation Request</name>
        <t>While <xref target="revocation-request"/> requires that the revocation request is an authenticated request, the specifics of the authentication are out of scope of this specification.</t>
        <t>Since the revocation request ultimately has wide-reaching effects (a user is expected to be logged out of all devices), this presents a new Denial of Service attack vector. As such, the authentication used for this request <bcp14>SHOULD</bcp14> be narrowly scoped to avoid granting unnecessary privileges to the caller.</t>
        <t>For example, if using OAuth Bearer Tokens, the token <bcp14>SHOULD</bcp14> be issued with a single scope that enables it to perform the revocation request, and no other type of token issued should include this scope.</t>
        <t>If the authorization server is multi-tenant (supports multiple customers) through different identity providers, each identity provider <bcp14>SHOULD</bcp14> use its own scoped credential that is only authorized to revoke tokens for users within the same tenant.</t>
      </section>
      <section anchor="enumeration-of-user-accounts">
        <name>Enumeration of User Accounts</name>
        <t>Typically, an API that accepts a user identifier and returns different statuses depending on whether the user exists would provide an attack vector allowing enumeration of user accounts. This specification does require a "User Not Found" response, so would normally fall under this category. However, requests to the endpoint defined by this specification are required to be authenticated, so this is not considered a public endpoint.</t>
        <t>If the tool making the request is compromised, and the attacker can impersonate the requests from this tool (either by coercing the tool to make the request, or by extracting the credentials), then the attacker would be able to enumerate user accounts. However, since the request is not just testing the presence of a user account, but actually revoking the tokens associated with the user if successful, this would likely be easily visible in any audit logs as many users' tokens would be revoked in a short period of time.</t>
        <t>To mitigate some of the concerns of providing such a powerful API endpoint, the users that a particular client can request revocation for <bcp14>SHOULD</bcp14> be limited, and the authentication of the request <bcp14>SHOULD</bcp14> be used to scope the possible user revocation list to only users authorized to the client as described in <xref target="revocation-request-authentication"/>.</t>
        <t>For example, a multi-tenant identity provider that uses different signing keys for users associated with different tenants, can also use the same signing keys to authenticate revocation requests, such as creating a JWT to use as client authentication as described in <xref target="RFC7523"/>. This enables the authorization server receiving the request to only accept revocation requests for users that are associated with the particular tenant at the identity provider.</t>
      </section>
      <section anchor="malicious-authorization-server">
        <name>Malicious Authorization Server</name>
        <t>From the point of view of an identity provider that supports integrations with multiple downstream applications, there is an opportunity for a downstream application to maliciously set up a Global Token Revocation endpoint to harvest user identifiers and authentication of the revocation requests.</t>
        <t>Similarly as described in <xref target="revocation-request-authentication"/> above, each integration <bcp14>SHOULD</bcp14> be using separate authentication credentials, and each credential <bcp14>SHOULD</bcp14> be scoped as narrowly as possible, such that a malicious server that receives this authentication cannot replay it anywhere else to perform any actions on other systems.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="oauth-authorization-server-metadata">
        <name>OAuth Authorization Server Metadata</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>global_token_revocation_endpoint</tt></t>
        <t><strong>Metadata Description</strong>: URL of the authorization server's global token revocation endpoint.</t>
        <t><strong>Change Controller</strong>: IESG</t>
        <t><strong>Specification Document</strong>: Section X of [[ this specification ]]</t>
        <t><strong>Metadata Name</strong>: <tt>global_token_revocation_endpoint_auth_methods_supported</tt></t>
        <t><strong>Metadata Description</strong>: <bcp14>OPTIONAL</bcp14>. Indicates the list of client authentication methods supported by this endpoint.</t>
        <t><strong>Change Controller</strong>: IESG</t>
        <t><strong>Specification Document</strong>: Section X of [[ this specification ]]</t>
      </section>
    </section>
  </middle>
  <back>
    <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="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="RFC9493">
          <front>
            <title>Subject Identifiers for Security Event Tokens</title>
            <author fullname="A. Backman" initials="A." role="editor" surname="Backman"/>
            <author fullname="M. Scurtescu" initials="M." surname="Scurtescu"/>
            <author fullname="P. Jain" initials="P." surname="Jain"/>
            <date month="December" year="2023"/>
            <abstract>
              <t>Security events communicated within Security Event Tokens may support a variety of identifiers to identify subjects related to the event. This specification formalizes the notion of Subject Identifiers as structured information that describes a subject and named formats that define the syntax and semantics for encoding Subject Identifiers as JSON objects. It also establishes a registry for defining and allocating names for such formats as well as the JSON Web Token (JWT) "sub_id" Claim.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9493"/>
          <seriesInfo name="DOI" value="10.17487/RFC9493"/>
        </reference>
        <reference anchor="IANA.oauth-parameters" target="http://www.iana.org/assignments/oauth-parameters">
          <front>
            <title>OAuth Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </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="RFC7009">
          <front>
            <title>OAuth 2.0 Token Revocation</title>
            <author fullname="T. Lodderstedt" initials="T." role="editor" surname="Lodderstedt"/>
            <author fullname="S. Dronia" initials="S." surname="Dronia"/>
            <author fullname="M. Scurtescu" initials="M." surname="Scurtescu"/>
            <date month="August" year="2013"/>
            <abstract>
              <t>This document proposes an additional endpoint for OAuth authorization servers, which allows clients to notify the authorization server that a previously obtained refresh or access token is no longer needed. This allows the authorization server to clean up security credentials. A revocation request will invalidate the actual token and, if applicable, other tokens based on the same authorization grant.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7009"/>
          <seriesInfo name="DOI" value="10.17487/RFC7009"/>
        </reference>
        <reference anchor="RFC7523">
          <front>
            <title>JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification defines the use of a JSON Web Token (JWT) Bearer Token as a means for requesting an OAuth 2.0 access token as well as for client authentication.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7523"/>
          <seriesInfo name="DOI" value="10.17487/RFC7523"/>
        </reference>
        <reference anchor="RFC9068">
          <front>
            <title>JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens</title>
            <author fullname="V. Bertocci" initials="V." surname="Bertocci"/>
            <date month="October" year="2021"/>
            <abstract>
              <t>This specification defines a profile for issuing OAuth 2.0 access tokens in JSON Web Token (JWT) format. Authorization servers and resource servers from different vendors can leverage this profile to issue and consume access tokens in an interoperable manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9068"/>
          <seriesInfo name="DOI" value="10.17487/RFC9068"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-status-list">
          <front>
            <title>Token Status List</title>
            <author fullname="Tobias Looker" initials="T." surname="Looker">
              <organization>MATTR</organization>
            </author>
            <author fullname="Paul Bastian" initials="P." surname="Bastian">
         </author>
            <author fullname="Christian Bormann" initials="C." surname="Bormann">
         </author>
            <date day="3" month="March" year="2024"/>
            <abstract>
              <t>   This specification defines status list data structures and processing
   rules for representing the status of tokens secured by JSON Object
   Signing and Encryption (JOSE) or CBOR Object Signing and
   Encryption(COSE), such as JSON Web Tokens (JWTs), CBOR Web Tokens
   (CWTs) and ISO mdoc.  The status list token data structures
   themselves are also represented as JWTs or CWTs.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-status-list-02"/>
        </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>
      </references>
    </references>
    <?line 299?>

<section anchor="relationship-to-related-specifications">
      <name>Relationship to Related Specifications</name>
      <section anchor="rfc7009-token-revocation">
        <name>RFC7009: Token Revocation</name>
        <t>OAuth 2.0 Token Revocation <xref target="RFC7009"/> defines an endpoint for authorization servers that an OAuth client can use to notify the authorization server that a previously-obtained access or refresh token is no longer needed.</t>
        <t>The request is made by the OAuth client. The input to the Token Revocation request is the token itself, as well as the client's own authentication credentials.</t>
        <t>This differs from the Global Token Revocation endpoint which does not take a token as an input, but instead takes a user identifier as input. It is not called by OAuth clients, but is instead called by an external party such as a security monitoring tool or an identity provider that the user used to authenticate at the authorization server.</t>
      </section>
      <section anchor="openid-connect-front-channel-logout">
        <name>OpenID Connect Front-Channel Logout</name>
        <t><eref target="https://openid.net/specs/openid-connect-frontchannel-1_0.html">OpenID Connect Front-Channel Logout</eref> provides a mechanism for an OpenID Provider to log users out of Relying Parties by redirecting the user agent.</t>
        <t>While the logout request is the same direction as this draft describes, this relies on the redirection of the user agent, so is only applicable when the user is actively interacting with the application in a web browser.</t>
        <t>The Global Token Revocation request works regardless of whether the user is actively using the application, and is also applicable to non-web based applications.</t>
      </section>
      <section anchor="openid-connect-back-channel-logout">
        <name>OpenID Connect Back-Channel Logout</name>
        <t><eref target="https://openid.net/specs/openid-connect-backchannel-1_0.html">OpenID Connect Back-Channel Logout</eref> provides a mechanism for an OpenID Provider to log users out of a Relying Party by making a back-channel POST request containing the user identifier of the user to log out.</t>
        <t>This is the most similar existing logout specification to Global Token Revocation. However, there are still a few key differences that make it insufficient for the use cases enabled by Global Token Revocation.</t>
        <t>OpenID Connect Back-Channel Logout requires Relying Parties to clear state of any sessions for the user, but doesn't mention anything about access tokens. It also says that refresh tokens issued with the <tt>offline_access</tt> scope "<bcp14>SHOULD NOT</bcp14> be revoked". This is a concretely different outcome than is described by Global Token Revocation, which requires the revocation of all refresh tokens for the user regardless of whether the refresh token was issued with the <tt>offline_access</tt> scope.</t>
        <t>Additionally, OpenID Connect Back-Channel Logout assumes that the Relying Party implements OpenID Connect, which creates implementation challenges to use it when the Relying Party actually integrates with the identity provider using other specifications such as SAML.</t>
        <t>Global Token Revocation works regardless of the protocol that the user uses to authenticate, so works equally well with OpenID Connect and SAML integrations.</t>
      </section>
      <section anchor="shared-signals-framework">
        <name>Shared Signals Framework</name>
        <t>The Shared Signals Framework at the OpenID Foundation provides two specifications that have functionality related to session and token revocation.</t>
        <t><eref target="https://openid.net/specs/openid-caep-specification-1_0.html">Continuous Access Evaluation Profile (CAEP)</eref> defines several event types that can be sent between cooperating parties. In particular, the "Session Revoked" event can be sent from an identity provider to an authorization server when the user's session at the identity provider was revoked. The main difference between this and the Global Token Revocation request is that the CAEP event is a signal that may or may not be acted upon by the receiver, whereas the Global Token Revocation request is a command that has a defined list of expected outcomes.</t>
        <t><eref target="https://openid.net/specs/openid-risc-profile-specification-1_0.html">Risk Incident Sharing and Coordination (RISC)</eref> defines events that have somewhat stronger defined meanings compared to CAEP. In particular, the "Account Disabled" event has clear meaning and strongly implies that a receiver should also disable the specified account. However, RISC also has a mechanism for a user to opt out of sending events for their account, so it does not provide the same level of assurance as a Global Token Revocation request.</t>
        <t>Lastly, it is more complex to set up a receiver for CAEP and RISC events compared to a receiver for the Global Token Revocation request, so if the receiver is only interested in supporting the revocation use cases, it is much simpler to support the single POST request described in this draft.</t>
      </section>
    </section>
    <section anchor="document-history">
      <name>Document History</name>
      <t>(( To be removed from the final specification ))</t>
      <t>-03</t>
      <ul spacing="normal">
        <li>
          <t>Renamed property from <tt>subject</tt> to <tt>sub_id</tt> for consistency with JWT claim name defined in RFC9493</t>
        </li>
        <li>
          <t>Added reference to draft-ietf-oauth-status-list</t>
        </li>
        <li>
          <t>Added additional security considerations for authentication of the revocation request and malicious authorization servers</t>
        </li>
      </ul>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>Added security consideration around enumeration of user accounts</t>
        </li>
        <li>
          <t>Added an appendix describing the differences between this and related logout specifications</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Clarified revocation expectations</t>
        </li>
        <li>
          <t>Better definition of endpoint</t>
        </li>
        <li>
          <t>Added section defining endpoint in Authorization Server Metadata</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial Draft</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank the following people for their contributions and reviews of this specification: Apoorva Deshpande, George Fletcher, Karl McGuinness, Mike Jones.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
