summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc8707.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc8707.txt')
-rw-r--r--doc/rfc/rfc8707.txt547
1 files changed, 547 insertions, 0 deletions
diff --git a/doc/rfc/rfc8707.txt b/doc/rfc/rfc8707.txt
new file mode 100644
index 0000000..bfce71c
--- /dev/null
+++ b/doc/rfc/rfc8707.txt
@@ -0,0 +1,547 @@
+
+
+
+
+Internet Engineering Task Force (IETF) B. Campbell
+Request for Comments: 8707 Ping Identity
+Category: Standards Track J. Bradley
+ISSN: 2070-1721 Yubico
+ H. Tschofenig
+ Arm Limited
+ February 2020
+
+
+ Resource Indicators for OAuth 2.0
+
+Abstract
+
+ This document specifies an extension to the OAuth 2.0 Authorization
+ Framework defining request parameters that enable a client to
+ explicitly signal to an authorization server about the identity of
+ the protected resource(s) to which it is requesting access.
+
+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/rfc8707.
+
+Copyright Notice
+
+ Copyright (c) 2020 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. Resource Parameter
+ 2.1. Authorization Request
+ 2.2. Access Token Request
+ 3. Security Considerations
+ 4. Privacy Considerations
+ 5. IANA Considerations
+ 5.1. OAuth Parameters Registration
+ 5.2. OAuth Extensions Error Registration
+ 6. References
+ 6.1. Normative References
+ 6.2. Informative References
+ Acknowledgements
+ Authors' Addresses
+
+1. Introduction
+
+ Several years of deployment and implementation experience with the
+ OAuth 2.0 Authorization Framework [RFC6749] has uncovered a need (in
+ some circumstances, such as an authorization server servicing a
+ significant number of diverse resources) for the client to explicitly
+ signal to the authorization server where it intends to use the access
+ token it is requesting.
+
+ Knowing the protected resource (a.k.a. resource server, application,
+ API, etc.) that will process the access token enables the
+ authorization server to construct the token as necessary for that
+ entity. Properly encrypting the token (or content within the token)
+ to a particular resource, for example, requires knowing which
+ resource will receive and decrypt the token. Furthermore, various
+ resources oftentimes have different requirements with respect to the
+ data contained in (or referenced by) the token, and knowing the
+ resource where the client intends to use the token allows the
+ authorization server to mint the token accordingly.
+
+ Specific knowledge of the intended recipient(s) of the access token
+ also helps facilitate improved security characteristics of the token
+ itself. Bearer tokens, currently the most commonly utilized type of
+ OAuth access token, allow any party in possession of a token to get
+ access to the associated resources. To prevent misuse, several
+ important security assumptions must hold, one of which is that an
+ access token must only be valid for use at a specific protected
+ resource and for a specific scope of access. Section 5.2 of
+ [RFC6750], for example, prescribes including the token's intended
+ recipients within the token to prevent token redirect. When the
+ authorization server is informed of the resource that will process
+ the access token, it can restrict the intended audience of that token
+ to the given resource such that the token cannot be used successfully
+ at other resources.
+
+ OAuth scope, from Section 3.3 of [RFC6749], is sometimes overloaded
+ to convey the location or identity of the protected resource,
+ however, doing so isn't always feasible or desirable. Scope is
+ typically about what access is being requested rather than where that
+ access will be redeemed (e.g., "email", "admin:org", "user_photos",
+ "channels:read", and "channels:write" are a small sample of scope
+ values in use in the wild that convey only the type of access and not
+ the location or identity).
+
+ In some circumstances and for some deployments, a means for the
+ client to signal to the authorization server where it intends to use
+ the access token it's requesting is important and useful. A number
+ of implementations and deployments of OAuth 2.0 have already employed
+ proprietary parameters toward that end. Going forward, this
+ specification aspires to provide a standardized and interoperable
+ alternative to the proprietary approaches.
+
+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
+
+ 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. Resource Parameter
+
+ In requests to the authorization server, a client MAY indicate the
+ protected resource (a.k.a. resource server, application, API, etc.)
+ to which it is requesting access by including the following parameter
+ in the request.
+
+ resource
+ Indicates the target service or resource to which access is being
+ requested. Its value MUST be an absolute URI, as specified by
+ Section 4.3 of [RFC3986]. The URI MUST NOT include a fragment
+ component. It SHOULD NOT include a query component, but it is
+ recognized that there are cases that make a query component a
+ useful and necessary part of the resource parameter, such as when
+ one or more query parameters are used to scope requests to an
+ application. The "resource" parameter URI value is an identifier
+ representing the identity of the resource, which MAY be a locator
+ that corresponds to a network-addressable location where the
+ target resource is hosted. Multiple "resource" parameters MAY be
+ used to indicate that the requested token is intended to be used
+ at multiple resources.
+
+ The parameter value identifies a resource to which the client is
+ requesting access. The parameter can carry the location of a
+ protected resource, typically as an https URL or a more abstract
+ identifier. This enables the authorization server to apply policy as
+ appropriate for the resource, such as determining the type and
+ content of tokens to be issued, if and how tokens are encrypted, and
+ applying appropriate audience restrictions.
+
+ The client SHOULD provide the most specific URI that it can for the
+ complete API or set of resources it intends to access. In practice,
+ a client will know a base URI for the application or resource that it
+ interacts with, which is appropriate to use as the value of the
+ "resource" parameter. The client SHOULD use the base URI of the API
+ as the "resource" parameter value unless specific knowledge of the
+ resource dictates otherwise. For example, the value
+ "https://api.example.com/" would be used for a resource that is the
+ exclusive application on that host; however, if the resource is one
+ of many applications on that host, something like
+ "https://api.example.com/app/" would be used as a more specific
+ value. Another example is when an API has multiple endpoints, e.g.,
+ when System for Cross-domain Identity Management (SCIM) [RFC7644] has
+ endpoints such as "https://apps.example.com/scim/Users",
+ "https://apps.example.com/scim/Groups", and
+ "https://apps.example.com/scim/Schemas". The client would use
+ "https://apps.example.com/scim/" as the resource so that the issued
+ access token is valid for all the endpoints of the SCIM API.
+
+ The following error code is provided for an authorization server to
+ indicate problems with the requested resource(s) in response to an
+ authorization request or access token request. It can also be used
+ to inform the client that it has requested an invalid combination of
+ resource and scope.
+
+ invalid_target
+ The requested resource is invalid, missing, unknown, or malformed.
+
+ The authorization server SHOULD audience-restrict issued access
+ tokens to the resource(s) indicated by the "resource" parameter.
+ Audience restrictions can be communicated in JSON Web Tokens
+ [RFC7519] with the "aud" claim and the top-level member of the same
+ name provides the audience restriction information in a Token
+ Introspection [RFC7662] response. The authorization server may use
+ the exact "resource" value as the audience or it may map from that
+ value to a more general URI or abstract identifier for the given
+ resource.
+
+2.1. Authorization Request
+
+ When the "resource" parameter is used in an authorization request to
+ the authorization endpoint, it indicates the identity of the
+ protected resource(s) to which access is being requested. When an
+ access token will be returned directly from the authorization
+ endpoint via the implicit flow (Section 4.2 of OAuth 2.0 [RFC6749]),
+ the requested resource is applicable to that access token. In the
+ code flow (Section 4.1 of OAuth 2.0 [RFC6749]) where an intermediate
+ representation of the authorization grant (the authorization code) is
+ returned from the authorization endpoint, the requested resource is
+ applicable to the full authorization grant.
+
+ For an authorization request sent as a JSON Web Token (JWT), such as
+ when using the JWT Secured Authorization Request [JWT-SAR], a single
+ "resource" parameter value is represented as a JSON string while
+ multiple values are represented as an array of strings.
+
+ If the client omits the "resource" parameter when requesting
+ authorization, the authorization server MAY process the request with
+ no specific resource or by using a predefined default resource value.
+ Alternatively, the authorization server MAY require clients to
+ specify the resource(s) they intend to access and MAY fail requests
+ that omit the parameter with an "invalid_target" error. The
+ authorization server might use this data to inform the user about the
+ resources the client is going to access on their behalf, to apply
+ policy (e.g., refuse the request due to unknown resources), and to
+ determine the set of resources that can be used in subsequent access
+ token requests.
+
+ If the authorization server fails to parse the provided value(s) or
+ does not consider the resource(s) acceptable, it should reject the
+ request with an error response using the error code "invalid_target"
+ as the value of the "error" parameter and can provide additional
+ information regarding the reasons for the error using the
+ "error_description".
+
+ An example of an authorization request where the client tells the
+ authorization server that it wants an access token for use at
+ "https://api.example.com/app/" is shown in Figure 1 below (extra line
+ breaks and indentation are for display purposes only).
+
+ GET /as/authorization.oauth2?response_type=token
+ &client_id=example-client
+ &state=XzZaJlcwYew1u0QBrRv_Gw
+ &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
+ &resource=https%3A%2F%2Fapi.example.com%2Fapp%2F HTTP/1.1
+ Host: authorization-server.example.com
+
+ Figure 1: Implicit Flow Authorization Request
+
+ Below in Figure 2 is an example of an authorization request using the
+ "code" response type where the client is requesting access to the
+ resource owner's contacts and calendar data at
+ "https://cal.example.com/" and "https://contacts.example.com/" (extra
+ line breaks and indentation are for display purposes only).
+
+ GET /as/authorization.oauth2?response_type=code
+ &client_id=s6BhdRkqt3
+ &state=tNwzQ87pC6llebpmac_IDeeq-mCR2wLDYljHUZUAWuI
+ &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
+ &scope=calendar%20contacts
+ &resource=https%3A%2F%2Fcal.example.com%2F
+ &resource=https%3A%2F%2Fcontacts.example.com%2F HTTP/1.1
+ Host: authorization-server.example.com
+
+ Figure 2: Code Flow Authorization Request
+
+2.2. Access Token Request
+
+ When the "resource" parameter is used on an access token request made
+ to the token endpoint, for all grant types, it indicates the target
+ service or protected resource where the client intends to use the
+ requested access token.
+
+ The resource value(s) that is acceptable to an authorization server
+ in fulfilling an access token request is at its sole discretion based
+ on local policy or configuration. In the case of a "refresh_token"
+ or "authorization_code" grant type request, such policy may limit the
+ acceptable resources to those that were originally granted by the
+ resource owner or a subset thereof. In the "authorization_code" case
+ where the requested resources are a subset of the set of resources
+ originally granted, the authorization server will issue an access
+ token based on that subset of requested resources, whereas any
+ refresh token that is returned is bound to the full original grant.
+
+ When requesting a token, the client can indicate the desired target
+ service(s) where it intends to use that token by way of the
+ "resource" parameter and can indicate the desired scope of the
+ requested token using the "scope" parameter. The semantics of such a
+ request are that the client is asking for a token with the requested
+ scope that is usable at all the requested target services.
+ Effectively, the requested access rights of the token are the
+ cartesian product of all the scopes at all the target services. To
+ the extent possible, when issuing access tokens, the authorization
+ server should downscope the scope value associated with an access
+ token to the value the respective resource is able to process and
+ needs to know. (Here, "downscope" means give fewer permissions than
+ originally authorized by the resource owner.) This further improves
+ privacy as a list of scope values is an indication that the resource
+ owner uses the multiple various services listed; downscoping a token
+ to only that which is needed for a particular service can limit the
+ extent to which such information is revealed across different
+ services. As specified in Section 5.1 of [RFC6749], the
+ authorization server must indicate the access token's effective scope
+ to the client in the "scope" response parameter value when it differs
+ from the scope requested by the client.
+
+ Following from the code flow authorization request shown in Figure 2,
+ the below examples show an "authorization_code" grant type access
+ token request (Figure 3) and response (Figure 4) where the client
+ tells the authorization server that it wants the access token for use
+ at "https://cal.example.com/" (extra line breaks and indentation are
+ for display purposes only).
+
+ POST /as/token.oauth2 HTTP/1.1
+ Host: authorization-server.example.com
+ Authorization: Basic czZCaGRSa3F0Mzpoc3FFelFsVW9IQUU5cHg0RlNyNHlJ
+ Content-Type: application/x-www-form-urlencoded
+
+ grant_type=authorization_code
+ &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
+ &code=10esc29BWC2qZB0acc9v8zAv9ltc2pko105tQauZ
+ &resource=https%3A%2F%2Fcal.example.com%2F
+
+ Figure 3: Access Token Request
+
+ HTTP/1.1 200 OK
+ Content-Type: application/json
+ Cache-Control: no-cache, no-store
+
+ {
+ "access_token":"eyJhbGciOiJFUzI1NiIsImtpZCI6Ijc3In0.eyJpc3MiOi
+ JodHRwOi8vYXV0aG9yaXphdGlvbi1zZXJ2ZXIuZXhhbXBsZS5jb20iLCJzdWI
+ iOiJfX2JfYyIsImV4cCI6MTU4ODQyMDgwMCwic2NvcGUiOiJjYWxlbmRhciIs
+ ImF1ZCI6Imh0dHBzOi8vY2FsLmV4YW1wbGUuY29tLyJ9.nNWJ2dXSxaDRdMUK
+ lzs-cYIj8MDoM6Gy7pf_sKrLGsAFf1C2bDhB60DQfW1DZL5npdko1_Mmk5sUf
+ zkiQNVpYw",
+ "token_type":"Bearer",
+ "expires_in":3600,
+ "refresh_token":"4LTC8lb0acc6Oy4esc1Nk9BWC0imAwH7kic16BDC2",
+ "scope":"calendar"
+ }
+
+ Figure 4: Access Token Response
+
+ A subsequent access token request, using the refresh token, where the
+ client tells the authorization server that it wants an access token
+ for use at "https://contacts.example.com/" is shown in Figure 5 below
+ with the response shown in Figure 6 (extra line breaks and
+ indentation are for display purposes only).
+
+ POST /as/token.oauth2 HTTP/1.1
+ Host: authorization-server.example.com
+ Authorization: Basic czZCaGRSa3F0Mzpoc3FFelFsVW9IQUU5cHg0RlNyNHlJ
+ Content-Type: application/x-www-form-urlencoded
+
+ grant_type=refresh_token
+ &refresh_token=4LTC8lb0acc6Oy4esc1Nk9BWC0imAwH7kic16BDC2
+ &resource=https%3A%2F%2Fcontacts.example.com%2F
+
+ Figure 5: Access Token Request
+
+ HTTP/1.1 200 OK
+ Content-Type: application/json
+ Cache-Control: no-cache, no-store
+
+ {
+ "access_token":"eyJhbGciOiJFUzI1NiIsImtpZCI6Ijc3In0.eyJpc3MiOi
+ JodHRwOi8vYXV0aG9yaXphdGlvbi1zZXJ2ZXIuZXhhbXBsZS5jb20iLCJzdWI
+ iOiJfX2JfYyIsImV4cCI6MTU4ODQyMDgyNiwic2NvcGUiOiJjb250YWN0cyIs
+ ImF1ZCI6Imh0dHBzOi8vY29udGFjdHMuZXhhbXBsZS5jb20vIn0.5f4yhqazc
+ OSlJw4y94KPeWNEFQqj2cfeO8x4hr3YbHtIl3nQXnBMw5wREY5O1YbZED-GfH
+ UowfmtNaA5EikYAw",
+ "token_type":"Bearer",
+ "expires_in":3600,
+ "scope":"contacts"
+ }
+
+ Figure 6: Access Token Response
+
+3. Security Considerations
+
+ An audience-restricted access token that is legitimately presented to
+ a resource cannot then be taken by that resource and presented
+ elsewhere for illegitimate access to other resources. The "resource"
+ parameter enables a client to indicate the protected resources where
+ the requested access token will be used, which in turn enables the
+ authorization server to apply the appropriate audience restrictions
+ to the token.
+
+ Some servers may host user content or be multi-tenant. In order to
+ avoid attacks where one tenant uses an access token to illegitimately
+ access resources owned by a different tenant, it is important to use
+ a specific resource URI including any portion of the URI that
+ identifies the tenant, such as a path component. This will allow
+ access tokens to be audience-restricted in a way that identifies the
+ tenant and prevents their use, due to an invalid audience, at
+ resources owned by a different tenant.
+
+ Although multiple occurrences of the "resource" parameter may be
+ included in a token request, using only a single "resource" parameter
+ is encouraged. If a bearer token has multiple intended recipients
+ (audiences), then the token is valid at more than one protected
+ resource and can be used by any one of those resources to access any
+ of the others. Thus, a high degree of trust between the involved
+ parties is needed when using access tokens with multiple audiences.
+ Furthermore, an authorization server may be unwilling or unable to
+ fulfill a token request with multiple resources.
+
+ Whenever feasible, the "resource" parameter should correspond to the
+ network-addressable location of the protected resource. This makes
+ it possible for the client to validate that the resource being
+ requested controls the corresponding network location, reducing the
+ risk of malicious endpoints obtaining tokens meant for other
+ resources. If the "resource" parameter contains an abstract
+ identifier, it is the client's responsibility to validate out of band
+ that any network endpoint to which tokens are sent are the intended
+ audience for that identifier.
+
+4. Privacy Considerations
+
+ In typical OAuth deployments the authorization sever is in a position
+ to observe and track a significant amount of user and client
+ behavior. It is largely just inherent to the nature of OAuth, and
+ this document does little to affect that. In some cases, however,
+ such as when access token introspection is not being used, use of the
+ resource parameter defined herein may allow for tracking behavior at
+ a somewhat more granular and specific level than would otherwise be
+ possible in its absence.
+
+5. IANA Considerations
+
+5.1. OAuth Parameters Registration
+
+ This specification updates the following value in the IANA "OAuth
+ Parameters" registry [IANA.OAuth.Parameters] established by
+ [RFC6749].
+
+ Parameter name: resource
+ Parameter usage location: authorization request, token request
+ Change controller: IESG
+ Specification document(s): RFC 8707
+
+5.2. OAuth Extensions Error Registration
+
+ This specification updates the following error in the IANA "OAuth
+ Extensions Error Registry" [IANA.OAuth.Parameters] established by
+ [RFC6749].
+
+ Error name: invalid_target
+ Error usage location: implicit grant error response, token error
+ response
+ Related protocol extension: resource parameter
+ Change controller: IESG
+ Specification document(s): RFC 8707
+
+6. References
+
+6.1. Normative References
+
+ [IANA.OAuth.Parameters]
+ IANA, "OAuth Parameters",
+ <https://www.iana.org/assignments/oauth-parameters>.
+
+ [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>.
+
+ [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>.
+
+6.2. Informative References
+
+ [JWT-SAR] Sakimura, N. and J. Bradley, "The OAuth 2.0 Authorization
+ Framework: JWT Secured Authorization Request (JAR)", Work
+ in Progress, Internet-Draft, draft-ietf-oauth-jwsreq-20,
+ 21 October 2019,
+ <https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-20>.
+
+ [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>.
+
+ [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>.
+
+ [RFC7644] Hunt, P., Ed., Grizzle, K., Ansari, M., Wahlstroem, E.,
+ and C. Mortimore, "System for Cross-domain Identity
+ Management: Protocol", RFC 7644, DOI 10.17487/RFC7644,
+ September 2015, <https://www.rfc-editor.org/info/rfc7644>.
+
+ [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
+
+ This specification was developed within the OAuth Working Group under
+ the chairmanship of Hannes Tschofenig and Rifaat Shekh-Yusef with
+ Eric Rescorla, Benjamin Kaduk, and Roman Danyliw serving as Security
+ Area Directors. Additionally, the following individuals contributed
+ ideas, feedback, and wording that helped shape this specification:
+
+ Vittorio Bertocci, Sergey Beryozkin, Roman Danyliw, William Denniss,
+ Vladimir Dzhuvinov, George Fletcher, Dick Hardt, Phil Hunt, Michael
+ Jones, Benjamin Kaduk, Barry Leiba, Torsten Lodderstedt, Anthony
+ Nadalin, Justin Richer, Adam Roach, Nat Sakimura, Rifaat Shekh-Yusef,
+ Filip Skokan, Éric Vyncke, and Hans Zandbelt.
+
+Authors' Addresses
+
+ Brian Campbell
+ Ping Identity
+
+ Email: brian.d.campbell@gmail.com
+
+
+ John Bradley
+ Yubico
+
+ Email: ve7jtb@ve7jtb.com
+
+
+ Hannes Tschofenig
+ Arm Limited
+
+ Email: hannes.tschofenig@gmx.net