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

<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/draft-parecki-oauth-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/draft-parecki-oauth-global-token-revocation"/>.</t>
    </note>
  </front>
  <middle>
    <?line 79?>

<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. This specification RECOMMENDS using a private key JWT as described in <xref target="authn-private-key-jwt"/>. Other authentication methods such as OAuth 2.0 Bearer Token <xref target="RFC6750"/> <bcp14>MAY</bcp14> be used where appropriate.</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 anchor="authn-private-key-jwt">
        <name>Authentication Using Private Key JWT</name>
        <t>When the caller is an Identity Provider, the <bcp14>RECOMMENDED</bcp14> authentication method is to send a signed JWT as a Bearer token in the HTTP <tt>Authorization</tt> header, following the structure of the <tt>private_key_jwt</tt> client authentication method defined in <xref target="RFC7523"/>.</t>
        <t>The JWT <bcp14>MUST</bcp14> contain the following claims:</t>
        <dl>
          <dt><tt>iss</tt>:</dt>
          <dd>
            <t>The issuer identifier of the Identity Provider. If using OpenID Connect, this <bcp14>MUST</bcp14> be the same issuer value that the IdP uses as the issuer value in ID tokens.</t>
          </dd>
          <dt><tt>sub</tt>:</dt>
          <dd>
            <t>An identifier for the caller within the IdP. For OpenID Connect clients this is typically the <tt>client_id</tt>; for SAML integrations it is typically the <tt>appInstanceId</tt>.</t>
          </dd>
          <dt><tt>aud</tt>:</dt>
          <dd>
            <t>The URL of the Global Token Revocation endpoint. This <bcp14>MUST</bcp14> be the exact endpoint URL, without query string parameters or fragment identifiers.</t>
          </dd>
          <dt><tt>jti</tt>:</dt>
          <dd>
            <t>A unique identifier for this JWT. The authorization server <bcp14>SHOULD</bcp14> reject requests using a <tt>jti</tt> value that has been seen before within the token's validity window, in order to prevent replay attacks.</t>
          </dd>
          <dt><tt>iat</tt>:</dt>
          <dd>
            <t>The unit timestamp at which the JWT was created.</t>
          </dd>
          <dt><tt>exp</tt>:</dt>
          <dd>
            <t>The expiration time of the JWT. The JWT <bcp14>SHOULD</bcp14> be short-lived; a validity window of five minutes is <bcp14>RECOMMENDED</bcp14>.</t>
          </dd>
        </dl>
        <t>The JWT <bcp14>MUST</bcp14> be signed using an asymmetric algorithm (e.g., RS256 or ES256). The signing key <bcp14>SHOULD</bcp14> be the same private key that the IdP uses to sign its ID tokens or SAML assertions, so that the authorization server can verify the signature using the IdP's already-published public keys (e.g., via the IdP's JWKS endpoint referenced in its OpenID Connect discovery document <xref target="RFC8414"/>).</t>
        <t>The JWT is sent as a Bearer token:</t>
        <artwork><![CDATA[
POST /global-token-revocation
Host: as.example.com
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ...

{
  "sub_id": {
    "format": "email",
    "email": "user@example.com"
  }
}
]]></artwork>
        <t>Where the JWT payload is:</t>
        <artwork><![CDATA[
{
  "iss": "https://idp.example.com/",
  "sub": "client_id_of_integration",
  "aud": "https://as.example.com/global-token-revocation",
  "jti": "a3f8d2c1-4b7e-4f0a-9c2d-1e5b8a7f3d6c",
  "iat": 1741200000,
  "exp": 1741200300
}
]]></artwork>
        <t>The authorization server <bcp14>MUST</bcp14> validate the JWT signature, verify that the claims are well-formed, and confirm that the <tt>aud</tt> claim matches the revocation endpoint URL. It <bcp14>MUST</bcp14> also verify that the <tt>exp</tt> has not passed and that the <tt>jti</tt> has not been previously used.</t>
      </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="revocation-completion">
      <name>Revocation Completion Notification</name>
      <t>The 204 response defined in <xref target="revocation-response"/> indicates that the authorization server has accepted the revocation request and that the revocation process has begun. It does not guarantee that all tokens have been revoked at the moment the response is returned. In many deployments, particularly those with distributed token storage or self-contained access tokens, full revocation may complete asynchronously after the HTTP response has been sent.</t>
      <t>For use cases where a caller needs confirmation that revocation is fully complete — for example, a security incident management tool that must verify all active sessions have been terminated before proceeding — a notification mechanism is needed.</t>
      <t>Authorization servers that support the Shared Signals Framework <xref target="SSF"/> <bcp14>MAY</bcp14> use it to deliver a completion notification to the caller. Specifically, the authorization server <bcp14>MAY</bcp14> transmit a CAEP "Session Revoked" event <xref target="CAEP"/> to a preconfigured SSF stream for the caller once all tokens for the identified subject have been revoked and the re-authentication requirement has been enforced.</t>
      <t>The use of SSF for completion notification is entirely <bcp14>OPTIONAL</bcp14>. Callers that do not require confirmation of completion <bcp14>MAY</bcp14> rely solely on the 204 response as an indication that revocation has been initiated. The Global Token Revocation endpoint defined in this specification operates independently of whether SSF is supported by either party.</t>
      <t>If an authorization server supports SSF-based completion notifications, it <bcp14>SHOULD</bcp14> document this capability and the event types it delivers out of band, as no authorization server metadata parameter is defined here for this purpose.</t>
      <t>Note that the direction of the SSF stream in this case is reversed from the typical identity-provider-to-authorization-server direction described in <xref target="ssf-relationship"/>: here, the authorization server acts as the SSF transmitter, delivering events back to the caller (e.g., the identity provider or security tool) that initiated the revocation request.</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>The revocation request <bcp14>MUST</bcp14> be authenticated as described in <xref target="revocation-request"/>. The <bcp14>RECOMMENDED</bcp14> method is the private key JWT mechanism described in <xref target="authn-private-key-jwt"/>, which binds the credential to the specific endpoint URL via the <tt>aud</tt> claim and limits its validity window, reducing the risk of credential misuse or replay.</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. When using private key JWT authentication as described in <xref target="authn-private-key-jwt"/>, the <tt>iss</tt> claim serves this purpose naturally, as each IdP signs with its own private key.</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="18" month="February" year="2026"/>
            <abstract>
              <t>   This specification defines a status mechanism called Token Status
   List (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,
   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-18"/>
        </reference>
        <reference anchor="CAEP" target="https://openid.net/specs/openid-caep-1_0-final.html">
          <front>
            <title>Continuous Access Evaluation Profile 1.0</title>
            <author initials="A." surname="Tulshibagwale">
              <organization/>
            </author>
            <author initials="T." surname="Cappalli">
              <organization/>
            </author>
            <date year="2025"/>
          </front>
        </reference>
        <reference anchor="SSF" target="https://openid.net/specs/openid-sharedsignals-framework-1_0.html">
          <front>
            <title>OpenID Shared Signals and Events Framework Specification 1.0</title>
            <author initials="A." surname="Tulshibagwale">
              <organization/>
            </author>
            <author initials="T." surname="Cappalli">
              <organization/>
            </author>
            <author initials="M." surname="Scurtescu">
              <organization/>
            </author>
            <author initials="A." surname="Backman">
              <organization/>
            </author>
            <author initials="J." surname="Bradley">
              <organization/>
            </author>
            <author initials="S." surname="Miel">
              <organization/>
            </author>
            <date year="2025"/>
          </front>
        </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 386?>

<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="ssf-relationship">
        <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>
        <t>While SSF and Global Token Revocation serve complementary purposes, they can also be used together. As described in <xref target="revocation-completion"/>, an authorization server <bcp14>MAY</bcp14> use SSF to deliver a completion notification back to the caller once revocation is fully complete, reversing the typical signal direction so that the AS acts as SSF transmitter.</t>
      </section>
    </section>
    <section anchor="document-history">
      <name>Document History</name>
      <t>(( To be removed from the final specification ))</t>
      <t>-06</t>
      <ul spacing="normal">
        <li>
          <t>added description of how to use SSF to confirm revocation</t>
        </li>
        <li>
          <t>added description of how to use <tt>private_key_jwt</tt> to authenticate requests to the Authorization Server</t>
        </li>
      </ul>
      <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:
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

-->

</rfc>
