summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc7521.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc7521.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc7521.txt')
-rw-r--r--doc/rfc/rfc7521.txt1123
1 files changed, 1123 insertions, 0 deletions
diff --git a/doc/rfc/rfc7521.txt b/doc/rfc/rfc7521.txt
new file mode 100644
index 0000000..89340d8
--- /dev/null
+++ b/doc/rfc/rfc7521.txt
@@ -0,0 +1,1123 @@
+
+
+
+
+
+
+Internet Engineering Task Force (IETF) B. Campbell
+Request for Comments: 7521 Ping Identity
+Category: Standards Track C. Mortimore
+ISSN: 2070-1721 Salesforce
+ M. Jones
+ Y. Goland
+ Microsoft
+ May 2015
+
+
+ Assertion Framework for OAuth 2.0 Client Authentication and
+ Authorization Grants
+
+Abstract
+
+ This specification provides a framework for the use of assertions
+ with OAuth 2.0 in the form of a new client authentication mechanism
+ and a new authorization grant type. Mechanisms are specified for
+ transporting assertions during interactions with a token endpoint;
+ general processing rules are also specified.
+
+ The intent of this specification is to provide a common framework for
+ OAuth 2.0 to interwork with other identity systems using assertions
+ and to provide alternative client authentication mechanisms.
+
+ Note that this specification only defines abstract message flows and
+ processing rules. In order to be implementable, companion
+ specifications are necessary to provide the corresponding concrete
+ instantiations.
+
+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 5741.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ http://www.rfc-editor.org/info/rfc7521.
+
+
+
+
+
+
+
+
+Campbell, et al. Standards Track [Page 1]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+Copyright Notice
+
+ Copyright (c) 2015 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
+ (http://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 ....................................................3
+ 2. Notational Conventions ..........................................4
+ 3. Framework .......................................................4
+ 4. Transporting Assertions .........................................7
+ 4.1. Using Assertions as Authorization Grants ...................7
+ 4.1.1. Error Responses .....................................8
+ 4.2. Using Assertions for Client Authentication .................9
+ 4.2.1. Error Responses ....................................10
+ 5. Assertion Content and Processing ...............................10
+ 5.1. Assertion Metamodel .......................................10
+ 5.2. General Assertion Format and Processing Rules .............12
+ 6. Common Scenarios ...............................................12
+ 6.1. Client Authentication .....................................13
+ 6.2. Client Acting on Behalf of Itself .........................13
+ 6.3. Client Acting on Behalf of a User .........................13
+ 6.3.1. Client Acting on Behalf of an Anonymous User .......14
+ 7. Interoperability Considerations ................................14
+ 8. Security Considerations ........................................15
+ 8.1. Forged Assertion ..........................................15
+ 8.2. Stolen Assertion ..........................................15
+ 8.3. Unauthorized Disclosure of Personal Information ...........16
+ 8.4. Privacy Considerations ....................................17
+ 9. IANA Considerations ............................................17
+ 9.1. "assertion" Parameter Registration ........................17
+ 9.2. "client_assertion" Parameter Registration .................18
+ 9.3. "client_assertion_type" Parameter Registration ............18
+ 10. References ....................................................18
+ 10.1. Normative References .....................................18
+ 10.2. Informative References ...................................18
+ Acknowledgements ..................................................20
+ Authors' Addresses ................................................20
+
+
+
+Campbell, et al. Standards Track [Page 2]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+1. Introduction
+
+ An assertion is a package of information that facilitates the sharing
+ of identity and security information across security domains.
+ Section 3 provides a more detailed description of the concept of an
+ assertion for the purpose of this specification.
+
+ OAuth 2.0 [RFC6749] is an authorization framework that enables a
+ third-party application to obtain limited access to a protected HTTP
+ resource. In OAuth, those third-party applications are called
+ clients; they access protected resources by presenting an access
+ token to the HTTP resource. Access tokens are issued to clients by
+ an authorization server with the (sometimes implicit) approval of the
+ resource owner. These access tokens are typically obtained by
+ exchanging an authorization grant, which represents the authorization
+ granted by the resource owner (or by a privileged administrator).
+ Several authorization grant types are defined to support a wide range
+ of client types and user experiences. OAuth also provides an
+ extensibility mechanism for defining additional grant types, which
+ can serve as a bridge between OAuth and other protocol frameworks.
+
+ This specification provides a general framework for the use of
+ assertions as authorization grants with OAuth 2.0. It also provides
+ a framework for assertions to be used for client authentication. It
+ provides generic mechanisms for transporting assertions during
+ interactions with an authorization server's token endpoint as well as
+ general rules for the content and processing of those assertions.
+ The intent is to provide an alternative client authentication
+ mechanism (one that doesn't send client secrets) and to facilitate
+ the use of OAuth 2.0 in client-server integration scenarios, where
+ the end user may not be present.
+
+ This specification only defines abstract message flows and processing
+ rules. In order to be implementable, companion specifications are
+ necessary to provide the corresponding concrete instantiations. For
+ instance, "Security Assertion Markup Language (SAML) 2.0 Profile for
+ OAuth 2.0 Client Authentication and Authorization Grants" [RFC7522]
+ defines a concrete instantiation for Security Assertion Markup
+ Language (SAML) 2.0 Assertions and "JSON Web Token (JWT) Profile for
+ OAuth 2.0 Client Authentication and Authorization Grants" [RFC7523]
+ defines a concrete instantiation for JWTs.
+
+ Note: The use of assertions for client authentication is orthogonal
+ to and separable from using assertions as an authorization grant.
+ They can be used either in combination or separately. Client
+ assertion authentication is nothing more than an alternative way for
+ a client to authenticate to the token endpoint and must be used in
+ conjunction with some grant type to form a complete and meaningful
+
+
+
+Campbell, et al. Standards Track [Page 3]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+ protocol request. Assertion authorization grants may be used with or
+ without client authentication or identification. Whether or not
+ client authentication is needed in conjunction with an assertion
+ authorization grant, as well as the supported types of client
+ authentication, are policy decisions at the discretion of the
+ authorization server.
+
+2. 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 [RFC2119].
+
+ Throughout this document, values are quoted to indicate that they are
+ to be taken literally. When using these values in protocol messages,
+ the quotes must not be used as part of the value.
+
+3. Framework
+
+ An assertion is a package of information that allows identity and
+ security information to be shared across security domains. An
+ assertion typically contains information about a subject or
+ principal, information about the party that issued the assertion and
+ when was it issued, and the conditions under which the assertion is
+ to be considered valid, such as when and where it can be used.
+
+ The entity that creates and signs or integrity-protects the assertion
+ is typically known as the "Issuer", and the entity that consumes the
+ assertion and relies on its information is typically known as the
+ "Relying Party". In the context of this document, the authorization
+ server acts as a relying party.
+
+ Assertions used in the protocol exchanges defined by this
+ specification MUST always be integrity protected using a digital
+ signature or Message Authentication Code (MAC) applied by the issuer,
+ which authenticates the issuer and ensures integrity of the assertion
+ content. In many cases, the assertion is issued by a third party,
+ and it must be protected against tampering by the client that
+ presents it. An assertion MAY additionally be encrypted, preventing
+ unauthorized parties (such as the client) from inspecting the
+ content.
+
+ Although this document does not define the processes by which the
+ client obtains the assertion (prior to sending it to the
+ authorization server), there are two common patterns described below.
+
+
+
+
+
+
+Campbell, et al. Standards Track [Page 4]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+ In the first pattern, depicted in Figure 1, the client obtains an
+ assertion from a third-party entity capable of issuing, renewing,
+ transforming, and validating security tokens. Typically, such an
+ entity is known as a "security token service" (STS) or just "token
+ service", and a trust relationship (usually manifested in the
+ exchange of some kind of key material) exists between the token
+ service and the relying party. The token service is the assertion
+ issuer; its role is to fulfill requests from clients, which present
+ various credentials, and mint assertions as requested, fill them with
+ appropriate information, and integrity-protect them with a signature
+ or message authentication code. WS-Trust [OASIS.WS-Trust] is one
+ available standard for requesting security tokens (assertions).
+
+ Relying
+ Party Client Token Service
+ | | |
+ | | 1) Request Assertion |
+ | |------------------------>|
+ | | |
+ | | 2) Assertion |
+ | |<------------------------|
+ | 3) Assertion | |
+ |<-------------------------| |
+ | | |
+ | 4) OK or Failure | |
+ |------------------------->| |
+ | | |
+ | | |
+
+ Figure 1: Assertion Created by Third Party
+
+ In the second pattern, depicted in Figure 2, the client creates
+ assertions locally. To apply the signatures or message
+ authentication codes to assertions, it has to obtain key material:
+ either symmetric keys or asymmetric key pairs. The mechanisms for
+ obtaining this key material are beyond the scope of this
+ specification.
+
+ Although assertions are usually used to convey identity and security
+ information, self-issued assertions can also serve a different
+ purpose. They can be used to demonstrate knowledge of some secret,
+ such as a client secret, without actually communicating the secret
+ directly in the transaction. In that case, additional information
+ included in the assertion by the client itself will be of limited
+ value to the relying party, and for this reason, only a bare minimum
+ of information is typically included in such an assertion, such as
+ information about issuing and usage conditions.
+
+
+
+
+Campbell, et al. Standards Track [Page 5]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+ Relying
+ Party Client
+ | |
+ | | 1) Create
+ | | Assertion
+ | |--------------+
+ | | |
+ | | 2) Assertion |
+ | |<-------------+
+ | 3) Assertion |
+ |<-------------------------|
+ | |
+ | 4) OK or Failure |
+ |------------------------->|
+ | |
+ | |
+
+ Figure 2: Self-Issued Assertion
+
+ Deployments need to determine the appropriate variant to use based on
+ the required level of security, the trust relationship between the
+ entities, and other factors.
+
+ From the perspective of what must be done by the entity presenting
+ the assertion, there are two general types of assertions:
+
+ 1. Bearer Assertions: Any entity in possession of a bearer assertion
+ (the bearer) can use it to get access to the associated resources
+ (without demonstrating possession of a cryptographic key). To
+ prevent misuse, bearer assertions need to be protected from
+ disclosure in storage and in transport. Secure communication
+ channels are required between all entities to avoid leaking the
+ assertion to unauthorized parties.
+
+ 2. Holder-of-Key Assertions: To access the associated resources, the
+ entity presenting the assertion must demonstrate possession of
+ additional cryptographic material. The token service thereby
+ binds a key identifier to the assertion, and the client has to
+ demonstrate to the relying party that it knows the key
+ corresponding to that identifier when presenting the assertion.
+
+ The protocol parameters and processing rules defined in this document
+ are intended to support a client presenting a bearer assertion to an
+ authorization server. They are not directly suitable for use with
+ holder-of-key assertions. While they could be used as a baseline for
+ a holder-of-key assertion system, there would be a need for
+
+
+
+
+
+Campbell, et al. Standards Track [Page 6]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+ additional mechanisms (to support proof-of-possession of the secret
+ key), and possibly changes to the security model (e.g., to relax the
+ requirement for an Audience).
+
+4. Transporting Assertions
+
+ This section defines HTTP parameters for transporting assertions
+ during interactions with a token endpoint of an OAuth authorization
+ server. Because requests to the token endpoint result in the
+ transmission of clear-text credentials (in both the HTTP request and
+ response), all requests to the token endpoint MUST use Transport
+ Layer Security (TLS), as mandated in Section 3.2 of OAuth 2.0
+ [RFC6749].
+
+4.1. Using Assertions as Authorization Grants
+
+ This section defines the use of assertions as authorization grants,
+ based on the definition provided in Section 4.5 of OAuth 2.0
+ [RFC6749]. When using assertions as authorization grants, the client
+ includes the assertion and related information using the following
+ HTTP request parameters:
+
+ grant_type
+ REQUIRED. The format of the assertion as defined by the
+ authorization server. The value will be an absolute URI.
+
+ assertion
+ REQUIRED. The assertion being used as an authorization grant.
+ Specific serialization of the assertion is defined by profile
+ documents.
+
+ scope
+ OPTIONAL. The requested scope as described in Section 3.3 of
+ OAuth 2.0 [RFC6749]. When exchanging assertions for access
+ tokens, the authorization for the token has been previously
+ granted through some out-of-band mechanism. As such, the
+ requested scope MUST be equal to or less than the scope originally
+ granted to the authorized accessor. The authorization server MUST
+ limit the scope of the issued access token to be equal to or less
+ than the scope originally granted to the authorized accessor.
+
+ Authentication of the client is optional, as described in
+ Section 3.2.1 of OAuth 2.0 [RFC6749], and consequently, the
+ "client_id" is only needed when a form of client authentication that
+ relies on the parameter is used.
+
+
+
+
+
+
+Campbell, et al. Standards Track [Page 7]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+ The following example demonstrates an assertion being used as an
+ authorization grant (with extra line breaks for display purposes
+ only):
+
+ POST /token HTTP/1.1
+ Host: server.example.com
+ Content-Type: application/x-www-form-urlencoded
+
+ grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Asaml2-bearer&
+ assertion=PHNhbWxwOl...[omitted for brevity]...ZT4
+
+ An assertion used in this context is generally a short-lived
+ representation of the authorization grant, and authorization servers
+ SHOULD NOT issue access tokens with a lifetime that exceeds the
+ validity period of the assertion by a significant period. In
+ practice, that will usually mean that refresh tokens are not issued
+ in response to assertion grant requests, and access tokens will be
+ issued with a reasonably short lifetime. Clients can refresh an
+ expired access token by requesting a new one using the same
+ assertion, if it is still valid, or with a new assertion.
+
+ An IETF URN for use as the "grant_type" value can be requested using
+ the template in [RFC6755]. A URN of the form
+ urn:ietf:params:oauth:grant-type:* is suggested.
+
+4.1.1. Error Responses
+
+ If an assertion is not valid or has expired, the authorization server
+ constructs an error response as defined in OAuth 2.0 [RFC6749]. The
+ value of the "error" parameter MUST be the "invalid_grant" error
+ code. The authorization server MAY include additional information
+ regarding the reasons the assertion was considered invalid using the
+ "error_description" or "error_uri" parameters.
+
+ For example:
+
+ HTTP/1.1 400 Bad Request
+ Content-Type: application/json
+ Cache-Control: no-store
+
+ {
+ "error":"invalid_grant",
+ "error_description":"Audience validation failed"
+ }
+
+
+
+
+
+
+
+Campbell, et al. Standards Track [Page 8]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+4.2. Using Assertions for Client Authentication
+
+ The following section defines the use of assertions as client
+ credentials as an extension of Section 2.3 of OAuth 2.0 [RFC6749].
+ When using assertions as client credentials, the client includes the
+ assertion and related information using the following HTTP request
+ parameters:
+
+ client_assertion_type
+ REQUIRED. The format of the assertion as defined by the
+ authorization server. The value will be an absolute URI.
+
+ client_assertion
+ REQUIRED. The assertion being used to authenticate the client.
+ Specific serialization of the assertion is defined by profile
+ documents.
+
+ client_id
+ OPTIONAL. The client identifier as described in Section 2.2 of
+ OAuth 2.0 [RFC6749]. The "client_id" is unnecessary for client
+ assertion authentication because the client is identified by the
+ subject of the assertion. If present, the value of the
+ "client_id" parameter MUST identify the same client as is
+ identified by the client assertion.
+
+ The following example demonstrates a client authenticating using an
+ assertion during an access token request, as defined in Section 4.1.3
+ of OAuth 2.0 [RFC6749] (with extra line breaks for display purposes
+ only):
+
+ POST /token HTTP/1.1
+ Host: server.example.com
+ Content-Type: application/x-www-form-urlencoded
+
+ grant_type=authorization_code&
+ code=n0esc3NRze7LTCu7iYzS6a5acc3f0ogp4&
+ client_assertion_type=urn%3Aietf%3Aparams%3Aoauth
+ %3Aclient-assertion-type%3Asaml2-bearer&
+ client_assertion=PHNhbW...[omitted for brevity]...ZT
+
+ Token endpoints can differentiate between assertion-based credentials
+ and other client credential types by looking for the presence of the
+ "client_assertion" and "client_assertion_type" parameters, which will
+ only be present when using assertions for client authentication.
+
+ An IETF URN for use as the "client_assertion_type" value may be
+ requested using the template in [RFC6755]. A URN of the form
+ urn:ietf:params:oauth:client-assertion-type:* is suggested.
+
+
+
+Campbell, et al. Standards Track [Page 9]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+4.2.1. Error Responses
+
+ If an assertion is invalid for any reason or if more than one client
+ authentication mechanism is used, the authorization server constructs
+ an error response as defined in OAuth 2.0 [RFC6749]. The value of
+ the "error" parameter MUST be the "invalid_client" error code. The
+ authorization server MAY include additional information regarding the
+ reasons the client assertion was considered invalid using the
+ "error_description" or "error_uri" parameters.
+
+ For example:
+
+ HTTP/1.1 400 Bad Request
+ Content-Type: application/json
+ Cache-Control: no-store
+
+ {
+ "error":"invalid_client"
+ "error_description":"assertion has expired"
+ }
+
+5. Assertion Content and Processing
+
+ This section provides a general content and processing model for the
+ use of assertions in OAuth 2.0 [RFC6749].
+
+5.1. Assertion Metamodel
+
+ The following are entities and metadata involved in the issuance,
+ exchange, and processing of assertions in OAuth 2.0. These are
+ general terms, abstract from any particular assertion format.
+ Mappings of these terms into specific representations are provided by
+ profiles of this specification.
+
+ Issuer
+ A unique identifier for the entity that issued the assertion.
+ Generally, this is the entity that holds the key material used to
+ sign or integrity-protect the assertion. Examples of issuers are
+ OAuth clients (when assertions are self-issued) and third-party
+ security token services. If the assertion is self-issued, the
+ Issuer value is the client identifier. If the assertion was
+ issued by a security token service (STS), the Issuer should
+ identify the STS in a manner recognized by the authorization
+ server. In the absence of an application profile specifying
+ otherwise, compliant applications MUST compare Issuer values using
+ the Simple String Comparison method defined in Section 6.2.1 of
+ RFC 3986 [RFC3986].
+
+
+
+
+Campbell, et al. Standards Track [Page 10]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+ Subject
+ A unique identifier for the principal that is the subject of the
+ assertion.
+
+ * When using assertions for client authentication, the Subject
+ identifies the client to the authorization server using the
+ value of the "client_id" of the OAuth client.
+
+ * When using assertions as an authorization grant, the Subject
+ identifies an authorized accessor for which the access token is
+ being requested (typically, the resource owner or an authorized
+ delegate).
+
+ Audience
+ A value that identifies the party or parties intended to process
+ the assertion. The URL of the token endpoint, as defined in
+ Section 3.2 of OAuth 2.0 [RFC6749], can be used to indicate that
+ the authorization server is a valid intended audience of the
+ assertion. In the absence of an application profile specifying
+ otherwise, compliant applications MUST compare the Audience values
+ using the Simple String Comparison method defined in Section 6.2.1
+ of RFC 3986 [RFC3986].
+
+ Issued At
+ The time at which the assertion was issued. While the
+ serialization may differ by assertion format, it is REQUIRED that
+ the time be expressed in UTC with no time zone component.
+
+ Expires At
+ The time at which the assertion expires. While the serialization
+ may differ by assertion format, it is REQUIRED that the time be
+ expressed in UTC with no time zone component.
+
+ Assertion ID
+ A nonce or unique identifier for the assertion. The Assertion ID
+ may be used by implementations requiring message de-duplication
+ for one-time use assertions. Any entity that assigns an
+ identifier MUST ensure that there is negligible probability for
+ that entity or any other entity to accidentally assign the same
+ identifier to a different data object.
+
+
+
+
+
+
+
+
+
+
+
+Campbell, et al. Standards Track [Page 11]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+5.2. General Assertion Format and Processing Rules
+
+ The following are general format and processing rules for the use of
+ assertions in OAuth:
+
+ o The assertion MUST contain an Issuer. The Issuer identifies the
+ entity that issued the assertion as recognized by the
+ authorization server. If an assertion is self-issued, the Issuer
+ MUST be the value of the client's "client_id".
+
+ o The assertion MUST contain a Subject. The Subject typically
+ identifies an authorized accessor for which the access token is
+ being requested (i.e., the resource owner or an authorized
+ delegate) but, in some cases, may be a pseudonymous identifier or
+ other value denoting an anonymous user. When the client is acting
+ on behalf of itself, the Subject MUST be the value of the client's
+ "client_id".
+
+ o The assertion MUST contain an Audience that identifies the
+ authorization server as the intended audience. The authorization
+ server MUST reject any assertion that does not contain its own
+ identity as the intended audience.
+
+ o The assertion MUST contain an Expires At entity that limits the
+ time window during which the assertion can be used. The
+ authorization server MUST reject assertions that have expired
+ (subject to allowable clock skew between systems). Note that the
+ authorization server may reject assertions with an Expires At
+ attribute value that is unreasonably far in the future.
+
+ o The assertion MAY contain an Issued At entity containing the UTC
+ time at which the assertion was issued.
+
+ o The authorization server MUST reject assertions with an invalid
+ signature or MAC. The algorithm used to validate the signature or
+ message authentication code and the mechanism for designating the
+ secret used to generate the signature or message authentication
+ code over the assertion are beyond the scope of this
+ specification.
+
+6. Common Scenarios
+
+ The following provides additional guidance, beyond the format and
+ processing rules defined in Sections 4 and 5, on assertion use for a
+ number of common use cases.
+
+
+
+
+
+
+Campbell, et al. Standards Track [Page 12]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+6.1. Client Authentication
+
+ A client uses an assertion to authenticate to the authorization
+ server's token endpoint by using the "client_assertion_type" and
+ "client_assertion" parameters as defined in Section 4.2. The Subject
+ of the assertion identifies the client. If the assertion is self-
+ issued by the client, the Issuer of the assertion also identifies the
+ client.
+
+ The example in Section 4.2 shows a client authenticating using an
+ assertion during an access token request.
+
+6.2. Client Acting on Behalf of Itself
+
+ When a client is accessing resources on behalf of itself, it does so
+ in a manner analogous to the Client Credentials Grant defined in
+ Section 4.4 of OAuth 2.0 [RFC6749]. This is a special case that
+ combines both the authentication and authorization grant usage
+ patterns. In this case, the interactions with the authorization
+ server should be treated as using an assertion for Client
+ Authentication according to Section 4.2, while using the "grant_type"
+ parameter with the value "client_credentials" to indicate that the
+ client is requesting an access token using only its client
+ credentials.
+
+ The following example demonstrates an assertion being used for a
+ client credentials access token request, as defined in Section 4.4.2
+ of OAuth 2.0 [RFC6749] (with extra line breaks for display purposes
+ only):
+
+ POST /token HTTP/1.1
+ Host: server.example.com
+ Content-Type: application/x-www-form-urlencoded
+
+ grant_type=client_credentials&
+ client_assertion_type=urn%3Aietf%3Aparams%3Aoauth
+ %3Aclient-assertion-type%3Asaml2-bearer&
+ client_assertion=PHNhbW...[omitted for brevity]...ZT
+
+6.3. Client Acting on Behalf of a User
+
+ When a client is accessing resources on behalf of a user, it does so
+ by using the "grant_type" and "assertion" parameters as defined in
+ Section 4.1. The Subject identifies an authorized accessor for which
+ the access token is being requested (typically, the resource owner or
+ an authorized delegate).
+
+
+
+
+
+Campbell, et al. Standards Track [Page 13]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+ The example in Section 4.1 shows a client making an access token
+ request using an assertion as an authorization grant.
+
+6.3.1. Client Acting on Behalf of an Anonymous User
+
+ When a client is accessing resources on behalf of an anonymous user,
+ a mutually agreed-upon Subject identifier indicating anonymity is
+ used. The Subject value might be an opaque persistent or transient
+ pseudonymous identifier for the user or be an agreed-upon static
+ value indicating an anonymous user (e.g., "anonymous"). The
+ authorization may be based upon additional criteria, such as
+ additional attributes or claims provided in the assertion. For
+ example, a client might present an assertion from a trusted issuer
+ asserting that the bearer is over 18 via an included claim. In this
+ case, no additional information about the user's identity is
+ included, yet all the data needed to issue an access token is
+ present.
+
+ More information about anonymity, pseudonymity, and privacy
+ considerations in general can be found in [RFC6973].
+
+7. Interoperability Considerations
+
+ This specification defines a framework for using assertions with
+ OAuth 2.0. However, as an abstract framework in which the data
+ formats used for representing many values are not defined, on its
+ own, this specification is not sufficient to produce interoperable
+ implementations.
+
+ Two other specifications that profile this framework for specific
+ assertions have been developed: [RFC7522] uses SAML 2.0 Assertions
+ and [RFC7523] uses JSON Web Tokens (JWTs). These two instantiations
+ of this framework specify additional details about the assertion
+ encoding and processing rules for using those kinds of assertions
+ with OAuth 2.0.
+
+ However, even when profiled for specific assertion types, agreements
+ between system entities regarding identifiers, keys, and endpoints
+ are required in order to achieve interoperable deployments. Specific
+ items that require agreement are as follows: values for the Issuer
+ and Audience identifiers, supported assertion and client
+ authentication types, the location of the token endpoint, the key
+ used to apply and verify the digital signature or MAC over the
+ assertion, one-time use restrictions on assertions, maximum assertion
+ lifetime allowed, and the specific Subject and attribute requirements
+ of the assertion. The exchange of such information is explicitly out
+ of the scope of this specification. Deployments for particular trust
+ frameworks, circles of trust, or other uses cases will need to agree
+
+
+
+Campbell, et al. Standards Track [Page 14]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+ among the participants on the kinds of values to be used for some
+ abstract fields defined by this specification. In some cases,
+ additional profiles may be created that constrain or prescribe these
+ values or specify how they are to be exchanged. The "OAuth 2.0
+ Dynamic Client Registration Core Protocol" [OAUTH-DYN-REG] is one
+ such profile that enables OAuth Clients to register metadata about
+ themselves at an authorization server.
+
+8. Security Considerations
+
+ This section discusses security considerations that apply when using
+ assertions with OAuth 2.0 as described in this document. As
+ discussed in Section 3, there are two different ways to obtain
+ assertions: either as self-issued or obtained from a third-party
+ token service. While the actual interactions for obtaining an
+ assertion are outside the scope of this document, the details are
+ important from a security perspective. Section 3 discusses the high-
+ level architectural aspects. Many of the security considerations
+ discussed in this section are applicable to both the OAuth exchange
+ as well as the client obtaining the assertion.
+
+ The remainder of this section focuses on the exchanges that concern
+ presenting an assertion for client authentication and for the
+ authorization grant.
+
+8.1. Forged Assertion
+
+ Threat:
+ An adversary could forge or alter an assertion in order to obtain
+ an access token (in the case of the authorization grant) or to
+ impersonate a client (in the case of the client authentication
+ mechanism).
+
+ Countermeasures:
+ To avoid this kind of attack, the entities must assure that proper
+ mechanisms for protecting the integrity of the assertion are
+ employed. This includes the issuer digitally signing the
+ assertion or computing a MAC over the assertion.
+
+8.2. Stolen Assertion
+
+ Threat:
+ An adversary may be able obtain an assertion (e.g., by
+ eavesdropping) and then reuse it (replay it) at a later point in
+ time.
+
+
+
+
+
+
+Campbell, et al. Standards Track [Page 15]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+ Countermeasures:
+ The primary mitigation for this threat is the use of secure
+ communication channels with server authentication for all network
+ exchanges.
+
+ An assertion may also contain several elements to prevent replay
+ attacks. There is, however, a clear trade-off between reusing an
+ assertion for multiple exchanges and obtaining and creating new,
+ fresh assertions.
+
+ Authorization servers and resource servers may use a combination
+ of the Assertion ID and Issued At/Expires At attributes for replay
+ protection. Previously processed assertions may be rejected based
+ on the Assertion ID. The addition of the validity window relieves
+ the authorization server from maintaining an infinite state table
+ of processed Assertion IDs.
+
+8.3. Unauthorized Disclosure of Personal Information
+
+ Threat:
+ The ability for other entities to obtain information about an
+ individual, such as authentication information, role in an
+ organization, or other authorization-relevant information, raises
+ privacy concerns.
+
+ Countermeasures:
+ To address this threat, two cases need to be differentiated:
+
+ First, a third party that did not participate in any of the
+ exchange is prevented from eavesdropping on the content of the
+ assertion by employing confidentiality protection of the exchange
+ using TLS. This ensures that an eavesdropper on the wire is
+ unable to obtain information. However, this does not prevent
+ legitimate protocol entities from obtaining information that they
+ are not allowed to possess from assertions. Some assertion
+ formats allow for the assertion to be encrypted, preventing
+ unauthorized parties from inspecting the content.
+
+ Second, an authorization server may obtain an assertion that was
+ created by a third-party token service and that token service may
+ have placed attributes into the assertion. To mitigate potential
+ privacy problems, prior consent for the release of such attribute
+ information from the resource owner should be obtained. OAuth
+ itself does not directly provide such capabilities, but this
+ consent approval may be obtained using other identity management
+ protocols or user consent interactions; it may also be obtained in
+ an out-of-band fashion.
+
+
+
+
+Campbell, et al. Standards Track [Page 16]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+ For the cases where a third-party token service creates assertions
+ to be used for client authentication, privacy concerns are
+ typically lower, since many of these clients are Web servers
+ rather than individual devices operated by humans. If the
+ assertions are used for client authentication of devices or
+ software that can be closely linked to end users, then privacy
+ protection safeguards need to be taken into consideration.
+
+ Further guidance on privacy friendly protocol design can be found
+ in [RFC6973].
+
+8.4. Privacy Considerations
+
+ An assertion may contain privacy-sensitive information and, to
+ prevent disclosure of such information to unintended parties, should
+ only be transmitted over encrypted channels, such as TLS. In cases
+ where it is desirable to prevent disclosure of certain information to
+ the client, the assertion (or portions of it) should be encrypted to
+ the authorization server.
+
+ Deployments should determine the minimum amount of information
+ necessary to complete the exchange and include only such information
+ in the assertion. In some cases, the Subject identifier can be a
+ value representing an anonymous or pseudonymous user, as described in
+ Section 6.3.1.
+
+9. IANA Considerations
+
+ This section registers three values, as listed in the subsections
+ below, in the IANA "OAuth Parameters" registry established by RFC
+ 6749 [RFC6749].
+
+9.1. "assertion" Parameter Registration
+
+ o Name: assertion
+
+ o Parameter Usage Location: token request
+
+ o Change Controller: IESG
+
+ o Specification Document(s): RFC 7521
+
+
+
+
+
+
+
+
+
+
+Campbell, et al. Standards Track [Page 17]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+9.2. "client_assertion" Parameter Registration
+
+ o Name: client_assertion
+
+ o Parameter Usage Location: token request
+
+ o Change Controller: IESG
+
+ o Specification Document(s): RFC 7521
+
+9.3. "client_assertion_type" Parameter Registration
+
+ o Name: client_assertion_type
+
+ o Parameter Usage Location: token request
+
+ o Change Controller: IESG
+
+ o Specification Document(s): RFC 7521
+
+10. References
+
+10.1. 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,
+ <http://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,
+ <http://www.rfc-editor.org/info/rfc3986>.
+
+ [RFC6749] Hardt, D., Ed., "The OAuth 2.0 Authorization Framework",
+ RFC 6749, DOI 10.17487/RFC6749, October 2012,
+ <http://www.rfc-editor.org/info/rfc6749>.
+
+10.2. Informative References
+
+ [OASIS.WS-Trust]
+ Nadalin, A., Ed., Goodner, M., Ed., Gudgin, M., Ed.,
+ Barbir, A., Ed., and H. Granqvist, Ed., "WS-Trust",
+ February 2009, <http://docs.oasis-open.org/ws-sx/
+ ws-trust/v1.4/ws-trust.html>.
+
+
+
+
+
+
+Campbell, et al. Standards Track [Page 18]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+ [OAUTH-DYN-REG]
+ Richer, J., Ed., Jones, M., Bradley, J., Machulak, M., and
+ P. Hunt, "OAuth 2.0 Dynamic Client Registration Protocol",
+ Work in Progress, draft-ietf-oauth-dyn-reg-29, May 2015.
+
+ [RFC6755] Campbell, B. and H. Tschofenig, "An IETF URN Sub-Namespace
+ for OAuth", RFC 6755, DOI 10.17487/RFC6755, October 2012,
+ <http://www.rfc-editor.org/info/rfc6755>.
+
+ [RFC6973] Cooper, A., Tschofenig, H., Aboba, B., Peterson, J.,
+ Morris, J., Hansen, M., and R. Smith, "Privacy
+ Considerations for Internet Protocols", RFC 6973,
+ DOI 10.17487/RFC6973, July 2013,
+ <http://www.rfc-editor.org/info/rfc6973>.
+
+ [RFC7522] Campbell, B., Mortimore, C., and M. Jones, "Security
+ Assertion Markup Language (SAML) 2.0 Profile for OAuth 2.0
+ Client Authentication and Authorization Grants", RFC 7522,
+ DOI 10.17487/RFC7522, May 2015,
+ <http://www.rfc-editor.org/info/rfc7522>.
+
+ [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, <http://www.rfc-editor.org/info/rfc7523>.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Campbell, et al. Standards Track [Page 19]
+
+RFC 7521 OAuth Assertion Framework May 2015
+
+
+Acknowledgements
+
+ The authors wish to thank the following people who have influenced or
+ contributed to this specification: Paul Madsen, Eric Sachs, Jian Cai,
+ Tony Nadalin, Hannes Tschofenig, the authors of the OAuth WRAP
+ specification, and the members of the OAuth working group.
+
+Authors' Addresses
+
+ Brian Campbell
+ Ping Identity
+
+ EMail: brian.d.campbell@gmail.com
+
+
+ Chuck Mortimore
+ Salesforce.com
+
+ EMail: cmortimore@salesforce.com
+
+
+ Michael B. Jones
+ Microsoft
+
+ EMail: mbj@microsoft.com
+ URI: http://self-issued.info/
+
+
+ Yaron Y. Goland
+ Microsoft
+
+ EMail: yarong@microsoft.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Campbell, et al. Standards Track [Page 20]
+