<?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-parecki-oauth-global-token-revocation-05" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title>Global Token Revocation</title>
    <seriesInfo name="Internet-Draft" value="draft-parecki-oauth-global-token-revocation-05"/>
    <author fullname="Aaron Parecki">
      <organization>Okta</organization>
      <address>
        <email>aaron@parecki.com</email>
        <uri>https://aaronparecki.com</uri>
      </address>
    </author>
    <date year="2025" month="July" day="28"/>
    <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 a 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 for that user 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 upon 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 authenticates 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 an HTTP 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 directly 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 using the Email Identifier Format as defined in <xref section="3.2.2" sectionFormat="of" target="RFC9493"/>:</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 as defined in <xref section="3.2.4" sectionFormat="of" target="RFC9493"/> 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 as defined in <xref section="3.2.3" sectionFormat="of" target="RFC9493"/>:</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 (commonly referred to 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 <xref section="7.2" sectionFormat="of" target="RFC8414"/>.)  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 only 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 (TSL)</title>
            <author fullname="Tobias Looker" initials="T." surname="Looker">
              <organization>MATTR</organization>
            </author>
            <author fullname="Paul Bastian" initials="P." surname="Bastian">
              <organization>Bundesdruckerei</organization>
            </author>
            <author fullname="Christian Bormann" initials="C." surname="Bormann">
              <organization>SPRIND</organization>
            </author>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <t>   This specification defines a mechanism called Token Status List
   (abbreviated TSL), 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 JWT, SD-JWT VC, CBOR Web Token and ISO mdoc.  It also defines an
   extension point and a registry for future status mechanisms.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-status-list-12"/>
        </reference>
        <reference anchor="OpenID" target="https://openid.net/specs/openid-connect-core-1_0.html">
          <front>
            <title>OpenID Connect Core 1.0 incorporating errata set 2</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="2023" month="December"/>
          </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>-05</t>
      <ul spacing="normal">
        <li>
          <t>Editorial clarifications</t>
        </li>
        <li>
          <t>Added specific references to subject identifier formats</t>
        </li>
      </ul>
      <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:
H4sIAAAAAAAAA91c23LbSHq+x1N06IuRXCKtk8e2arO7siXPaGJZjiTXZGtq
ym4CTbJHIMCgAcmMS++SZ8mT5T91o0GCkrK1lapkLsYU2OjDf/z+Q3M4HCa1
rXNzpAY/5eVY5+q6vDGFujS3ZaprWxaDBP4107JaHilXZ0mSlWmh5/BGVulJ
PVzoyqQ3dljqpp4NpzTJsMZJhlWYZLj7MnHNeG6dg7/q5QJePzu9fp8UzXxs
qqMkgzWOkrQsnClc445UXTUmuT1SBwnMr2F7VyZtKlsvB8ldWd1Mq7JZwNNf
zVgdw8JlZf+DVlKfqrIu0zIfJDdmCUOzo0QNFe0OP9DOVLszfJaX07Kpk1tT
NLAJpZ4yuVJ8isGvsBtbTNVP+BI+n2ubw3Na8a/W1JNRWU3xC12lM/hiVtcL
d/TiBY7DR/bWjPywF/jgxbgq75x5QTO8wDentp41Y3hX66osFjcvNpAZx+ZA
SVdH6xCb3EheHaXlfNPrL/4HHB3N6jmQIdFEH6QxrK3UpMlzlo5jXE994rno
OzifLoSSR+riptb02DDBaH9/lbVxl/QlsPxI+ZPwEaIRSVFWc5jvlth2+f7d
j68O38jH14d7h/LxzeGbA/x4dvzxeMSngllgl7Wp3FGS2GKyNs/LXfn4anfX
T/nq5f6Bn3L3x9c05fCEmCfEcrWuGzfMLXAAvr1YmOLs5IhOImrGj9S7sihM
WsO/lVF7o11li7SsFmUFuwBhMhV80MqZWu3z27qamrolRQnT2GxUmPqFW5jU
yYNhyvPCv5UZ7n3ZJTbRDKRh6sSkBjVO7b3cUfu7+wf0XWAi/TeEzYAGfhyp
K31j502lu1/8MlJvK53lZtl9fj5Sv5SFcd2nb0cqM+rcZMZW5cp370bqvKxq
O4fdJkkyHA6VHru60mmdJBvskTKFHufGKWBhbeFf16QzpZ1CcrGJQGLazBQ1
6GKhp2aOH+uyzEEElYYZvgHjC5j7DAfhC6DXt/BGBaNgliKDySrz7w0oEj6B
V7pm4MpUtzzYFplF+6jqma6VrZWblU2ekYG5MUrnsOYEZmucqX5wsDJIBjKY
1An2XGS0kK1khnpmaCw8HSJXcH84v1NjM0FZAQva4ASFuZNJRkK5uc2AJ0ny
TJ0VdVVmTUr2LTku1AVuv/8MOB/MLvuxaBrdAs0wHZz3ouVFXFerNLewq5E6
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

-->

</rfc>
