summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9068.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc9068.txt')
-rw-r--r--doc/rfc/rfc9068.txt771
1 files changed, 771 insertions, 0 deletions
diff --git a/doc/rfc/rfc9068.txt b/doc/rfc/rfc9068.txt
new file mode 100644
index 0000000..f236332
--- /dev/null
+++ b/doc/rfc/rfc9068.txt
@@ -0,0 +1,771 @@
+
+
+
+
+Internet Engineering Task Force (IETF) V. Bertocci
+Request for Comments: 9068 Auth0
+Category: Standards Track October 2021
+ISSN: 2070-1721
+
+
+ JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens
+
+Abstract
+
+ 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.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc9068.
+
+Copyright Notice
+
+ Copyright (c) 2021 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.
+
+Table of Contents
+
+ 1. Introduction
+ 1.1. Requirements Notation and Conventions
+ 1.2. Terminology
+ 2. JWT Access Token Header and Data Structure
+ 2.1. Header
+ 2.2. Data Structure
+ 2.2.1. Authentication Information Claims
+ 2.2.2. Identity Claims
+ 2.2.3. Authorization Claims
+ 2.2.3.1. Claims for Authorization Outside of Delegation
+ Scenarios
+ 3. Requesting a JWT Access Token
+ 4. Validating JWT Access Tokens
+ 5. Security Considerations
+ 6. Privacy Considerations
+ 7. IANA Considerations
+ 7.1. Media Type Registration
+ 7.1.1. Registry Content
+ 7.2. Claims Registration
+ 7.2.1. Registry Content
+ 7.2.1.1. Roles
+ 7.2.1.2. Groups
+ 7.2.1.3. Entitlements
+ 8. References
+ 8.1. Normative References
+ 8.2. Informative References
+ Acknowledgements
+ Author's Address
+
+1. Introduction
+
+ The original OAuth 2.0 Authorization Framework [RFC6749]
+ specification does not mandate any specific format for access tokens.
+ While that remains perfectly appropriate for many important
+ scenarios, in-market use has shown that many commercial OAuth 2.0
+ implementations elected to issue access tokens using a format that
+ can be parsed and validated by resource servers directly, without
+ further authorization server involvement. The approach is
+ particularly common in topologies where the authorization server and
+ resource server are not co-located, are not run by the same entity,
+ or are otherwise separated by some boundary. At the time of writing,
+ many commercial implementations leverage the JSON Web Token (JWT)
+ [RFC7519] format.
+
+ Many vendor-specific JWT access tokens share the same functional
+ layout, using JWT claims to convey the information needed to support
+ a common set of use cases: token validation, transporting
+ authorization information in the form of scopes and entitlements,
+ carrying identity information about the subject, and so on. The
+ differences are mostly confined to the claim names and syntax used to
+ represent the same entities, suggesting that interoperability could
+ be easily achieved by standardizing a common set of claims and
+ validation rules.
+
+ The assumption that access tokens are associated with specific
+ information doesn't appear only in commercial implementations.
+ Various specifications in the OAuth 2.0 family (such as resource
+ indicators [RFC8707], OAuth 2.0 bearer token usage [RFC6750], and
+ others) postulate the presence of scoping mechanisms, such as an
+ audience, in access tokens. The family of specifications associated
+ with introspection also indirectly suggests a fundamental set of
+ information that access tokens are expected to carry or at least be
+ associated with.
+
+ This specification aims to provide a standardized and interoperable
+ profile as an alternative to the proprietary JWT access token layouts
+ going forward. Besides defining a common set of mandatory and
+ optional claims, the profile provides clear indications on how
+ authorization request parameters determine the content of the issued
+ JWT access token, how an authorization server can publish metadata
+ relevant to the JWT access tokens it issues, and how a resource
+ server should validate incoming JWT access tokens.
+
+ Finally, this specification provides security and privacy
+ considerations meant to prevent common mistakes and anti-patterns
+ that are likely to occur in naive use of the JWT format to represent
+ access tokens.
+
+ Please note: Although both this document and [RFC7523] use JSON
+ Web Tokens in the context of the OAuth2 framework, the two
+ specifications differ in both intent and mechanics. Whereas
+ [RFC7523] defines how a JWT Bearer Token can be used to request an
+ access token, this document describes how to encode access tokens
+ in JWT format.
+
+1.1. Requirements Notation and Conventions
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in
+ BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+1.2. Terminology
+
+ JWT access token: An OAuth 2.0 access token encoded in JWT format
+ and complying with the requirements described in this
+ specification.
+
+ This specification uses the terms "access token", "refresh token",
+ "authorization server", "resource server", "authorization endpoint",
+ "authorization request", "authorization response", "token endpoint",
+ "grant type", "access token request", "access token response", and
+ "client" defined by The OAuth 2.0 Authorization Framework [RFC6749].
+
+2. JWT Access Token Header and Data Structure
+
+2.1. Header
+
+ JWT access tokens MUST be signed. Although JWT access tokens can use
+ any signing algorithm, use of asymmetric cryptography is RECOMMENDED
+ as it simplifies the process of acquiring validation information for
+ resource servers (see Section 4). JWT access tokens MUST NOT use
+ "none" as the signing algorithm. See Section 4 for more details.
+
+ Authorization servers and resource servers conforming to this
+ specification MUST include RS256 (as defined in [RFC7518]) among
+ their supported signature algorithms.
+
+ This specification registers the "application/at+jwt" media type,
+ which can be used to indicate that the content is a JWT access token.
+ JWT access tokens MUST include this media type in the "typ" header
+ parameter to explicitly declare that the JWT represents an access
+ token complying with this profile. Per the definition of "typ" in
+ Section 4.1.9 of [RFC7515], it is RECOMMENDED that the "application/"
+ prefix be omitted. Therefore, the "typ" value used SHOULD be
+ "at+jwt". See the Security Considerations section for details on the
+ importance of preventing OpenID Connect ID Tokens (as defined by
+ Section 2 of [OpenID.Core]) from being accepted as access tokens by
+ resource servers implementing this profile.
+
+2.2. Data Structure
+
+ The following claims are used in the JWT access token data structure.
+
+ iss REQUIRED - as defined in Section 4.1.1 of [RFC7519].
+
+ exp REQUIRED - as defined in Section 4.1.4 of [RFC7519].
+
+ aud REQUIRED - as defined in Section 4.1.3 of [RFC7519]. See
+ Section 3 for indications on how an authorization server should
+ determine the value of "aud" depending on the request.
+
+ sub REQUIRED - as defined in Section 4.1.2 of [RFC7519]. In cases
+ of access tokens obtained through grants where a resource owner is
+ involved, such as the authorization code grant, the value of "sub"
+ SHOULD correspond to the subject identifier of the resource owner.
+ In cases of access tokens obtained through grants where no
+ resource owner is involved, such as the client credentials grant,
+ the value of "sub" SHOULD correspond to an identifier the
+ authorization server uses to indicate the client application. See
+ Section 5 for more details on this scenario. Also, see Section 6
+ for a discussion about how different choices in assigning "sub"
+ values can impact privacy.
+
+ client_id REQUIRED - as defined in Section 4.3 of [RFC8693].
+
+ iat REQUIRED - as defined in Section 4.1.6 of [RFC7519]. This claim
+ identifies the time at which the JWT access token was issued.
+
+ jti REQUIRED - as defined in Section 4.1.7 of [RFC7519].
+
+2.2.1. Authentication Information Claims
+
+ The claims listed in this section MAY be issued in the context of
+ authorization grants involving the resource owner and reflect the
+ types and strength of authentication in the access token that the
+ authentication server enforced prior to returning the authorization
+ response to the client. Their values are fixed and remain the same
+ across all access tokens that derive from a given authorization
+ response, whether the access token was obtained directly in the
+ response (e.g., via the implicit flow) or after one or more token
+ exchanges (e.g., obtaining a fresh access token using a refresh token
+ or exchanging one access token for another via [RFC8693] procedures).
+
+ auth_time OPTIONAL - as defined in Section 2 of [OpenID.Core].
+
+ acr OPTIONAL - as defined in Section 2 of [OpenID.Core].
+
+ amr OPTIONAL - as defined in Section 2 of [OpenID.Core].
+
+2.2.2. Identity Claims
+
+ In the context of authorization grants involving the resource owner,
+ commercial authorization servers will often include resource owner
+ attributes directly in access tokens so that resource servers can
+ consume them directly for authorization or other purposes without any
+ further round trips to introspection ([RFC7662]) or UserInfo
+ ([OpenID.Core]) endpoints. This is particularly common in scenarios
+ where the client and the resource server belong to the same entity
+ and are part of the same solution, as is the case for first-party
+ clients invoking their own backend API.
+
+ This profile does not introduce any mechanism for a client to
+ directly request the presence of specific claims in JWT access
+ tokens, as the authorization server can determine what additional
+ claims are required by a particular resource server by taking the
+ client_id of the client and the "scope" and the "resource" parameters
+ included in the request into consideration.
+
+ Any additional identity attribute whose semantic is well described by
+ an entry in the "JSON Web Token (JWT)" IANA registry introduced in
+ [RFC7519] SHOULD be encoded using the corresponding claim name, if
+ that attribute is to be included in the JWT access token. Note that
+ the JWT IANA registry includes the claims found in Section 5.1 of
+ [OpenID.Core].
+
+ Authorization servers MAY return arbitrary attributes not defined in
+ any existing specification, as long as the corresponding claim names
+ are collision resistant or the access tokens are meant to be used
+ only within a private subsystem. Please refer to Sections 4.2 and
+ 4.3 of [RFC7519] for details.
+
+ Authorization servers including resource owner attributes in JWT
+ access tokens need to exercise care and verify that all privacy
+ requirements are met, as discussed in Section 6.
+
+2.2.3. Authorization Claims
+
+ If an authorization request includes a scope parameter, the
+ corresponding issued JWT access token SHOULD include a "scope" claim
+ as defined in Section 4.2 of [RFC8693].
+
+ All the individual scope strings in the "scope" claim MUST have
+ meaning for the resources indicated in the "aud" claim. See
+ Section 5 for more considerations about the relationship between
+ scope strings and resources indicated by the "aud" claim.
+
+2.2.3.1. Claims for Authorization Outside of Delegation Scenarios
+
+ Many authorization servers embed authorization attributes that go
+ beyond the delegated scenarios described by [RFC7519] in the access
+ tokens they issue. Typical examples include resource owner
+ memberships in roles and groups that are relevant to the resource
+ being accessed, entitlements assigned to the resource owner for the
+ targeted resource that the authorization server knows about, and so
+ on.
+
+ An authorization server wanting to include such attributes in a JWT
+ access token SHOULD use the "groups", "roles", and "entitlements"
+ attributes of the "User" resource schema defined by Section 4.1.2 of
+ [RFC7643]) as claim types.
+
+ Authorization servers SHOULD encode the corresponding claim values
+ according to the guidance defined in [RFC7643]. In particular, a
+ non-normative example of a "groups" attribute can be found in
+ Section 8.2 of [RFC7643]. No specific vocabulary is provided for
+ "roles" and "entitlements".
+
+ Section 7.2.1 of this document provides entries for registering
+ "groups", "roles", and "entitlements" attributes from [RFC7643] as
+ claim types to be used in this profile.
+
+3. Requesting a JWT Access Token
+
+ An authorization server can issue a JWT access token in response to
+ any authorization grant defined by [RFC6749] and subsequent
+ extensions meant to result in an access token.
+
+ If the request includes a "resource" parameter (as defined in
+ [RFC8707]), the resulting JWT access token "aud" claim SHOULD have
+ the same value as the "resource" parameter in the request.
+
+ Example request below:
+
+ GET /as/authorization.oauth2?response_type=code
+ &client_id=s6BhdRkqt3
+ &state=xyz
+ &scope=openid%20profile%20reademail
+ &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
+ &resource=https%3A%2F%2Frs.example.com%2F HTTP/1.1
+ Host: authorization-server.example.com
+
+ Figure 1: Authorization Request with Resource and Scope Parameters
+
+ Once redeemed, the code obtained from the request above will result
+ in a JWT access token in the form shown below:
+
+ Header:
+
+ {"typ":"at+JWT","alg":"RS256","kid":"RjEwOwOA"}
+
+ Claims:
+
+ {
+ "iss": "https://authorization-server.example.com/",
+ "sub": "5ba552d67",
+ "aud": "https://rs.example.com/",
+ "exp": 1639528912,
+ "iat": 1618354090,
+ "jti" : "dbe39bf3a3ba4238a513f51d6e1691c4",
+ "client_id": "s6BhdRkqt3",
+ "scope": "openid profile reademail"
+ }
+
+ Figure 2: The Header and JWT Claims Set of a JWT Access Token
+
+ The authorization server MUST NOT issue a JWT access token if the
+ authorization granted by the token would be ambiguous. See Section 5
+ for more details about common cases that might lead to ambiguity and
+ strategies an authorization server can enact to prevent them.
+
+ If the request does not include a "resource" parameter, the
+ authorization server MUST use a default resource indicator in the
+ "aud" claim. If a "scope" parameter is present in the request, the
+ authorization server SHOULD use it to infer the value of the default
+ resource indicator to be used in the "aud" claim. The mechanism
+ through which scopes are associated with default resource indicator
+ values is outside the scope of this specification. If the values in
+ the "scope" parameter refer to different default resource indicator
+ values, the authorization server SHOULD reject the request with
+ "invalid_scope" as described in Section 4.1.2.1 of [RFC6749].
+
+4. Validating JWT Access Tokens
+
+ For the purpose of facilitating validation data retrieval, it is
+ RECOMMENDED here that authorization servers sign JWT access tokens
+ with an asymmetric algorithm.
+
+ Authorization servers SHOULD use OAuth 2.0 Authorization Server
+ Metadata [RFC8414] to advertise to resource servers their signing
+ keys via "jwks_uri" and what "iss" claim value to expect via the
+ "issuer" metadata value. Alternatively, authorization servers
+ implementing OpenID Connect MAY use the OpenID Connect discovery
+ [OpenID.Discovery] document for the same purpose. If an
+ authorization server supports both OAuth 2.0 Authorization Server
+ Metadata and OpenID Connect discovery, the values provided MUST be
+ consistent across the two publication methods.
+
+ An authorization server MAY elect to use different keys to sign
+ OpenID Connect ID Tokens and JWT access tokens. This specification
+ does not provide a mechanism for identifying a specific key as the
+ one used to sign JWT access tokens. An authorization server can sign
+ JWT access tokens with any of the keys advertised via authorization
+ server (AS) metadata or OpenID Connect discovery. See Section 5 for
+ further guidance on security implications.
+
+ Resource servers receiving a JWT access token MUST validate it in the
+ following manner.
+
+ * The resource server MUST verify that the "typ" header value is
+ "at+jwt" or "application/at+jwt" and reject tokens carrying any
+ other value.
+
+ * If the JWT access token is encrypted, decrypt it using the keys
+ and algorithms that the resource server specified during
+ registration. If encryption was negotiated with the authorization
+ server at registration time and the incoming JWT access token is
+ not encrypted, the resource server SHOULD reject it.
+
+ * The issuer identifier for the authorization server (which is
+ typically obtained during discovery) MUST exactly match the value
+ of the "iss" claim.
+
+ * The resource server MUST validate that the "aud" claim contains a
+ resource indicator value corresponding to an identifier the
+ resource server expects for itself. The JWT access token MUST be
+ rejected if "aud" does not contain a resource indicator of the
+ current resource server as a valid audience.
+
+ * The resource server MUST validate the signature of all incoming
+ JWT access tokens according to [RFC7515] using the algorithm
+ specified in the JWT "alg" Header Parameter. The resource server
+ MUST reject any JWT in which the value of "alg" is "none". The
+ resource server MUST use the keys provided by the authorization
+ server.
+
+ * The current time MUST be before the time represented by the "exp"
+ claim. Implementers MAY provide for some small leeway, usually no
+ more than a few minutes, to account for clock skew.
+
+ The resource server MUST handle errors as described in Section 3.1 of
+ [RFC6750]. In particular, in case of any failure in the validation
+ checks listed above, the authorization server response MUST include
+ the error code "invalid_token". Please note that this requirement
+ does not prevent JWT access tokens from using authentication schemes
+ other than "Bearer".
+
+ If the JWT access token includes authorization claims as described in
+ Section 2.2.3, the resource server SHOULD use them in combination
+ with any other contextual information available to determine whether
+ the current call should be authorized or rejected. Details about how
+ a resource server performs those checks is beyond the scope of this
+ profile specification.
+
+5. Security Considerations
+
+ The JWT access token data layout described here is very similar to
+ that of the id_token as defined by [OpenID.Core]. The explicit
+ typing required in this profile, in line with the recommendations in
+ [RFC8725], helps the resource server to distinguish between JWT
+ access tokens and OpenID Connect ID Tokens.
+
+ Authorization servers should prevent scenarios where clients can
+ affect the value of the "sub" claim in ways that could confuse
+ resource servers. For example, if the authorization server elects to
+ use the client_id as the "sub" value for access tokens issued using
+ the client credentials grant, the authorization server should prevent
+ clients from registering an arbitrary client_id value, as this would
+ allow malicious clients to select the sub of a high-privilege
+ resource owner and confuse any authorization logic on the resource
+ server relying on the "sub" value. For more details, please refer to
+ Section 4.14 of [OAuth2.Security.BestPractices].
+
+ To prevent cross-JWT confusion, authorization servers MUST use a
+ distinct identifier as an "aud" claim value to uniquely identify
+ access tokens issued by the same issuer for distinct resources. For
+ more details on cross-JWT confusion, please refer to Section 2.8 of
+ [RFC8725].
+
+ Authorization servers should use particular care when handling
+ requests that might lead to ambiguous authorization grants. For
+ example, if a request includes multiple resource indicators, the
+ authorization server should ensure that each scope string included in
+ the resulting JWT access token, if any, can be unambiguously
+ correlated to a specific resource among the ones listed in the "aud"
+ claim. The details on how to recognize and mitigate this and other
+ ambiguous situations is highly scenario dependent and hence is out of
+ scope for this profile.
+
+ Authorization servers cannot rely on the use of different keys for
+ signing OpenID Connect ID Tokens and JWT tokens as a method to
+ safeguard against the consequences of leaking specific keys. Given
+ that resource servers have no way of knowing what key should be used
+ to validate JWT access tokens in particular, they have to accept
+ signatures performed with any of the keys published in AS metadata or
+ OpenID Connect discovery; consequently, an attacker just needs to
+ compromise any key among the ones published to be able to generate
+ and sign JWTs that will be accepted as valid by the resource server.
+
+6. Privacy Considerations
+
+ As JWT access tokens carry information by value, it now becomes
+ possible for clients and potentially even end users to directly peek
+ inside the token claims collection of unencrypted tokens.
+
+ The client MUST NOT inspect the content of the access token: the
+ authorization server and the resource server might decide to change
+ the token format at any time (for example, by switching from this
+ profile to opaque tokens); hence, any logic in the client relying on
+ the ability to read the access token content would break without
+ recourse. The OAuth 2.0 framework assumes that access tokens are
+ treated as opaque by clients. Administrators of authorization
+ servers should also take into account that the content of an access
+ token is visible to the client. Whenever client access to the access
+ token content presents privacy issues for a given scenario, the
+ authorization server needs to take explicit steps to prevent them.
+
+ In scenarios in which JWT access tokens are accessible to the end
+ user, it should be evaluated whether the information can be accessed
+ without privacy violations (for example, if an end user would simply
+ access his or her own personal information) or if steps must be taken
+ to enforce confidentiality.
+
+ Possible measures to prevent leakage of information to clients and
+ end users include: encrypting the access token, encrypting the
+ sensitive claims, omitting the sensitive claims or not using this
+ profile, and falling back on opaque access tokens.
+
+ In every scenario, the content of the JWT access token will
+ eventually be accessible to the resource server. It's important to
+ evaluate whether the resource server gained the proper entitlement to
+ have access to any content received in the form of claims, for
+ example, through user consent in some form, policies and agreements
+ with the organization running the authorization servers, and so on.
+ For example, a user might not wish to consent to granting given
+ resource server information about any of the non-mandatory claims
+ enumerated in Section 2 (and its subsections).
+
+ This profile mandates the presence of the "sub" claim in every JWT
+ access token, making it possible for resource servers to rely on that
+ information for correlating incoming requests with data stored
+ locally for the authenticated principal. Although the ability to
+ correlate requests might be required by design in many scenarios,
+ there are scenarios where the authorization server might want to
+ prevent correlation. The "sub" claim should be populated by the
+ authorization servers according to a privacy impact assessment. For
+ instance, if a solution requires preventing tracking of principal
+ activities across multiple resource servers, the authorization server
+ should ensure that JWT access tokens meant for different resource
+ servers have distinct "sub" values that cannot be correlated in the
+ event of resource server collusion. Similarly, if a solution
+ requires preventing a resource server from correlating the
+ principal's activity within the resource itself, the authorization
+ server should assign different "sub" values for every JWT access
+ token issued. In turn, the client should obtain a new JWT access
+ token for every call to the resource server to ensure that the
+ resource server receives different "sub" and "jti" values at every
+ call, thus preventing correlation between distinct requests.
+
+7. IANA Considerations
+
+7.1. Media Type Registration
+
+7.1.1. Registry Content
+
+ This section registers "application/at+jwt", a new media type
+ [RFC2046] in the "Media Types" registry [IANA.MediaTypes] in the
+ manner described in [RFC6838]. It can be used to indicate that the
+ content is an access token encoded in JWT format.
+
+ Type name: Application
+
+ Subtype name: at+jwt
+
+ Required parameters: N/A
+
+ Optional parameters: N/A
+
+ Encoding considerations: Binary; JWT values are encoded as a series
+ of base64url-encoded values (with trailing '=' characters
+ removed), some of which may be the empty string, separated by
+ period ('.') characters.
+
+ Security considerations: See the Security Considerations section of
+ RFC 9068.
+
+ Interoperability considerations: N/A
+
+ Published specification: RFC 9068
+
+ Applications that use this media type: Applications that access
+ resource servers using OAuth 2.0 access tokens encoded in JWT
+ format
+
+ Fragment identifier considerations: N/A
+
+ Additional information:
+
+ Magic number(s): N/A
+ File extension(s): N/A
+ Macintosh file type code(s): N/A
+
+ Person & email address to contact for further information:
+ Vittorio Bertocci <vittorio@auth0.com>
+
+ Intended usage: COMMON
+
+ Restrictions on usage: None
+
+ Author: Vittorio Bertocci <vittorio@auth0.com>
+
+ Change controller: IETF
+
+ Provisional registration? No
+
+7.2. Claims Registration
+
+ Section 2.2.3.1 of this specification refers to the attributes
+ "roles", "groups", "entitlements" defined in [RFC7643] to express
+ authorization information in JWT access tokens. This section
+ registers those attributes as claims in the "JSON Web Token (JWT)"
+ IANA registry introduced in [RFC7519].
+
+7.2.1. Registry Content
+
+7.2.1.1. Roles
+
+ Claim Name: roles
+ Claim Description: Roles
+ Change Controller: IETF
+ Specification Document(s): Section 4.1.2 of [RFC7643] and
+ Section 2.2.3.1 of RFC 9068
+
+7.2.1.2. Groups
+
+ Claim Name: groups
+ Claim Description: Groups
+ Change Controller: IETF
+ Specification Document(s): Section 4.1.2 of [RFC7643] and
+ Section 2.2.3.1 of RFC 9068
+
+7.2.1.3. Entitlements
+
+ Claim Name: entitlements
+ Claim Description: Entitlements
+ Change Controller: IETF
+ Specification Document(s): Section 4.1.2 of [RFC7643] and
+ Section 2.2.3.1 of RFC 9068
+
+8. References
+
+8.1. Normative References
+
+ [OpenID.Core]
+ Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and
+ C. Mortimore, "OpenID Connect Core 1.0 incorporating
+ errata set 1", November 2014,
+ <https://openid.net/specs/openid-connect-core-1_0.html>.
+
+ [OpenID.Discovery]
+ Sakimura, N., Bradley, J., Jones, M., and E. Jay, "OpenID
+ Connect Discovery 1.0 incorporating errata set 1",
+ November 2014, <https://openid.net/specs/openid-connect-
+ discovery-1_0.html>.
+
+ [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
+ Extensions (MIME) Part Two: Media Types", RFC 2046,
+ DOI 10.17487/RFC2046, November 1996,
+ <https://www.rfc-editor.org/info/rfc2046>.
+
+ [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>.
+
+ [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>.
+
+ [RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type
+ Specifications and Registration Procedures", BCP 13,
+ RFC 6838, DOI 10.17487/RFC6838, January 2013,
+ <https://www.rfc-editor.org/info/rfc6838>.
+
+ [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>.
+
+ [RFC7518] Jones, M., "JSON Web Algorithms (JWA)", RFC 7518,
+ DOI 10.17487/RFC7518, May 2015,
+ <https://www.rfc-editor.org/info/rfc7518>.
+
+ [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>.
+
+ [RFC7643] Hunt, P., Ed., Grizzle, K., Wahlstroem, E., and C.
+ Mortimore, "System for Cross-domain Identity Management:
+ Core Schema", RFC 7643, DOI 10.17487/RFC7643, September
+ 2015, <https://www.rfc-editor.org/info/rfc7643>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+ [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>.
+
+ [RFC8693] Jones, M., Nadalin, A., Campbell, B., Ed., Bradley, J.,
+ and C. Mortimore, "OAuth 2.0 Token Exchange", RFC 8693,
+ DOI 10.17487/RFC8693, January 2020,
+ <https://www.rfc-editor.org/info/rfc8693>.
+
+ [RFC8707] Campbell, B., Bradley, J., and H. Tschofenig, "Resource
+ Indicators for OAuth 2.0", RFC 8707, DOI 10.17487/RFC8707,
+ February 2020, <https://www.rfc-editor.org/info/rfc8707>.
+
+ [RFC8725] Sheffer, Y., Hardt, D., and M. Jones, "JSON Web Token Best
+ Current Practices", BCP 225, RFC 8725,
+ DOI 10.17487/RFC8725, February 2020,
+ <https://www.rfc-editor.org/info/rfc8725>.
+
+8.2. Informative References
+
+ [IANA.MediaTypes]
+ IANA, "Media Types",
+ <https://www.iana.org/assignments/media-types/>.
+
+ [OAuth2.Security.BestPractices]
+ Lodderstedt, T., Bradley, J., Labunets, A., and D. Fett,
+ "OAuth 2.0 Security Best Current Practice", Work in
+ Progress, Internet-Draft, draft-ietf-oauth-security-
+ topics-18, 13 April 2021,
+ <https://datatracker.ietf.org/doc/html/draft-ietf-oauth-
+ security-topics-18>.
+
+ [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>.
+
+ [RFC7523] Jones, M., Campbell, B., and C. Mortimore, "JSON Web Token
+ (JWT) Profile for OAuth 2.0 Client Authentication and
+ Authorization Grants", RFC 7523, DOI 10.17487/RFC7523, May
+ 2015, <https://www.rfc-editor.org/info/rfc7523>.
+
+ [RFC7662] Richer, J., Ed., "OAuth 2.0 Token Introspection",
+ RFC 7662, DOI 10.17487/RFC7662, October 2015,
+ <https://www.rfc-editor.org/info/rfc7662>.
+
+Acknowledgements
+
+ The initial set of requirements informing this specification was
+ extracted by numerous examples of access tokens issued in JWT format
+ by production systems. Thanks to Dominick Baier (IdentityServer),
+ Brian Campbell (Ping Identity), Daniel Dobalian (Microsoft), and Karl
+ Guinness (Okta) for providing sample tokens issued by their products
+ and services. Brian Campbell and Filip Skokan provided early
+ feedback that shaped the direction of the specification. This
+ profile was discussed at length during the OAuth Security Workshop
+ 2019, with several individuals contributing ideas and feedback. The
+ author would like to acknowledge the contributions of:
+
+ John Bradley, Brian Campbell, Vladimir Dzhuvinov, Torsten
+ Lodderstedt, Nat Sakimura, Hannes Tschofenig, and everyone who
+ actively participated in the unconference discussions.
+
+ The following individuals contributed useful feedback and insights on
+ the drafts, both at the IETF OAuth 2.0 WG mailing list and during the
+ 28th Internet Identity Workshop (IIW 28):
+
+ Dale Olds, George Fletcher, David Waite, Michael Engan, Mike Jones,
+ Hans Zandbelt, Vladimir Dzhuvinov, Martin Schanzenbach, Aaron
+ Parecki, Annabelle Richard Backman, Dick Hardt, Denis Pinkas,
+ Benjamin Kaduk, Dominick Baier, Andrii Deinega, Mike Jones, and
+ everyone who actively participated in the IIW 28 unconference
+ discussions and the IETF OAuth 2.0 WG mailing list discussions.
+ Thanks to Roman Danyliw for the AD review; Joseph Salowey and Roni
+ Even for the SECDIR and GENART reviews; and Francesca Palomini, Lars
+ Eggert, Murray Kucherawy, Roberto Polli, Martin Duke, Benjamin Kaduk
+ for the IESG reviews.
+
+Author's Address
+
+ Vittorio Bertocci
+ Auth0
+
+ Email: vittorio@auth0.com