<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-parecki-oauth-global-token-revocation-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.1 -->
  <front>
    <title>Global Token Revocation</title>
    <seriesInfo name="Internet-Draft" value="draft-parecki-oauth-global-token-revocation-04"/>
    <author fullname="Aaron Parecki">
      <organization>Okta</organization>
      <address>
        <email>aaron@parecki.com</email>
        <uri>https://aaronparecki.com</uri>
      </address>
    </author>
    <date year="2024" month="September" day="22"/>
    <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 a new 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 containing a subject identifier 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>sub_id</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>sub_id</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 client authentication 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 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="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="https://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">
              <organization>Robert Bosch GmbH</organization>
            </author>
            <date day="8" month="July" 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-03"/>
        </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>OpenID Connect Back-Channel Logout also 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>Additionally, OpenID Connect Back-Channel Logout identifies the user using the <tt>sub</tt> claim of an ID token. This limits the applicability, since there is no mechanism to identify the user by email address or other identifier that might be known between the identity provider and authorization server. Global Token Revocation instead relies on Security Event Token Subject Identifiers (<xref target="RFC9493"/>) which provide multiple options for identifying the user.</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>-04</t>
      <ul spacing="normal">
        <li>
          <t>Edits for clarity</t>
        </li>
        <li>
          <t>Fixed prose description renaming <tt>subject</tt> to <tt>sub_id</tt></t>
        </li>
      </ul>
      <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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
xkKc6MAynCNI9OtsqNb/CxiBfEzbUQAA

-->

</rfc>
