Internet DRAFT - draft-gpujol-oauth-atrl
draft-gpujol-oauth-atrl
OAuth Working Group G. Pujol
Internet-Draft DS
Intended status: Standards Track September 10, 2018
Expires: March 14, 2019
OAuth 2.0 Token Revocation List
draft-gpujol-oauth-atrl-01
Abstract
This document defines a format and a standardised uri for a Token
Revocation List. An OAuth 2.0 authorization server can use those to
expose a current list of revoked access tokens identifiers that it
previously issued, intended for use by OAuth 2.0 resource servers.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on March 14, 2019.
Copyright Notice
Copyright (c) 2018 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Pujol Expires March 14, 2019 [Page 1]
Internet-Draft OAuth TRL September 2018
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Notational Conventions . . . . . . . . . . . . . . . . . 3
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1. Token Revocation List . . . . . . . . . . . . . . . . . . 4
2.2. Symbols and abbreviated terms . . . . . . . . . . . . . . 4
3. Authorization server metadata . . . . . . . . . . . . . . . . 4
4. Token Revocation List Format . . . . . . . . . . . . . . . . 4
5. Token Revocation List Request . . . . . . . . . . . . . . . . 6
6. Token Revocation List Response . . . . . . . . . . . . . . . 6
7. Security Considerations . . . . . . . . . . . . . . . . . . . 7
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7
8.1. OAuth 2.0 Authorization Server Metadata . . . . . . . . . 7
8.1.1. Registry Contents . . . . . . . . . . . . . . . . . . 7
9. Revision History . . . . . . . . . . . . . . . . . . . . . . 7
10. Normative References . . . . . . . . . . . . . . . . . . . . 8
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 9
1. Introduction
OAuth 2.0 Token Revocation [RFC7009] defines a way for OAuth 2.0
clients to revoke access tokens and refresh tokens issued by an OAuth
2.0 authorization server. While refresh token are typically only
used by the authorization server itself, access tokens on the other
hand are consumed by OAuth 2.0 resource servers; those are logically
separated from the authorization server, and must learn about the
revocation status of the access tokens they receive, if the local
security requirements mandates it.
Some deployments of OAuth 2.0 (or derived protocols) use signed JWT
as access tokens. Those access tokens are self-sufficient for
resource server to validate that the access token is currently not
expired, but provide no means for the resource server to obtain the
revocation status of the token.
OAuth 2.0 Token Introspection [RFC7662] defines a way for resource
servers to obtain the metadata attached to a given access token. For
performance reasons, this metadata may be put in cache by the
resource server, instead of calling the introspection endpoint
synchronously every time the same access token is received. This
voids the possibility for the resource server to be informed about a
revocation of an access token that occurs after the first call to the
introspection endpoint.
This specification defines a Token Revocation List (TRL), a document
exposed by the OAuth 2.0 authorization server, containing a list of
revoked access tokens identifiers. Resource servers can periodically
Pujol Expires March 14, 2019 [Page 2]
Internet-Draft OAuth TRL September 2018
retrieve that list to obtain the revocation status of access tokens.
By doing so, they can either flag currently cached introspected token
metadata as revoked, or avoid unnecessary calls to the introspection
endpoint for unknown tokens that are already expired when they are
received by the resource server.
This allows better performance for the authorization server and lower
response times for resource requests [RFC6750], since:
for resource server this allow caching the token introspection
response until the expiration date of the access token. The TRL
can be retrieved asynchronously to actual resource requests, so
the round trip to the authorization server does not add up to the
resource server response time.
for the authorization server this avoids unnecessary calls to the
introspection endpoint
This is especially important in scenarios where the authorization
server issues relatively long lived access tokens, and the
authorization server and resource servers are loosely coupled (e.g.
User Managed Access [UMA]), and the introspection endpoint is heavily
used.
Note that using short-lived access tokens should be the preferred way
to protect sensitive resources, rather than relying on the Token
Revocation List. Issuing a TRL does not provide any assurance that
resource servers will use it, nor does provide real time access token
revocation; depending on their configuration, resource servers might
take a few seconds or minutes to obtain a fresh TRL after any given
token is expired. During that time, access tokens may still be
considered as active by resource servers. This hardly avoidable
delay may however be better than not checking the revocation status
at all.
1.1. Notational Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [RFC2119].
2. Terminology
For the purposes of this specification, the following terms and
definitions in addition to what is defined in OAuth 2.0 Framework
[RFC6749], Authorization server [RFC6749], Resource Server [RFC6749],
Access Token [RFC6749], and JSON Web Encryption [RFC7519] apply.
Pujol Expires March 14, 2019 [Page 3]
Internet-Draft OAuth TRL September 2018
2.1. Token Revocation List
JWT [RFC7519] that holds a list of access tokens identifiers issued
by a given authorization server, that are revoked but not expired at
the time it is issued.
2.2. Symbols and abbreviated terms
The following abbreviations are common to this specification.
JWT JSON Web Token
URI Uniform Resource Identifier
URL Uniform Resource Locator
TRL Token Revocation List
3. Authorization server metadata
Authorization servers can have metadata describing their
configuration. The following authorization server metadata value is
used by this specification and are registered in the IANA "OAuth
Authorization Server Metadata" registry established in Section 7.1 of
OAuth 2.0 Authorization Server Metadata [RFC8414]:
token_revocation_list_uri OPTIONAL. URL [RFC3986] of an
authorization server, where resource servers can retrieve the
Token Revocation List. This url MUST use the https scheme. The
referenced document contains a JWT whose payload contains the list
of currently revoked access tokens. The exact contents of this
JWT is defined in the present specification.
If an authorization server advertises the presence of its token
revocation list, resource servers SHOULD use it as their preferred
way to obtain the revocation status of access tokens, rather that
using the token introspection endpoint.
4. Token Revocation List Format
A Token Revocation List (TRL) is a JWT. The JWT payload MUST contain
the following claims:
iss REQUIRED. MUST be the authorization server issuer
iat REQUIRED. time at which the TRL was generated, as defined in the
Pujol Expires March 14, 2019 [Page 4]
Internet-Draft OAuth TRL September 2018
exp REQUIRED. as defined in [RFC7519], time at which the TRL SHOULD
be considered as expired by resource servers.
rev_token_ids REQUIRED. a JSON list whose items are the identifiers
of the revoked and non-expired access tokens at the time the TRL
was generated.
The JWT payload MAY contain other claims. Claims not known or not
understood by resource servers MUST be ignored.
Token identifiers in the "rev_token_ids" MUST be unique token
identifiers, allowing resource server to unambiguously identify
revoked access tokens. For access tokens in JWT format, those
identifiers MUST match "jti" values of issued tokens. For access
tokens in CWT format, this must match the "cid" values. For access
tokens in other formats, "rev_token_ids" claim MAY include any kind
of token identifier, depending on the format of access tokens issued
by the authorisation server, as long as both resource servers and
authorization server have beforehand agreement on the identifier.
To allow resource servers to learn about the revocation status of a
token, the resource server must be able to obtain this unique token
identifier. This can be done either by reading the jti or cti claim
from access tokens that are in JWT or CWT formats, respectively, or
by reading the jti attribute as returned by the authorization server
introspection endpoint.
The TRL exposed by an OAuth authorization server at any given time
MUST always have an expiration date (exp) in the future and SHOULD
have an expiration date reasonably far away in the future. The exact
frequency for an authorization server to generate a new TRL and the
lifetime of generated TRLs is deployment specific and is out of scope
of this specification. Some authorization servers MAY choose to
generate a new TRL every time an access token is revoked, while
others MAY generate a new TRL periodically at a fixed time period.
Some MAY also choose to generate a new TRL only when an access token
considered as security sensitive is revoked (e.g. bound to a scope
that is internally flagged as sensitive).
A TRL SHOULD contain only a list of token identifiers that are
revoked and not expired at the time the TRL is generated. A TRL MUST
NOT contain a token identifier of a token that has not been revoked
before the TRL is generated. A TRL MAY contain some token
identifiers that have been revoked but are already expired at the
time the TRL is generated.
A TRL MUST be signed. That signature MUST use an asymmetric
algorithm, and the JWT header MUST contain both the "alg" and the
Pujol Expires March 14, 2019 [Page 5]
Internet-Draft OAuth TRL September 2018
"kid" claims as defined in RFC7515 [RFC7515]; the JWK referenced by
this kid MUST be part of the JWKS [RFC7517] exposed by the
authorization server on its jwks_uri.
A TRL MUST NOT be encrypted.
5. Token Revocation List Request
An authorization server Token Revocation List MUST be queried using
an HTTP "GET" request [RFC7230] at the URL defined in the
authorization server metadata.
The following is a non-normative example TRL request (with line
breaks for display purposes only):
GET /token_revocation_list HTTP/1.1
Host: server.example.com
Once a resource server obtains a TRL and that TRL reaches its
expiration date, a resource server SHOULD obtain a new TRL from the
authorization server. A resource server MAY obtain a new TRL before
the last TRL in its possession is expired. The frequency at which
the resource server obtains updated TRLs is out of the scope of this
specification, and depends on the resource server security
requirements.
6. Token Revocation List Response
An authorization server responds to a Token Revocation List request
with the most recently available TRL and the Content-Type
"application/jwt".
The following is a non-normative example TRL response (with line
breaks for display purposes only):
200 OK
Content-Type: application/jwt
Content-Length: 542
eyJhbGciOiJSUzI1NiIsImtpZCI6IlRSTF8yMDE4MDcxMCJ9.eydleHAnOiAxNTM
xMzIzMDY4LjI3NzM2LCAnaWF0JzogMTUzMTMyMzAwOC4yNzczNiwgJ2lzcyc6ICd
zZXJ2ZXIuZXhhbXBsZS5jb20nLCAncmV2X3Rva2VuX2lkcyc6IFsnMTIzNDU2Nzk
wJywgJzIzNDU2Nzg5MDEnXX0.LdMV-QMRsXwHxI4ZfQvQEv5_wNe22VHBa5x6CIb
G-3H-0R2nMnB_tNeA8nngNNo_vdDRj6Z25Bu6wlTQOM8VufPbUGyAM1Q3LLjPU8p
cEnM79Z8LW305M09ILaumgg94HrFSTPyEnlIGkVFF_x2vYTf-FbYEFlz2he3WDat
oPXXXh9gVlfTeinPwVtEZv-k740nUHVJjoSLSS7f_ZVmRnT_wUF_Wisx5YRtrkcu
8bXJqEykswgYmrzxewCHsc03qEV3HwQPc15_MJBF8tQT9vLTwnYSdMXJh9J5uREz
IEFqBQpQyIAtbqVT7eD9OMQOttWfB5LVtlnAVHRRdFVkuWA
Pujol Expires March 14, 2019 [Page 6]
Internet-Draft OAuth TRL September 2018
7. Security Considerations
The TRL is publicly exposed to anyone, not just authorized resource
servers. However the TRL does not contain security sensitive values,
just identifiers of tokens, that are not sufficient by themselves to
gain any unauthorized access to any protected resource. An
alternative would be to require some form of authentication of TRL
clients (which in this case, are themselves resource servers).
However, the added complexity, and performance impact (however small)
of managing that authentication would curb usage of the TRL.
The TRL MUST be signed by its issuer (the authorization server). The
resource servers MUST validate the signature before trusting the
contents of the TRL. This avoids misuse or denial of service when
the party controlling the https (server-side) connection (which, in
complex environments, may be different than the entity controlling
the authorization servers) removes revoked tokens from the TRL, and/
or issues a TRL containing non-revoked tokens. To effectively
protect against such attacks, the jwks_uri exposing the public keys
must not be exposed by the same party as the the
token_revocation_list_uri.
8. IANA Considerations
8.1. OAuth 2.0 Authorization Server Metadata
This specification registers the following values in the IANA "OAuth
2.0 Authorization Server Metadata" registry [IANA.OAuth.Parameters]
established by [RFC8414].
8.1.1. Registry Contents
o Metadata name: token_revocation_list_uri
o Metadata Description: The Token Revocation List Uri.
o Change controller: IESG
o Specification Document: Section 3 of [[ this specification ]]
9. Revision History
Note to the RFC Editor: Please remove this section from the final
RFC.
-01
o TRLs MUST be signed.
o Single TRL claim "rev_token_ids" for all kind of token identifiers
Pujol Expires March 14, 2019 [Page 7]
Internet-Draft OAuth TRL September 2018
o Token IDs can include "jti" from JWTs, "cti" from CWT, or other
form of ids.
10. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66,
RFC 3986, DOI 10.17487/RFC3986, January 2005,
<https://www.rfc-editor.org/info/rfc3986>.
[RFC6749] Hardt, D., Ed., "The OAuth 2.0 Authorization Framework",
RFC 6749, DOI 10.17487/RFC6749, October 2012,
<https://www.rfc-editor.org/info/rfc6749>.
[RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization
Framework: Bearer Token Usage", RFC 6750,
DOI 10.17487/RFC6750, October 2012,
<https://www.rfc-editor.org/info/rfc6750>.
[RFC7009] Lodderstedt, T., Ed., Dronia, S., and M. Scurtescu, "OAuth
2.0 Token Revocation", RFC 7009, DOI 10.17487/RFC7009,
August 2013, <https://www.rfc-editor.org/info/rfc7009>.
[RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
Protocol (HTTP/1.1): Message Syntax and Routing",
RFC 7230, DOI 10.17487/RFC7230, June 2014,
<https://www.rfc-editor.org/info/rfc7230>.
[RFC7515] Jones, M., Bradley, J., and N. Sakimura, "JSON Web
Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May
2015, <https://www.rfc-editor.org/info/rfc7515>.
[RFC7517] Jones, M., "JSON Web Key (JWK)", RFC 7517,
DOI 10.17487/RFC7517, May 2015,
<https://www.rfc-editor.org/info/rfc7517>.
[RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token
(JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015,
<https://www.rfc-editor.org/info/rfc7519>.
[RFC7662] Richer, J., Ed., "OAuth 2.0 Token Introspection",
RFC 7662, DOI 10.17487/RFC7662, October 2015,
<https://www.rfc-editor.org/info/rfc7662>.
Pujol Expires March 14, 2019 [Page 8]
Internet-Draft OAuth TRL September 2018
[RFC8392] Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig,
"CBOR Web Token (CWT)", RFC 8392, DOI 10.17487/RFC8392,
May 2018, <https://www.rfc-editor.org/info/rfc8392>.
[RFC8414] Jones, M., Sakimura, N., and J. Bradley, "OAuth 2.0
Authorization Server Metadata", RFC 8414,
DOI 10.17487/RFC8414, June 2018,
<https://www.rfc-editor.org/info/rfc8414>.
Author's Address
Guillaume Pujol
Digital Security
France
Email: guill.p.linux@gmail.com
Pujol Expires March 14, 2019 [Page 9]