rfc9101.original | rfc9101.txt | |||
---|---|---|---|---|
OAuth Working Group N. Sakimura | Internet Engineering Task Force (IETF) N. Sakimura | |||
Internet-Draft NAT.Consulting | Request for Comments: 9101 NAT.Consulting | |||
Intended status: Standards Track J. Bradley | Category: Standards Track J. Bradley | |||
Expires: October 10, 2021 Yubico | ISSN: 2070-1721 Yubico | |||
M. Jones | M. Jones | |||
Microsoft | Microsoft | |||
April 8, 2021 | August 2021 | |||
The OAuth 2.0 Authorization Framework: JWT Secured Authorization Request | The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request | |||
(JAR) | (JAR) | |||
draft-ietf-oauth-jwsreq-34 | ||||
Abstract | Abstract | |||
The authorization request in OAuth 2.0 described in RFC 6749 utilizes | The authorization request in OAuth 2.0 described in RFC 6749 utilizes | |||
query parameter serialization, which means that Authorization Request | query parameter serialization, which means that authorization request | |||
parameters are encoded in the URI of the request and sent through | parameters are encoded in the URI of the request and sent through | |||
user agents such as web browsers. While it is easy to implement, it | user agents such as web browsers. While it is easy to implement, it | |||
means that (a) the communication through the user agents is not | means that a) the communication through the user agents is not | |||
integrity protected and thus the parameters can be tainted, (b) the | integrity protected and thus, the parameters can be tainted, b) the | |||
source of the communication is not authenticated, and (c) the | source of the communication is not authenticated, and c) the | |||
communication through the user agents can be monitored. Because of | communication through the user agents can be monitored. Because of | |||
these weaknesses, several attacks to the protocol have now been put | these weaknesses, several attacks to the protocol have now been put | |||
forward. | forward. | |||
This document introduces the ability to send request parameters in a | This document introduces the ability to send request parameters in a | |||
JSON Web Token (JWT) instead, which allows the request to be signed | JSON Web Token (JWT) instead, which allows the request to be signed | |||
with JSON Web Signature (JWS) and encrypted with JSON Web Encryption | with JSON Web Signature (JWS) and encrypted with JSON Web Encryption | |||
(JWE) so that the integrity, source authentication and | (JWE) so that the integrity, source authentication, and | |||
confidentiality property of the Authorization Request is attained. | confidentiality properties of the authorization request are attained. | |||
The request can be sent by value or by reference. | The request can be sent by value or by reference. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | This document is a product of the Internet Engineering Task Force | |||
Task Force (IETF). Note that other groups may also distribute | (IETF). It represents the consensus of the IETF community. It has | |||
working documents as Internet-Drafts. The list of current Internet- | received public review and has been approved for publication by the | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | Information about the current status of this document, any errata, | |||
and may be updated, replaced, or obsoleted by other documents at any | and how to provide feedback on it may be obtained at | |||
time. It is inappropriate to use Internet-Drafts as reference | https://www.rfc-editor.org/info/rfc9101. | |||
material or to cite them other than as "work in progress." | ||||
This Internet-Draft will expire on October 10, 2021. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 5 | 1.1. Requirements Language | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2. Terminology | |||
2.1. Request Object . . . . . . . . . . . . . . . . . . . . . 6 | 2.1. Request Object | |||
2.2. Request Object URI . . . . . . . . . . . . . . . . . . . 6 | 2.2. Request Object URI | |||
3. Symbols and abbreviated terms . . . . . . . . . . . . . . . . 6 | 3. Symbols and Abbreviated Terms | |||
4. Request Object . . . . . . . . . . . . . . . . . . . . . . . 7 | 4. Request Object | |||
5. Authorization Request . . . . . . . . . . . . . . . . . . . . 9 | 5. Authorization Request | |||
5.1. Passing a Request Object by Value . . . . . . . . . . . . 10 | 5.1. Passing a Request Object by Value | |||
5.2. Passing a Request Object by Reference . . . . . . . . . . 10 | 5.2. Passing a Request Object by Reference | |||
5.2.1. URI Referencing the Request Object . . . . . . . . . 11 | 5.2.1. URI Referencing the Request Object | |||
5.2.2. Request using the "request_uri" Request Parameter . . 12 | 5.2.2. Request Using the "request_uri" Request Parameter | |||
5.2.3. Authorization Server Fetches Request Object . . . . . 12 | 5.2.3. Authorization Server Fetches Request Object | |||
6. Validating JWT-Based Requests . . . . . . . . . . . . . . . . 13 | 6. Validating JWT-Based Requests | |||
6.1. JWE Encrypted Request Object . . . . . . . . . . . . . . 13 | 6.1. JWE Encrypted Request Object | |||
6.2. JWS Signed Request Object . . . . . . . . . . . . . . . . 13 | 6.2. JWS-Signed Request Object | |||
6.3. Request Parameter Assembly and Validation . . . . . . . . 14 | 6.3. Request Parameter Assembly and Validation | |||
7. Authorization Server Response . . . . . . . . . . . . . . . . 14 | 7. Authorization Server Response | |||
8. TLS Requirements . . . . . . . . . . . . . . . . . . . . . . 14 | 8. TLS Requirements | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . 15 | 9. IANA Considerations | |||
9.1. OAuth Parameters Registration . . . . . . . . . . . . . . 15 | 9.1. OAuth Parameters Registration | |||
9.2. OAuth Authorization Server Metadata Registry . . . . . . 16 | 9.2. OAuth Authorization Server Metadata Registry | |||
9.3. OAuth Dynamic Client Registration Metadata Registry . . . 17 | 9.3. OAuth Dynamic Client Registration Metadata Registry | |||
9.4. Media Type Registration . . . . . . . . . . . . . . . . . 17 | 9.4. Media Type Registration | |||
9.4.1. Registry Contents . . . . . . . . . . . . . . . . . . 17 | 9.4.1. Registry Contents | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | 10. Security Considerations | |||
10.1. Choice of Algorithms . . . . . . . . . . . . . . . . . . 18 | 10.1. Choice of Algorithms | |||
10.2. Request Source Authentication . . . . . . . . . . . . . 18 | 10.2. Request Source Authentication | |||
10.3. Explicit Endpoints . . . . . . . . . . . . . . . . . . . 19 | 10.3. Explicit Endpoints | |||
10.4. Risks Associated with request_uri . . . . . . . . . . . 19 | 10.4. Risks Associated with request_uri | |||
10.4.1. DDoS Attack on the Authorization Server . . . . . . 20 | 10.4.1. DDoS Attack on the Authorization Server | |||
10.4.2. Request URI Rewrite . . . . . . . . . . . . . . . . 20 | 10.4.2. Request URI Rewrite | |||
10.5. Downgrade Attack . . . . . . . . . . . . . . . . . . . . 20 | 10.5. Downgrade Attack | |||
10.6. TLS Security Considerations . . . . . . . . . . . . . . 21 | 10.6. TLS Security Considerations | |||
10.7. Parameter Mismatches . . . . . . . . . . . . . . . . . . 21 | 10.7. Parameter Mismatches | |||
10.8. Cross-JWT Confusion . . . . . . . . . . . . . . . . . . 21 | 10.8. Cross-JWT Confusion | |||
11. Privacy Considerations . . . . . . . . . . . . . . . . . . . 22 | 11. Privacy Considerations | |||
11.1. Collection limitation . . . . . . . . . . . . . . . . . 22 | 11.1. Collection Limitation | |||
11.2. Disclosure Limitation . . . . . . . . . . . . . . . . . 23 | 11.2. Disclosure Limitation | |||
11.2.1. Request Disclosure . . . . . . . . . . . . . . . . . 23 | 11.2.1. Request Disclosure | |||
11.2.2. Tracking using Request Object URI . . . . . . . . . 23 | 11.2.2. Tracking Using Request Object URI | |||
12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 24 | 12. References | |||
13. Revision History . . . . . . . . . . . . . . . . . . . . . . 24 | 12.1. Normative References | |||
14. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 | 12.2. Informative References | |||
14.1. Normative References . . . . . . . . . . . . . . . . . . 32 | Acknowledgements | |||
14.2. Informative References . . . . . . . . . . . . . . . . . 34 | Authors' Addresses | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 | ||||
1. Introduction | 1. Introduction | |||
The Authorization Request in OAuth 2.0 [RFC6749] utilizes query | The authorization request in OAuth 2.0 [RFC6749] utilizes query | |||
parameter serialization and is typically sent through user agents | parameter serialization and is typically sent through user agents | |||
such as web browsers. | such as web browsers. | |||
For example, the parameters "response_type", "client_id", "state", | For example, the parameters "response_type", "client_id", "state", | |||
and "redirect_uri" are encoded in the URI of the request: | and "redirect_uri" are encoded in the URI of the request: | |||
GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz | GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz | |||
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1 | &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1 | |||
Host: server.example.com | Host: server.example.com | |||
While it is easy to implement, the encoding in the URI does not allow | While it is easy to implement, the encoding in the URI does not allow | |||
application layer security to be used to provide confidentiality and | application-layer security to be used to provide confidentiality and | |||
integrity protection. While TLS is used to offer communication | integrity protection. While TLS is used to offer communication | |||
security between the Client and the user-agent as well as the user- | security between the client and the user agent as well as the user | |||
agent and the Authorization Server, TLS sessions are terminated in | agent and the authorization server, TLS sessions are terminated in | |||
the user-agent. In addition, TLS sessions may be terminated | the user agent. In addition, TLS sessions may be terminated | |||
prematurely at some middlebox (such as a load balancer). | prematurely at some middlebox (such as a load balancer). | |||
As the result, the Authorization Request of [RFC6749] has | As a result, the authorization request of [RFC6749] has shortcomings | |||
shortcomings in that: | in that: | |||
(a) the communication through the user agents is not integrity | (a) the communication through the user agents is not integrity | |||
protected and thus the parameters can be tainted (integrity | protected, and thus, the parameters can be tainted (integrity | |||
protection failure) | protection failure); | |||
(b) the source of the communication is not authenticated (source | (b) the source of the communication is not authenticated (source | |||
authentication failure) | authentication failure); | |||
(c) the communication through the user agents can be monitored | (c) the communication through the user agents can be monitored | |||
(containment / confidentiality failure). | (containment/confidentiality failure). | |||
Due to these inherent weaknesses, several attacks against the | Due to these inherent weaknesses, several attacks against the | |||
protocol, such as Redirection URI rewriting, have been identified. | protocol, such as redirection URI rewriting, have been identified. | |||
The use of application layer security mitigates these issues. | The use of application-layer security mitigates these issues. | |||
The use of application layer security allows requests to be prepared | The use of application-layer security allows requests to be prepared | |||
by a trusted third party so that a client application cannot request | by a trusted third party so that a client application cannot request | |||
more permissions than previously agreed. | more permissions than previously agreed upon. | |||
Furthermore, passing the request by reference allows the reduction of | Furthermore, passing the request by reference allows the reduction of | |||
over-the-wire overhead. | over-the-wire overhead. | |||
The JWT [RFC7519] encoding has been chosen because of | The JWT [RFC7519] encoding has been chosen because of: | |||
(1) its close relationship with JSON, which is used as OAuth's | (1) its close relationship with JSON, which is used as OAuth's | |||
response format | response format | |||
(2) its developer friendliness due to its textual nature | (2) its developer friendliness due to its textual nature | |||
(3) its relative compactness compared to XML | (3) its relative compactness compared to XML | |||
(4) its development status as a Proposed Standard, along with the | (4) its development status as a Proposed Standard, along with the | |||
associated signing and encryption methods [RFC7515] [RFC7516] | associated signing and encryption methods [RFC7515] [RFC7516] | |||
(5) the relative ease of JWS and JWE compared to XML Signature and | (5) the relative ease of JWS and JWE compared to XML Signature and | |||
Encryption. | Encryption. | |||
The parameters "request" and "request_uri" are introduced as | The parameters "request" and "request_uri" are introduced as | |||
additional authorization request parameters for the OAuth 2.0 | additional authorization request parameters for the OAuth 2.0 | |||
[RFC6749] flows. The "request" parameter is a JSON Web Token (JWT) | [RFC6749] flows. The "request" parameter is a JSON Web Token (JWT) | |||
[RFC7519] whose JWT Claims Set holds the JSON encoded OAuth 2.0 | [RFC7519] whose JWT Claims Set holds the JSON-encoded OAuth 2.0 | |||
authorization request parameters. Note that, in contrast to RFC | authorization request parameters. Note that, in contrast to RFC | |||
7519, the elements of the Claims Set are encoded OAuth Request | 7519, the elements of the Claims Set are encoded OAuth request | |||
Parameters [IANA.OAuth.Parameters], supplemented with only a few of | parameters [IANA.OAuth.Parameters], supplemented with only a few of | |||
the IANA-managed JSON Web Token Claims [IANA.JWT.Claims] - in | the IANA-managed JSON Web Token Claims [IANA.JWT.Claims], in | |||
particular "iss" and "aud". The JWT in the "request" parameter is | particular, "iss" and "aud". The JWT in the "request" parameter is | |||
integrity protected and source authenticated using JWS. | integrity protected and source authenticated using JWS. | |||
The JWT [RFC7519] can be passed to the authorization endpoint by | The JWT [RFC7519] can be passed to the authorization endpoint by | |||
reference, in which case the parameter "request_uri" is used instead | reference, in which case the parameter "request_uri" is used instead | |||
of the "request". | of "request". | |||
Using JWT [RFC7519] as the request encoding instead of query | Using JWT [RFC7519] as the request encoding instead of query | |||
parameters has several advantages: | parameters has several advantages: | |||
(a) (integrity protection) The request can be signed so that the | (a) Integrity protection. The request can be signed so that the | |||
integrity of the request can be checked. | integrity of the request can be checked. | |||
(b) (source authentication) The request can be signed so that the | (b) Source authentication. The request can be signed so that the | |||
signer can be authenticated. | signer can be authenticated. | |||
(c) (confidentiality protection) The request can be encrypted so | (c) Confidentiality protection. The request can be encrypted so | |||
that end-to-end confidentiality can be provided even if the TLS | that end-to-end confidentiality can be provided even if the TLS | |||
connection is terminated at one point or another (including at | connection is terminated at one point or another (including at | |||
and before user-agents). | and before user agents). | |||
(d) (collection minimization) The request can be signed by a trusted | (d) Collection minimization. The request can be signed by a trusted | |||
third party attesting that the authorization request is | third party attesting that the authorization request is | |||
compliant with a certain policy. For example, a request can be | compliant with a certain policy. For example, a request can be | |||
pre-examined by a trusted third party that all the personal data | pre-examined by a trusted third party to confirm that all the | |||
requested is strictly necessary to perform the process that the | personal data requested is strictly necessary to perform the | |||
end-user asked for, and signed by that trusted third party. The | process that the end user asked for; the request would then be | |||
authorization server then examines the signature and shows the | signed by that trusted third party. The authorization server | |||
conformance status to the end-user, who would have some | then examines the signature and shows the conformance status to | |||
assurance as to the legitimacy of the request when authorizing | the end user who would have some assurance as to the legitimacy | |||
it. In some cases, it may even be desirable to skip the | of the request when authorizing it. In some cases, it may even | |||
authorization dialogue under such circumstances. | be desirable to skip the authorization dialogue under such | |||
circumstances. | ||||
There are a few cases that request by reference is useful such as: | There are a few cases where request by reference is useful, such as: | |||
1. When it is desirable to reduce the size of transmitted request. | 1. when it is desirable to reduce the size of a transmitted request. | |||
The use of application layer security increases the size of the | The use of application-layer security increases the size of the | |||
request, particularly when public key cryptography is used. | request particularly when public-key cryptography is used. | |||
2. When the client does not want to do the application level | 2. when the client does not want to do the application-level | |||
cryptography. The Authorization Server may provide an endpoint | cryptography. The authorization server may provide an endpoint | |||
to accept the Authorization Request through direct communication | to accept the authorization request through direct communication | |||
with the Client so that the Client is authenticated and the | with the client, so that the client is authenticated and the | |||
channel is TLS protected. | channel is TLS protected. | |||
This capability is in use by OpenID Connect [OpenID.Core]. | This capability is in use by OpenID Connect [OpenID.Core]. | |||
1.1. Requirements Language | 1.1. Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. Terminology | 2. Terminology | |||
For the purposes of this specification, the following terms and | For the purposes of this specification, the following terms and | |||
definitions in addition to what is defined in OAuth 2.0 Framework | definitions apply in addition to what is defined in OAuth 2.0 | |||
[RFC6749], JSON Web Signature [RFC7515], and JSON Web Encryption | Framework [RFC6749], JSON Web Signature [RFC7515], and JSON Web | |||
[RFC7519] apply. | Encryption [RFC7516]. | |||
2.1. Request Object | 2.1. Request Object | |||
JSON Web Token (JWT) [RFC7519] whose JWT Claims Set holds the JSON | A Request Object is a JSON Web Token (JWT) [RFC7519] whose JWT Claims | |||
encoded OAuth 2.0 authorization request parameters. | Set holds the JSON-encoded OAuth 2.0 authorization request | |||
parameters. | ||||
2.2. Request Object URI | 2.2. Request Object URI | |||
Absolute URI that references the set of parameters comprising an | A Request Object URI is an absolute URI that references the set of | |||
OAuth 2.0 authorization request. The contents of the resource | parameters comprising an OAuth 2.0 authorization request. The | |||
referenced by the URI are a Request Object (Section 2.1), unless the | content of the resource referenced by the URI is a Request Object | |||
URI was provided to the client by the same Authorization Server, in | (Section 2.1), unless the URI was provided to the client by the same | |||
which case the content is an implementation detail at the discretion | authorization server, in which case the content is an implementation | |||
the Authorization Server. The former is to ensure interoperability | detail at the discretion of the authorization server. The content | |||
in cases where the provider of the request_uri is a separate entity | being a Request Object is to ensure interoperability in cases where | |||
from the consumer, such as when a client provides a URI referencing a | the provider of the "request_uri" is a separate entity from the | |||
Request Object stored on the client's backend service and made | consumer, such as when a client provides a URI referencing a Request | |||
accessible via HTTPS. In the latter case where the Authorization | Object stored on the client's backend service that is made accessible | |||
Server is both provider and consumer of the URI, such as when it | via HTTPS. In the latter case, where the authorization server is | |||
offers an endpoint that provides a URI in exchange for a Request | both provider and consumer of the URI, such as when it offers an | |||
Object, this interoperability concern does not apply. | endpoint that provides a URI in exchange for a Request Object, this | |||
interoperability concern does not apply. | ||||
3. Symbols and abbreviated terms | 3. Symbols and Abbreviated Terms | |||
The following abbreviations are common to this specification. | The following abbreviations are common to this specification. | |||
JSON JavaScript Object Notation | JSON: JavaScript Object Notation | |||
JWT JSON Web Token | JWT: JSON Web Token | |||
JWS JSON Web Signature | JWS: JSON Web Signature | |||
JWE JSON Web Encryption | JWE: JSON Web Encryption | |||
URI Uniform Resource Identifier | URI: Uniform Resource Identifier | |||
URL Uniform Resource Locator | URL: Uniform Resource Locator | |||
4. Request Object | 4. Request Object | |||
A Request Object (Section 2.1) is used to provide authorization | A Request Object (Section 2.1) is used to provide authorization | |||
request parameters for an OAuth 2.0 authorization request. It MUST | request parameters for an OAuth 2.0 authorization request. It MUST | |||
contain all the parameters (including extension parameters) used to | contain all the parameters (including extension parameters) used to | |||
process the OAuth 2.0 [RFC6749] authorization request except the | process the OAuth 2.0 [RFC6749] authorization request except the | |||
"request" and "request_uri" parameters that are defined in this | "request" and "request_uri" parameters that are defined in this | |||
document. The parameters are represented as the JWT claims of the | document. The parameters are represented as the JWT Claims of the | |||
object. Parameter names and string values MUST be included as JSON | object. Parameter names and string values MUST be included as JSON | |||
strings. Since Request Objects are handled across domains and | strings. Since Request Objects are handled across domains and | |||
potentially outside of a closed ecosystem, per section 8.1 of | potentially outside of a closed ecosystem, per Section 8.1 of | |||
[RFC8259], these JSON strings MUST be encoded using UTF-8 [RFC3629]. | [RFC8259], these JSON strings MUST be encoded using UTF-8 [RFC3629]. | |||
Numerical values MUST be included as JSON numbers. It MAY include | Numerical values MUST be included as JSON numbers. The Request | |||
any extension parameters. This JSON [RFC8259] object constitutes the | Object MAY include any extension parameters. This JSON [RFC8259] | |||
JWT Claims Set defined in JWT [RFC7519]. The JWT Claims Set is then | object constitutes the JWT Claims Set defined in JWT [RFC7519]. The | |||
signed or signed and encrypted. | JWT Claims Set is then signed or signed and encrypted. | |||
To sign, JSON Web Signature (JWS) [RFC7515] is used. The result is a | To sign, JSON Web Signature (JWS) [RFC7515] is used. The result is a | |||
JWS signed JWT [RFC7519]. If signed, the Authorization Request | JWS-signed JWT [RFC7519]. If signed, the Authorization Request | |||
Object SHOULD contain the Claims "iss" (issuer) and "aud" (audience) | Object SHOULD contain the Claims "iss" (issuer) and "aud" (audience) | |||
as members, with their semantics being the same as defined in the JWT | as members with their semantics being the same as defined in the JWT | |||
[RFC7519] specification. The value of "aud" should be the value of | [RFC7519] specification. The value of "aud" should be the value of | |||
the Authorization Server (AS) "issuer" as defined in RFC8414 | the authorization server (AS) "issuer", as defined in RFC 8414 | |||
[RFC8414]. | [RFC8414]. | |||
To encrypt, JWE [RFC7516] is used. When both signature and | To encrypt, JWE [RFC7516] is used. When both signature and | |||
encryption are being applied, the JWT MUST be signed then encrypted | encryption are being applied, the JWT MUST be signed, then encrypted, | |||
as described in Section 11.2 of [RFC7519]. The result is a Nested | as described in Section 11.2 of [RFC7519]. The result is a Nested | |||
JWT, as defined in [RFC7519]. | JWT, as defined in [RFC7519]. | |||
The client determines the algorithms used to sign and encrypt Request | The client determines the algorithms used to sign and encrypt Request | |||
Objects. The algorithms chosen need to be supported by both the | Objects. The algorithms chosen need to be supported by both the | |||
client and the authorization server. The client can inform the | client and the authorization server. The client can inform the | |||
authorization server of the algorithms that it supports in its | authorization server of the algorithms that it supports in its | |||
dynamic client registration metadata [RFC7591], specifically, the | dynamic client registration metadata [RFC7591], specifically, the | |||
metadata values "request_object_signing_alg", | metadata values "request_object_signing_alg", | |||
"request_object_encryption_alg", and "request_object_encryption_enc". | "request_object_encryption_alg", and "request_object_encryption_enc". | |||
Likewise, the authorization server can inform the client of the | Likewise, the authorization server can inform the client of the | |||
algorithms that it supports in its authorization server metadata | algorithms that it supports in its authorization server metadata | |||
[RFC8414], specifically, the metadata values | [RFC8414], specifically, the metadata values | |||
"request_object_signing_alg_values_supported", | "request_object_signing_alg_values_supported", | |||
"request_object_encryption_alg_values_supported", and | "request_object_encryption_alg_values_supported", and | |||
"request_object_encryption_enc_values_supported". | "request_object_encryption_enc_values_supported". | |||
The Request Object MAY be sent by value as described in Section 5.1 | The Request Object MAY be sent by value, as described in Section 5.1, | |||
or by reference as described in Section 5.2. "request" and | or by reference, as described in Section 5.2. "request" and | |||
"request_uri" parameters MUST NOT be included in Request Objects. | "request_uri" parameters MUST NOT be included in Request Objects. | |||
A Request Object (Section 2.1) has the media type [RFC2046] | A Request Object (Section 2.1) has the media type [RFC2046] | |||
"application/oauth-authz-req+jwt". Note that some existing | "application/oauth-authz-req+jwt". Note that some existing | |||
deployments may alternatively be using the type "application/jwt". | deployments may alternatively be using the type "application/jwt". | |||
The following is an example of the Claims in a Request Object before | The following is an example of the Claims in a Request Object before | |||
base64url [RFC7515] encoding and signing. Note that it includes the | base64url [RFC7515] encoding and signing. Note that it includes the | |||
extension parameters "nonce" and "max_age". | extension parameters "nonce" and "max_age". | |||
skipping to change at page 9, line 5 ¶ | skipping to change at line 367 ¶ | |||
lkIjogInM2QmhkUmtxdDMiLAogICAgInJlZGlyZWN0X3VyaSI6ICJodHRwczovL2Ns | lkIjogInM2QmhkUmtxdDMiLAogICAgInJlZGlyZWN0X3VyaSI6ICJodHRwczovL2Ns | |||
aWVudC5leGFtcGxlLm9yZy9jYiIsCiAgICAic2NvcGUiOiAib3BlbmlkIiwKICAgIC | aWVudC5leGFtcGxlLm9yZy9jYiIsCiAgICAic2NvcGUiOiAib3BlbmlkIiwKICAgIC | |||
JzdGF0ZSI6ICJhZjBpZmpzbGRraiIsCiAgICAibm9uY2UiOiAibi0wUzZfV3pBMk1q | JzdGF0ZSI6ICJhZjBpZmpzbGRraiIsCiAgICAibm9uY2UiOiAibi0wUzZfV3pBMk1q | |||
IiwKICAgICJtYXhfYWdlIjogODY0MDAKfQ.Nsxa_18VUElVaPjqW_ToI1yrEJ67BgK | IiwKICAgICJtYXhfYWdlIjogODY0MDAKfQ.Nsxa_18VUElVaPjqW_ToI1yrEJ67BgK | |||
b5xsuZRVqzGkfKrOIX7BCx0biSxYGmjK9KJPctH1OC0iQJwXu5YVY-vnW0_PLJb1C2 | b5xsuZRVqzGkfKrOIX7BCx0biSxYGmjK9KJPctH1OC0iQJwXu5YVY-vnW0_PLJb1C2 | |||
HG-ztVzcnKZC2gE4i0vgQcpkUOCpW3SEYXnyWnKzuKzqSb1wAZALo5f89B_p6QA6j6 | HG-ztVzcnKZC2gE4i0vgQcpkUOCpW3SEYXnyWnKzuKzqSb1wAZALo5f89B_p6QA6j6 | |||
JwBSRvdVsDPdulW8lKxGTbH82czCaQ50rLAg3EYLYaCb4ik4I1zGXE4fvim9FIMs8O | JwBSRvdVsDPdulW8lKxGTbH82czCaQ50rLAg3EYLYaCb4ik4I1zGXE4fvim9FIMs8O | |||
CMmzwIB5S-ujFfzwFjoyuPEV4hJnoVUmXR_W9typPf846lGwA8h9G9oNTIuX8Ft2jf | CMmzwIB5S-ujFfzwFjoyuPEV4hJnoVUmXR_W9typPf846lGwA8h9G9oNTIuX8Ft2jf | |||
pnZdFmLg3_wr3Wa5q3a-lfbgF3S9H_8nN3j1i7tLR_5Nz-g | pnZdFmLg3_wr3Wa5q3a-lfbgF3S9H_8nN3j1i7tLR_5Nz-g | |||
The following RSA public key, represented in JWK format, can be used | The following RSA public key, represented in JSON Web Key (JWK) | |||
to validate the Request Object signature in this and subsequent | format, can be used to validate the Request Object signature in this | |||
Request Object examples (with line wraps within values for display | and subsequent Request Object examples (with line wraps within values | |||
purposes only): | for display purposes only): | |||
{ | { | |||
"kty":"RSA", | "kty":"RSA", | |||
"kid":"k2bdc", | "kid":"k2bdc", | |||
"n":"x5RbkAZkmpRxia65qRQ1wwSMSxQUnS7gcpVTV_cdHmfmG2ltd2yabEO9XadD8 | "n":"x5RbkAZkmpRxia65qRQ1wwSMSxQUnS7gcpVTV_cdHmfmG2ltd2yabEO9XadD8 | |||
pJNZubINPpmgHh3J1aD9WRwS05ucmFq3CfFsluLt13_7oX5yDRSKX7poXmT_5 | pJNZubINPpmgHh3J1aD9WRwS05ucmFq3CfFsluLt13_7oX5yDRSKX7poXmT_5 | |||
ko8k4NJZPMAO8fPToDTH7kHYbONSE2FYa5GZ60CUsFhSonI-dcMDJ0Ary9lxI | ko8k4NJZPMAO8fPToDTH7kHYbONSE2FYa5GZ60CUsFhSonI-dcMDJ0Ary9lxI | |||
w5k2z4TAdARVWcS7sD07VhlMMshrwsPHBQgTatlkxyIHXbYdtak8fqvNAwr7O | w5k2z4TAdARVWcS7sD07VhlMMshrwsPHBQgTatlkxyIHXbYdtak8fqvNAwr7O | |||
lVEvM_Ipf5OfmdB8Sd-wjzaBsyP4VhJKoi_qdgSzpC694XZeYPq45Sw-q51iF | lVEvM_Ipf5OfmdB8Sd-wjzaBsyP4VhJKoi_qdgSzpC694XZeYPq45Sw-q51iF | |||
UlcOlTCI7z6jltUtnR6ySn6XDGFnzH5Fe5ypw", | UlcOlTCI7z6jltUtnR6ySn6XDGFnzH5Fe5ypw", | |||
skipping to change at page 9, line 31 ¶ | skipping to change at line 393 ¶ | |||
5. Authorization Request | 5. Authorization Request | |||
The client constructs the authorization request URI by adding the | The client constructs the authorization request URI by adding the | |||
following parameters to the query component of the authorization | following parameters to the query component of the authorization | |||
endpoint URI using the "application/x-www-form-urlencoded" format: | endpoint URI using the "application/x-www-form-urlencoded" format: | |||
request | request | |||
REQUIRED unless "request_uri" is specified. The Request Object | REQUIRED unless "request_uri" is specified. The Request Object | |||
(Section 2.1) that holds authorization request parameters stated | (Section 2.1) that holds authorization request parameters stated | |||
in section 4 of OAuth 2.0 [RFC6749]. If this parameter is present | in Section 4 of [RFC6749] (OAuth 2.0). If this parameter is | |||
in the authorization request, "request_uri" MUST NOT be present. | present in the authorization request, "request_uri" MUST NOT be | |||
present. | ||||
request_uri | request_uri | |||
REQUIRED unless "request" is specified. The absolute URI as | REQUIRED unless "request" is specified. The absolute URI, as | |||
defined by RFC3986 [RFC3986] that is the Request Object URI | defined by RFC 3986 [RFC3986], that is the Request Object URI | |||
(Section 2.2) referencing the authorization request parameters | (Section 2.2) referencing the authorization request parameters | |||
stated in section 4 of OAuth 2.0 [RFC6749]. If this parameter is | stated in Section 4 of [RFC6749] (OAuth 2.0). If this parameter | |||
present in the authorization request, "request" MUST NOT be | is present in the authorization request, "request" MUST NOT be | |||
present. | present. | |||
client_id | client_id | |||
REQUIRED. OAuth 2.0 [RFC6749] "client_id". The value MUST match | REQUIRED. OAuth 2.0 [RFC6749] "client_id". The value MUST match | |||
the "request" or "request_uri" Request Object's (Section 2.1) | the "request" or "request_uri" Request Object's (Section 2.1) | |||
"client_id". | "client_id". | |||
The client directs the resource owner to the constructed URI using an | The client directs the resource owner to the constructed URI using an | |||
HTTP redirection response, or by other means available to it via the | HTTP redirection response or by other means available to it via the | |||
user-agent. | user agent. | |||
For example, the client directs the end user's user-agent to make the | For example, the client directs the end user's user agent to make the | |||
following HTTPS request: | following HTTPS request: | |||
GET /authz?client_id=s6BhdRkqt3&request=eyJhbG..AlMGzw HTTP/1.1 | GET /authz?client_id=s6BhdRkqt3&request=eyJhbG..AlMGzw HTTP/1.1 | |||
Host: server.example.com | Host: server.example.com | |||
The value for the request parameter is abbreviated for brevity. | The value for the request parameter is abbreviated for brevity. | |||
The authorization request object MUST be one of the following: | The Authorization Request Object MUST be one of the following: | |||
(a) JWS signed | (a) JWS signed | |||
(b) JWS signed and JWE encrypted | (b) JWS signed and JWE encrypted | |||
The client MAY send the parameters included in the request object | The client MAY send the parameters included in the Request Object | |||
duplicated in the query parameters as well for the backward | duplicated in the query parameters as well for backward | |||
compatibility etc. However, the authorization server supporting this | compatibility, etc. However, the authorization server supporting | |||
specification MUST only use the parameters included in the request | this specification MUST only use the parameters included in the | |||
object. | Request Object. | |||
5.1. Passing a Request Object by Value | 5.1. Passing a Request Object by Value | |||
The Client sends the Authorization Request as a Request Object to the | The client sends the authorization request as a Request Object to the | |||
Authorization Endpoint as the "request" parameter value. | authorization endpoint as the "request" parameter value. | |||
The following is an example of an Authorization Request using the | The following is an example of an authorization request using the | |||
"request" parameter (with line wraps within values for display | "request" parameter (with line wraps within values for display | |||
purposes only): | purposes only): | |||
https://server.example.com/authorize?client_id=s6BhdRkqt3& | https://server.example.com/authorize?client_id=s6BhdRkqt3& | |||
request=eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ewogICAgImlzcyI6 | request=eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ewogICAgImlzcyI6 | |||
ICJzNkJoZFJrcXQzIiwKICAgICJhdWQiOiAiaHR0cHM6Ly9zZXJ2ZXIuZXhhbXBs | ICJzNkJoZFJrcXQzIiwKICAgICJhdWQiOiAiaHR0cHM6Ly9zZXJ2ZXIuZXhhbXBs | |||
ZS5jb20iLAogICAgInJlc3BvbnNlX3R5cGUiOiAiY29kZSBpZF90b2tlbiIsCiAg | ZS5jb20iLAogICAgInJlc3BvbnNlX3R5cGUiOiAiY29kZSBpZF90b2tlbiIsCiAg | |||
ICAiY2xpZW50X2lkIjogInM2QmhkUmtxdDMiLAogICAgInJlZGlyZWN0X3VyaSI6 | ICAiY2xpZW50X2lkIjogInM2QmhkUmtxdDMiLAogICAgInJlZGlyZWN0X3VyaSI6 | |||
ICJodHRwczovL2NsaWVudC5leGFtcGxlLm9yZy9jYiIsCiAgICAic2NvcGUiOiAi | ICJodHRwczovL2NsaWVudC5leGFtcGxlLm9yZy9jYiIsCiAgICAic2NvcGUiOiAi | |||
b3BlbmlkIiwKICAgICJzdGF0ZSI6ICJhZjBpZmpzbGRraiIsCiAgICAibm9uY2Ui | b3BlbmlkIiwKICAgICJzdGF0ZSI6ICJhZjBpZmpzbGRraiIsCiAgICAibm9uY2Ui | |||
OiAibi0wUzZfV3pBMk1qIiwKICAgICJtYXhfYWdlIjogODY0MDAKfQ.Nsxa_18VU | OiAibi0wUzZfV3pBMk1qIiwKICAgICJtYXhfYWdlIjogODY0MDAKfQ.Nsxa_18VU | |||
ElVaPjqW_ToI1yrEJ67BgKb5xsuZRVqzGkfKrOIX7BCx0biSxYGmjK9KJPctH1OC | ElVaPjqW_ToI1yrEJ67BgKb5xsuZRVqzGkfKrOIX7BCx0biSxYGmjK9KJPctH1OC | |||
0iQJwXu5YVY-vnW0_PLJb1C2HG-ztVzcnKZC2gE4i0vgQcpkUOCpW3SEYXnyWnKz | 0iQJwXu5YVY-vnW0_PLJb1C2HG-ztVzcnKZC2gE4i0vgQcpkUOCpW3SEYXnyWnKz | |||
uKzqSb1wAZALo5f89B_p6QA6j6JwBSRvdVsDPdulW8lKxGTbH82czCaQ50rLAg3E | uKzqSb1wAZALo5f89B_p6QA6j6JwBSRvdVsDPdulW8lKxGTbH82czCaQ50rLAg3E | |||
YLYaCb4ik4I1zGXE4fvim9FIMs8OCMmzwIB5S-ujFfzwFjoyuPEV4hJnoVUmXR_W | YLYaCb4ik4I1zGXE4fvim9FIMs8OCMmzwIB5S-ujFfzwFjoyuPEV4hJnoVUmXR_W | |||
9typPf846lGwA8h9G9oNTIuX8Ft2jfpnZdFmLg3_wr3Wa5q3a-lfbgF3S9H_8nN3 | 9typPf846lGwA8h9G9oNTIuX8Ft2jfpnZdFmLg3_wr3Wa5q3a-lfbgF3S9H_8nN3 | |||
j1i7tLR_5Nz-g | j1i7tLR_5Nz-g | |||
5.2. Passing a Request Object by Reference | 5.2. Passing a Request Object by Reference | |||
The "request_uri" Authorization Request parameter enables OAuth | The "request_uri" authorization request parameter enables OAuth | |||
authorization requests to be passed by reference, rather than by | authorization requests to be passed by reference rather than by | |||
value. This parameter is used identically to the "request" | value. This parameter is used identically to the "request" | |||
parameter, other than that the Request Object value is retrieved from | parameter, except that the Request Object value is retrieved from the | |||
the resource identified by the specified URI rather than passed by | resource identified by the specified URI rather than passed by value. | |||
value. | ||||
The entire Request URI SHOULD NOT exceed 512 ASCII characters. There | The entire Request URI SHOULD NOT exceed 512 ASCII characters. There | |||
are two reasons for this restriction: | are two reasons for this restriction: | |||
1. Many phones in the market as of this writing still do not accept | 1. Many phones on the market as of this writing still do not accept | |||
large payloads. The restriction is typically either 512 or 1024 | large payloads. The restriction is typically either 512 or 1024 | |||
ASCII characters. | ASCII characters. | |||
2. On a slow connection such as 2G mobile connection, a large URL | 2. On a slow connection such as a 2G mobile connection, a large URL | |||
would cause the slow response and therefore the use of such is | would cause a slow response; therefore, the use of such is not | |||
not advisable from the user experience point of view. | advisable from the user-experience point of view. | |||
The contents of the resource referenced by the "request_uri" MUST be | The contents of the resource referenced by the "request_uri" MUST be | |||
a Request Object and MUST be reachable by the Authorization Server | a Request Object and MUST be reachable by the authorization server | |||
unless the URI was provided to the client by the Authorization | unless the URI was provided to the client by the authorization | |||
Server. In the first case, the "request_uri" MUST be an "https" URI, | server. In the first case, the "request_uri" MUST be an "https" URI, | |||
as specified in Section 2.7.2 of RFC7230 [RFC7230]. In the second | as specified in Section 2.7.2 of [RFC7230]. In the second case, it | |||
case, it MUST be a URN, as specified in RFC8141 [RFC8141]. | MUST be a URN, as specified in [RFC8141]. | |||
The following is an example of the contents of a Request Object | The following is an example of the contents of a Request Object | |||
resource that can be referenced by a "request_uri" (with line wraps | resource that can be referenced by a "request_uri" (with line wraps | |||
within values for display purposes only): | within values for display purposes only): | |||
eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ewogICAgImlzcyI6ICJzNkJoZF | eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ewogICAgImlzcyI6ICJzNkJoZF | |||
JrcXQzIiwKICAgICJhdWQiOiAiaHR0cHM6Ly9zZXJ2ZXIuZXhhbXBsZS5jb20iLAog | JrcXQzIiwKICAgICJhdWQiOiAiaHR0cHM6Ly9zZXJ2ZXIuZXhhbXBsZS5jb20iLAog | |||
ICAgInJlc3BvbnNlX3R5cGUiOiAiY29kZSBpZF90b2tlbiIsCiAgICAiY2xpZW50X2 | ICAgInJlc3BvbnNlX3R5cGUiOiAiY29kZSBpZF90b2tlbiIsCiAgICAiY2xpZW50X2 | |||
lkIjogInM2QmhkUmtxdDMiLAogICAgInJlZGlyZWN0X3VyaSI6ICJodHRwczovL2Ns | lkIjogInM2QmhkUmtxdDMiLAogICAgInJlZGlyZWN0X3VyaSI6ICJodHRwczovL2Ns | |||
aWVudC5leGFtcGxlLm9yZy9jYiIsCiAgICAic2NvcGUiOiAib3BlbmlkIiwKICAgIC | aWVudC5leGFtcGxlLm9yZy9jYiIsCiAgICAic2NvcGUiOiAib3BlbmlkIiwKICAgIC | |||
JzdGF0ZSI6ICJhZjBpZmpzbGRraiIsCiAgICAibm9uY2UiOiAibi0wUzZfV3pBMk1q | JzdGF0ZSI6ICJhZjBpZmpzbGRraiIsCiAgICAibm9uY2UiOiAibi0wUzZfV3pBMk1q | |||
IiwKICAgICJtYXhfYWdlIjogODY0MDAKfQ.Nsxa_18VUElVaPjqW_ToI1yrEJ67BgK | IiwKICAgICJtYXhfYWdlIjogODY0MDAKfQ.Nsxa_18VUElVaPjqW_ToI1yrEJ67BgK | |||
b5xsuZRVqzGkfKrOIX7BCx0biSxYGmjK9KJPctH1OC0iQJwXu5YVY-vnW0_PLJb1C2 | b5xsuZRVqzGkfKrOIX7BCx0biSxYGmjK9KJPctH1OC0iQJwXu5YVY-vnW0_PLJb1C2 | |||
HG-ztVzcnKZC2gE4i0vgQcpkUOCpW3SEYXnyWnKzuKzqSb1wAZALo5f89B_p6QA6j6 | HG-ztVzcnKZC2gE4i0vgQcpkUOCpW3SEYXnyWnKzuKzqSb1wAZALo5f89B_p6QA6j6 | |||
JwBSRvdVsDPdulW8lKxGTbH82czCaQ50rLAg3EYLYaCb4ik4I1zGXE4fvim9FIMs8O | JwBSRvdVsDPdulW8lKxGTbH82czCaQ50rLAg3EYLYaCb4ik4I1zGXE4fvim9FIMs8O | |||
CMmzwIB5S-ujFfzwFjoyuPEV4hJnoVUmXR_W9typPf846lGwA8h9G9oNTIuX8Ft2jf | CMmzwIB5S-ujFfzwFjoyuPEV4hJnoVUmXR_W9typPf846lGwA8h9G9oNTIuX8Ft2jf | |||
pnZdFmLg3_wr3Wa5q3a-lfbgF3S9H_8nN3j1i7tLR_5Nz-g | pnZdFmLg3_wr3Wa5q3a-lfbgF3S9H_8nN3j1i7tLR_5Nz-g | |||
5.2.1. URI Referencing the Request Object | 5.2.1. URI Referencing the Request Object | |||
The Client stores the Request Object resource either locally or | The client stores the Request Object resource either locally or | |||
remotely at a URI the Authorization Server can access. Such facility | remotely at a URI the authorization server can access. Such a | |||
may be provided by the authorization server or a trusted third party. | facility may be provided by the authorization server or a trusted | |||
For example, the authorization server may provide a URL to which the | third party. For example, the authorization server may provide a URL | |||
client POSTs the request object and obtains the Request URI. This | to which the client POSTs the Request Object and obtains the Request | |||
URI is the Request Object URI, "request_uri". | URI. This URI is the Request Object URI, "request_uri". | |||
It is possible for the Request Object to include values that are to | It is possible for the Request Object to include values that are to | |||
be revealed only to the Authorization Server. As such, the | be revealed only to the authorization server. As such, the | |||
"request_uri" MUST have appropriate entropy for its lifetime so that | "request_uri" MUST have appropriate entropy for its lifetime so that | |||
the URI is not guessable if publicly retrievable. For the guidance, | the URI is not guessable if publicly retrievable. For the guidance, | |||
refer to 5.1.4.2.2 of [RFC6819] and Good Practices for Capability | refer to Section 5.1.4.2.2 of [RFC6819] and "Good Practices for | |||
URLs [CapURLs]. It is RECOMMENDED that it be removed after a | Capability URLs" [CapURLs]. It is RECOMMENDED that the "request_uri" | |||
reasonable timeout unless access control measures are taken. | be removed after a reasonable timeout unless access control measures | |||
are taken. | ||||
The following is an example of a Request Object URI value (with line | The following is an example of a Request Object URI value (with line | |||
wraps within values for display purposes only). In this example, a | wraps within values for display purposes only). In this example, a | |||
trusted third-party service hosts the Request Object. | trusted third-party service hosts the Request Object. | |||
https://tfp.example.org/request.jwt/ | https://tfp.example.org/request.jwt/ | |||
GkurKxf5T0Y-mnPFCHqWOMiZi4VS138cQO_V7PZHAdM | GkurKxf5T0Y-mnPFCHqWOMiZi4VS138cQO_V7PZHAdM | |||
5.2.2. Request using the "request_uri" Request Parameter | 5.2.2. Request Using the "request_uri" Request Parameter | |||
The Client sends the Authorization Request to the Authorization | The client sends the authorization request to the authorization | |||
Endpoint. | endpoint. | |||
The following is an example of an Authorization Request using the | The following is an example of an authorization request using the | |||
"request_uri" parameter (with line wraps within values for display | "request_uri" parameter (with line wraps within values for display | |||
purposes only): | purposes only): | |||
https://server.example.com/authorize? | https://server.example.com/authorize? | |||
client_id=s6BhdRkqt3 | client_id=s6BhdRkqt3 | |||
&request_uri=https%3A%2F%2Ftfp.example.org%2Frequest.jwt | &request_uri=https%3A%2F%2Ftfp.example.org%2Frequest.jwt | |||
%2FGkurKxf5T0Y-mnPFCHqWOMiZi4VS138cQO_V7PZHAdM | %2FGkurKxf5T0Y-mnPFCHqWOMiZi4VS138cQO_V7PZHAdM | |||
5.2.3. Authorization Server Fetches Request Object | 5.2.3. Authorization Server Fetches Request Object | |||
Upon receipt of the Request, the Authorization Server MUST send an | Upon receipt of the Request, the authorization server MUST send an | |||
HTTP "GET" request to the "request_uri" to retrieve the referenced | HTTP "GET" request to the "request_uri" to retrieve the referenced | |||
Request Object, unless it is stored in a way so that it can retrieve | Request Object unless the Request Object is stored in a way so that | |||
it through other mechanism securely, and parse it to recreate the | the server can retrieve it through other mechanisms securely and | |||
Authorization Request parameters. | parse it to recreate the authorization request parameters. | |||
The following is an example of this fetch process. In this example, | The following is an example of this fetch process. In this example, | |||
a trusted third-party service hosts the Request Object. | a trusted third-party service hosts the Request Object. | |||
GET /request.jwt/GkurKxf5T0Y-mnPFCHqWOMiZi4VS138cQO_V7PZHAdM HTTP/1.1 | GET /request.jwt/GkurKxf5T0Y-mnPFCHqWOMiZi4VS138cQO_V7PZHAdM HTTP/1.1 | |||
Host: tfp.example.org | Host: tfp.example.org | |||
The following is an example of the fetch response: | The following is an example of the fetch response: | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Date: Thu, 20 Aug 2020 23:52:39 GMT | Date: Thu, 20 Aug 2020 23:52:39 GMT | |||
Server: Apache/2.4.43 (tfp.example.org) | Server: Apache/2.4.43 (tfp.example.org) | |||
Content-type: application/oauth-authz-req+jwt | Content-type: application/oauth-authz-req+jwt | |||
Content-Length: 797 | Content-Length: 797 | |||
Last-Modified: Wed, 19 Aug 2020 23:52:32 GMT | Last-Modified: Wed, 19 Aug 2020 23:52:32 GMT | |||
eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ewogICAgImlzcyI6ICJzNkJoZF | eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ewogICAgImlzcyI6ICJzNkJoZF | |||
skipping to change at page 13, line 30 ¶ | skipping to change at line 580 ¶ | |||
b5xsuZRVqzGkfKrOIX7BCx0biSxYGmjK9KJPctH1OC0iQJwXu5YVY-vnW0_PLJb1C2 | b5xsuZRVqzGkfKrOIX7BCx0biSxYGmjK9KJPctH1OC0iQJwXu5YVY-vnW0_PLJb1C2 | |||
HG-ztVzcnKZC2gE4i0vgQcpkUOCpW3SEYXnyWnKzuKzqSb1wAZALo5f89B_p6QA6j6 | HG-ztVzcnKZC2gE4i0vgQcpkUOCpW3SEYXnyWnKzuKzqSb1wAZALo5f89B_p6QA6j6 | |||
JwBSRvdVsDPdulW8lKxGTbH82czCaQ50rLAg3EYLYaCb4ik4I1zGXE4fvim9FIMs8O | JwBSRvdVsDPdulW8lKxGTbH82czCaQ50rLAg3EYLYaCb4ik4I1zGXE4fvim9FIMs8O | |||
CMmzwIB5S-ujFfzwFjoyuPEV4hJnoVUmXR_W9typPf846lGwA8h9G9oNTIuX8Ft2jf | CMmzwIB5S-ujFfzwFjoyuPEV4hJnoVUmXR_W9typPf846lGwA8h9G9oNTIuX8Ft2jf | |||
pnZdFmLg3_wr3Wa5q3a-lfbgF3S9H_8nN3j1i7tLR_5Nz-g | pnZdFmLg3_wr3Wa5q3a-lfbgF3S9H_8nN3j1i7tLR_5Nz-g | |||
6. Validating JWT-Based Requests | 6. Validating JWT-Based Requests | |||
6.1. JWE Encrypted Request Object | 6.1. JWE Encrypted Request Object | |||
If the request object is encrypted, the Authorization Server MUST | If the Request Object is encrypted, the authorization server MUST | |||
decrypt the JWT in accordance with the JSON Web Encryption [RFC7516] | decrypt the JWT in accordance with the JSON Web Encryption [RFC7516] | |||
specification. | specification. | |||
The result is a signed request object. | The result is a signed Request Object. | |||
If decryption fails, the Authorization Server MUST return an | If decryption fails, the authorization server MUST return an | |||
"invalid_request_object" error to the client in response to the | "invalid_request_object" error to the client in response to the | |||
authorization request. | authorization request. | |||
6.2. JWS Signed Request Object | 6.2. JWS-Signed Request Object | |||
The Authorization Server MUST validate the signature of the JSON Web | The authorization server MUST validate the signature of the JWS- | |||
Signature [RFC7515] signed Request Object. If a "kid" Header | signed [RFC7515] Request Object. If a "kid" Header Parameter is | |||
Parameter is present, the key identified MUST be the key used, and | present, the key identified MUST be the key used and MUST be a key | |||
MUST be a key associated with the client. The signature MUST be | associated with the client. The signature MUST be validated using a | |||
validated using a key associated with the client and the algorithm | key associated with the client and the algorithm specified in the | |||
specified in the "alg" Header Parameter. Algorithm verification MUST | "alg" Header Parameter. Algorithm verification MUST be performed, as | |||
be performed, as specified in Sections 3.1 and 3.2 of [RFC8725]. | specified in Sections 3.1 and 3.2 of [RFC8725]. | |||
If the key is not associated with the client or if signature | If the key is not associated with the client or if signature | |||
validation fails, the Authorization Server MUST return an | validation fails, the authorization server MUST return an | |||
"invalid_request_object" error to the client in response to the | "invalid_request_object" error to the client in response to the | |||
authorization request. | authorization request. | |||
6.3. Request Parameter Assembly and Validation | 6.3. Request Parameter Assembly and Validation | |||
The Authorization Server MUST extract the set of Authorization | The authorization server MUST extract the set of authorization | |||
Request parameters from the Request Object value. The Authorization | request parameters from the Request Object value. The authorization | |||
Server MUST only use the parameters in the Request Object even if the | server MUST only use the parameters in the Request Object, even if | |||
same parameter is provided in the query parameter. The Client ID | the same parameter is provided in the query parameter. The client ID | |||
values in the "client_id" request parameter and in the Request Object | values in the "client_id" request parameter and in the Request Object | |||
"client_id" claim MUST be identical. The Authorization Server then | "client_id" claim MUST be identical. The authorization server then | |||
validates the request as specified in OAuth 2.0 [RFC6749]. | validates the request, as specified in OAuth 2.0 [RFC6749]. | |||
If the Client ID check or the request validation fails, then the | If the Client ID check or the request validation fails, then the | |||
Authorization Server MUST return an error to the client in response | authorization server MUST return an error to the client in response | |||
to the authorization request, as specified in Section 5.2 of OAuth | to the authorization request, as specified in Section 5.2 of | |||
2.0 [RFC6749]. | [RFC6749] (OAuth 2.0). | |||
7. Authorization Server Response | 7. Authorization Server Response | |||
Authorization Server Response is created and sent to the client as in | The authorization server response is created and sent to the client | |||
Section 4 of OAuth 2.0 [RFC6749]. | as in Section 4 of [RFC6749] (OAuth 2.0). | |||
In addition, this document uses these additional error values: | In addition, this document uses these additional error values: | |||
invalid_request_uri | invalid_request_uri | |||
The "request_uri" in the Authorization Request returns an error or | The "request_uri" in the authorization request returns an error or | |||
contains invalid data. | contains invalid data. | |||
invalid_request_object | invalid_request_object | |||
The request parameter contains an invalid Request Object. | The request parameter contains an invalid Request Object. | |||
request_not_supported | request_not_supported | |||
The Authorization Server does not support the use of the "request" | The authorization server does not support the use of the "request" | |||
parameter. | parameter. | |||
request_uri_not_supported | request_uri_not_supported | |||
The Authorization Server does not support the use of the | The authorization server does not support the use of the | |||
"request_uri" parameter. | "request_uri" parameter. | |||
8. TLS Requirements | 8. TLS Requirements | |||
Client implementations supporting the Request Object URI method MUST | Client implementations supporting the Request Object URI method MUST | |||
support TLS following Recommendations for Secure Use of Transport | support TLS, following "Recommendations for Secure Use of Transport | |||
Layer Security (TLS) and Datagram Transport Layer Security (DTLS) | Layer Security (TLS) and Datagram Transport Layer Security (DTLS)" | |||
[BCP195]. | [RFC7525]. | |||
To protect against information disclosure and tampering, | To protect against information disclosure and tampering, | |||
confidentiality protection MUST be applied using TLS with a cipher | confidentiality protection MUST be applied using TLS with a cipher | |||
suite that provides confidentiality and integrity protection. | suite that provides confidentiality and integrity protection. | |||
HTTP clients MUST also verify the TLS server certificate, using DNS- | HTTP clients MUST also verify the TLS server certificate, using DNS- | |||
ID [RFC6125], to avoid man-in-the-middle attacks. The rules and | ID [RFC6125], to avoid man-in-the-middle attacks. The rules and | |||
guidelines defined in [RFC6125] apply here, with the following | guidelines defined in [RFC6125] apply here, with the following | |||
considerations: | considerations: | |||
o Support for DNS-ID identifier type (that is, the dNSName identity | * Support for DNS-ID identifier type (that is, the dNSName identity | |||
in the subjectAltName extension) is REQUIRED. Certification | in the subjectAltName extension) is REQUIRED. Certification | |||
authorities which issue server certificates MUST support the DNS- | authorities that issue server certificates MUST support the DNS-ID | |||
ID identifier type, and the DNS-ID identifier type MUST be present | identifier type, and the DNS-ID identifier type MUST be present in | |||
in server certificates. | server certificates. | |||
o DNS names in server certificates MAY contain the wildcard | * DNS names in server certificates MAY contain the wildcard | |||
character "*". | character "*". | |||
o Clients MUST NOT use CN-ID identifiers; a CN field may be present | * Clients MUST NOT use CN-ID identifiers; a Common Name field (CN | |||
in the server certificate's subject name, but MUST NOT be used for | field) may be present in the server certificate's subject name but | |||
authentication within the rules described in [BCP195]. | MUST NOT be used for authentication within the rules described in | |||
[RFC7525]. | ||||
o SRV-ID and URI-ID as described in Section 6.5 of [RFC6125] MUST | * SRV-ID and URI-ID as described in Section 6.5 of [RFC6125] MUST | |||
NOT be used for comparison. | NOT be used for comparison. | |||
9. IANA Considerations | 9. IANA Considerations | |||
9.1. OAuth Parameters Registration | 9.1. OAuth Parameters Registration | |||
Since the request object is a JWT, the core JWT claims cannot be used | Since the Request Object is a JWT, the core JWT claims cannot be used | |||
for any purpose in the request object other than for what JWT | for any purpose in the Request Object other than for what JWT | |||
dictates. Thus, they need to be registered as OAuth Authorization | dictates. Thus, they have been registered as OAuth authorization | |||
Request parameters to avoid future OAuth extensions using them with | request parameters to avoid future OAuth extensions using them with | |||
different meanings. | different meanings. | |||
This specification adds the following values to the "OAuth | This specification adds the following values to the "OAuth | |||
Parameters" registry [IANA.OAuth.Parameters] established by | Parameters" registry [IANA.OAuth.Parameters] established by | |||
[RFC6749]. | [RFC6749]. | |||
o Name: "iss" | Name: "iss" | |||
o Parameter Usage Location: authorization request | Parameter Usage Location: authorization request | |||
o Change Controller: IETF | Change Controller: IETF | |||
o Specification Document(s): Section 4.1.1 of [RFC7519] and this | Specification Document(s): This document and Section 4.1.1 of | |||
document. | [RFC7519]. | |||
o Name: "sub" | Name: "sub" | |||
o Parameter Usage Location: authorization request | Parameter Usage Location: authorization request | |||
o Change Controller: IETF | Change Controller: IETF | |||
o Specification Document(s): Section 4.1.2 of [RFC7519] and this | Specification Document(s): This document and Section 4.1.2 of | |||
document. | [RFC7519]. | |||
o Name: "aud" | Name: "aud" | |||
o Parameter Usage Location: authorization request | Parameter Usage Location: authorization request | |||
o Change Controller: IETF | Change Controller: IETF | |||
o Specification Document(s): Section 4.1.3 of [RFC7519] and this | Specification Document(s): This document and Section 4.1.3 of | |||
document. | [RFC7519]. | |||
o Name: "exp" | Name: "exp" | |||
o Parameter Usage Location: authorization request | Parameter Usage Location: authorization request | |||
o Change Controller: IETF | Change Controller: IETF | |||
o Specification Document(s): Section 4.1.4 of [RFC7519] and this | Specification Document(s): This document and Section 4.1.4 of | |||
document. | [RFC7519]. | |||
o Name: "nbf" | Name: "nbf" | |||
o Parameter Usage Location: authorization request | Parameter Usage Location: authorization request | |||
o Change Controller: IETF | Change Controller: IETF | |||
o Specification Document(s): Section 4.1.5 of [RFC7519] and this | Specification Document(s): This document and Section 4.1.5 of | |||
document. | [RFC7519]. | |||
o Name: "iat" | Name: "iat" | |||
o Parameter Usage Location: authorization request | Parameter Usage Location: authorization request | |||
o Change Controller: IETF | Change Controller: IETF | |||
o Specification Document(s): Section 4.1.6 of [RFC7519] and this | Specification Document(s): This document and Section 4.1.6 of | |||
document. | [RFC7519]. | |||
o Name: "jti" | Name: "jti" | |||
o Parameter Usage Location: authorization request | Parameter Usage Location: authorization request | |||
o Change Controller: IETF | Change Controller: IETF | |||
o Specification Document(s): Section 4.1.7 of [RFC7519] and this | Specification Document(s): This document and Section 4.1.7 of | |||
document. | [RFC7519]. | |||
9.2. OAuth Authorization Server Metadata Registry | 9.2. OAuth Authorization Server Metadata Registry | |||
This specification adds the following value to the "OAuth | This specification adds the following value to the "OAuth | |||
Authorization Server Metadata" registry [IANA.OAuth.Parameters] | Authorization Server Metadata" registry [IANA.OAuth.Parameters] | |||
established by [RFC8414]. | established by [RFC8414]. | |||
o Metadata Name: "require_signed_request_object" | Metadata Name: "require_signed_request_object" | |||
o Metadata Description: Indicates where authorization request needs | Metadata Description: Indicates where authorization request needs to | |||
to be protected as Request Object and provided through either | be protected as Request Object and provided through either | |||
"request" or "request_uri parameter". | "request" or "request_uri parameter". | |||
o Change Controller: IETF | Change Controller: IETF | |||
o Specification Document(s): Section 10.5 of this document. | Specification Document(s): Section 10.5 of this document. | |||
9.3. OAuth Dynamic Client Registration Metadata Registry | 9.3. OAuth Dynamic Client Registration Metadata Registry | |||
This specification adds the following value to the "OAuth Dynamic | This specification adds the following value to the "OAuth Dynamic | |||
Client Registration Metadata" registry [IANA.OAuth.Parameters] | Client Registration Metadata" registry [IANA.OAuth.Parameters] | |||
established by [RFC7591]. | established by [RFC7591]. | |||
o Metadata Name: "require_signed_request_object" | Metadata Name: "require_signed_request_object" | |||
o Metadata Description: Indicates where authorization request needs | Metadata Description: Indicates where authorization request needs to | |||
to be protected as Request Object and provided through either | be protected as Request Object and provided through either | |||
"request" or "request_uri parameter". | "request" or "request_uri parameter". | |||
o Change Controller: IETF | Change Controller: IETF | |||
o Specification Document(s): Section 10.5 of this document. | Specification Document(s): Section 10.5 of this document. | |||
9.4. Media Type Registration | 9.4. Media Type Registration | |||
9.4.1. Registry Contents | 9.4.1. Registry Contents | |||
This section registers the "application/oauth-authz-req+jwt" media | This section registers the "application/oauth-authz-req+jwt" media | |||
type [RFC2046] in the "Media Types" registry [IANA.MediaTypes] in the | type [RFC2046] in the "Media Types" registry [IANA.MediaTypes] in the | |||
manner described in [RFC6838], which can be used to indicate that the | manner described in [RFC6838]. It can be used to indicate that the | |||
content is a JWT containing Request Object claims. | content is a JWT containing Request Object claims. | |||
o Type name: application | Type name: application | |||
o Subtype name: oauth-authz-req+jwt | Subtype name: oauth-authz-req+jwt | |||
o Required parameters: n/a | Required parameters: N/A | |||
o Optional parameters: n/a | Optional parameters: N/A | |||
o Encoding considerations: binary; A Request Object is a JWT; JWT | Encoding considerations: binary; a Request Object is a JWT; JWT | |||
values are encoded as a series of base64url-encoded values (some | values are encoded as a series of base64url-encoded values (some | |||
of which may be the empty string) separated by period ('.') | of which may be the empty string) separated by period (".") | |||
characters. | characters. | |||
o Security considerations: See Section 10 of [[ this specification | Security considerations: See Section 10 of RFC 9101 | |||
]] | Interoperability considerations: N/A | |||
o Interoperability considerations: n/a | Published specification: Section 4 of RFC 9101 | |||
o Published specification: Section 4 of [[ this specification ]] | Applications that use this media type: Applications that use Request | |||
o Applications that use this media type: Applications that use | Objects to make an OAuth 2.0 authorization request | |||
Request Objects to make an OAuth 2.0 Authorization Request | Fragment identifier considerations: N/A | |||
o Fragment identifier considerations: n/a | Additional information: | |||
o Additional information: | Deprecated alias names for this type: N/A | |||
Magic number(s): N/A | ||||
Magic number(s): n/a | File extension(s): N/A | |||
File extension(s): n/a | Macintosh file type code(s): N/A | |||
Macintosh file type code(s): n/a | Person & email address to contact for further information: | |||
Nat Sakimura <nat@nat.consulting> | ||||
o Person & email address to contact for further information: | Intended usage: COMMON | |||
Nat Sakimura, nat@nat.consulting | Restrictions on usage: none | |||
o Intended usage: COMMON | Author: Nat Sakimura <nat@nat.consulting> | |||
o Restrictions on usage: none | Change controller: IETF | |||
o Author: Nat Sakimura, nat@nat.consulting | Provisional registration? No | |||
o Change controller: IETF | ||||
o Provisional registration? No | ||||
10. Security Considerations | 10. Security Considerations | |||
In addition to the all the security considerations discussed in OAuth | In addition to all the security considerations discussed in OAuth 2.0 | |||
2.0 [RFC6819], the security considerations in [RFC7515], [RFC7516], | [RFC6819], the security considerations in [RFC7515], [RFC7516], | |||
[RFC7518], and [RFC8725] need to be considered. Also, there are | [RFC7518], and [RFC8725] need to be considered. Also, there are | |||
several academic papers such as [BASIN] that provide useful insight | several academic papers such as [BASIN] that provide useful insight | |||
into the security properties of protocols like OAuth. | into the security properties of protocols like OAuth. | |||
In consideration of the above, this document advises taking the | In consideration of the above, this document advises taking the | |||
following security considerations into account. | following security considerations into account. | |||
10.1. Choice of Algorithms | 10.1. Choice of Algorithms | |||
When sending the authorization request object through "request" | When sending the Authorization Request Object through the "request" | |||
parameter, it MUST either be signed using JWS [RFC7515] or signed | parameter, it MUST be either signed using JWS [RFC7515] or signed and | |||
then encrypted using JWS [RFC7515] and JWE [RFC7516] respectively, | then encrypted using JWS [RFC7515] and JWE [RFC7516], respectively, | |||
with then considered appropriate algorithms. | with algorithms considered appropriate at the time. | |||
10.2. Request Source Authentication | 10.2. Request Source Authentication | |||
The source of the Authorization Request MUST always be verified. | The source of the authorization request MUST always be verified. | |||
There are several ways to do it: | There are several ways to do it: | |||
(a) Verifying the JWS Signature of the Request Object. | (a) Verifying the JWS Signature of the Request Object. | |||
(b) Verifying that the symmetric key for the JWE encryption is the | (b) Verifying that the symmetric key for the JWE encryption is the | |||
correct one if the JWE is using symmetric encryption. Note | correct one if the JWE is using symmetric encryption. Note, | |||
however, that if public key encryption is used, no source | however, that if public key encryption is used, no source | |||
authentication is enabled by the encryption, as any party can | authentication is enabled by the encryption, as any party can | |||
encrypt content to the public key. | encrypt to the public key. | |||
(c) Verifying the TLS Server Identity of the Request Object URI. In | (c) Verifying the TLS Server Identity of the Request Object URI. In | |||
this case, the Authorization Server MUST know out-of-band that | this case, the authorization server MUST know out-of-band that | |||
the Client uses Request Object URI and only the Client is | the client uses the Request Object URI and only the client is | |||
covered by the TLS certificate. In general, it is not a | covered by the TLS certificate. In general, this is not a | |||
reliable method. | reliable method. | |||
(d) When an Authorization Server implements a service that returns a | (d) When an authorization server implements a service that returns a | |||
Request Object URI in exchange for a Request Object, the | Request Object URI in exchange for a Request Object, the | |||
Authorization Server MUST perform Client Authentication to | authorization server MUST perform client authentication to | |||
accept the Request Object and bind the Client Identifier to the | accept the Request Object and bind the client identifier to the | |||
Request Object URI it is providing. It MUST validate the | Request Object URI it is providing. It MUST validate the | |||
signature, per (a). Since Request Object URI can be replayed, | signature, per (a). Since the Request Object URI can be | |||
the lifetime of the Request Object URI MUST be short and | replayed, the lifetime of the Request Object URI MUST be short | |||
preferably one-time use. The entropy of the Request Object URI | and preferably one-time use. The entropy of the Request Object | |||
MUST be sufficiently large. The adequate shortness of the | URI MUST be sufficiently large. The adequate shortness of the | |||
validity and the entropy of the Request Object URI depends on | validity and the entropy of the Request Object URI depends on | |||
the risk calculation based on the value of the resource being | the risk calculation based on the value of the resource being | |||
protected. A general guidance for the validity time would be | protected. A general guidance for the validity time would be | |||
less than a minute and the Request Object URI is to include a | less than a minute, and the Request Object URI is to include a | |||
cryptographic random value of 128bit or more at the time of the | cryptographic random value of 128 bits or more at the time of | |||
writing of this specification. | the writing of this specification. | |||
(e) When a trusted third-party service returns a Request Object URI | (e) When a trusted third-party service returns a Request Object URI | |||
in exchange for a Request Object, it MUST validate the | in exchange for a Request Object, it MUST validate the | |||
signature, per (a). In addition, the Authorization Server MUST | signature, per (a). In addition, the authorization server MUST | |||
be trusted by the third-party service and MUST know out-of-band | be trusted by the third-party service and MUST know out-of-band | |||
that the client is also trusted by it. | that the client is also trusted by it. | |||
10.3. Explicit Endpoints | 10.3. Explicit Endpoints | |||
Although this specification does not require them, research such as | Although this specification does not require them, research such as | |||
[BASIN] points out that it is a good practice to explicitly state the | [BASIN] points out that it is a good practice to explicitly state the | |||
intended interaction endpoints and the message position in the | intended interaction endpoints and the message position in the | |||
sequence in a tamper evident manner so that the intent of the | sequence in a tamper-evident manner so that the intent of the | |||
initiator is unambiguous. The following endpoints defined in | initiator is unambiguous. It is RECOMMENDED by this specification to | |||
[RFC6749], [RFC6750], and [RFC8414] are RECOMMENDED by this | use this practice for the following endpoints defined in [RFC6749], | |||
specification to use this practice : | [RFC6750], and [RFC8414]: | |||
(a) Protected Resources ("protected_resources") | (a) Protected resources ("protected_resources") | |||
(b) Authorization Endpoint ("authorization_endpoint") | (b) Authorization endpoint ("authorization_endpoint") | |||
(c) Redirection URI ("redirect_uri") | (c) Redirection URI ("redirect_uri") | |||
(d) Token Endpoint ("token_endpoint") | (d) Token endpoint ("token_endpoint") | |||
Further, if dynamic discovery is used, then this practice also | Further, if dynamic discovery is used, then this practice also | |||
applies to the discovery related endpoints. | applies to the discovery-related endpoints. | |||
In [RFC6749], while Redirection URI is included in the Authorization | In [RFC6749], while the redirection URI is included in the | |||
Request, others are not. As a result, the same applies to | authorization request, others are not. As a result, the same applies | |||
Authorization Request Object. | to the Authorization Request Object. | |||
10.4. Risks Associated with request_uri | 10.4. Risks Associated with request_uri | |||
The introduction of "request_uri" introduces several attack | The introduction of "request_uri" introduces several attack | |||
possibilities. Consult the security considerations in Section 7 of | possibilities. Consult the security considerations in Section 7 of | |||
RFC3986 [RFC3986] for more information regarding risks associated | [RFC3986] for more information regarding risks associated with URIs. | |||
with URIs. | ||||
10.4.1. DDoS Attack on the Authorization Server | 10.4.1. DDoS Attack on the Authorization Server | |||
A set of malicious client can launch a DoS attack to the | A set of malicious clients can launch a DoS attack to the | |||
authorization server by pointing the "request_uri" to a URI that | authorization server by pointing the "request_uri" to a URI that | |||
returns extremely large content or extremely slow to respond. Under | returns extremely large content or is extremely slow to respond. | |||
such an attack, the server may use up its resource and start failing. | Under such an attack, the server may use up its resource and start | |||
failing. | ||||
Similarly, a malicious client can specify the "request_uri" value | Similarly, a malicious client can specify a "request_uri" value that | |||
that itself points to an authorization request URI that uses | itself points to an authorization request URI that uses "request_uri" | |||
"request_uri" to cause the recursive lookup. | to cause the recursive lookup. | |||
To prevent such attack to succeed, the server should (a) check that | To prevent such an attack from succeeding, the server should a) check | |||
the value of "request_uri" parameter does not point to an unexpected | that the value of the "request_uri" parameter does not point to an | |||
location, (b) check the media type of the response is "application/ | unexpected location, b) check that the media type of the response is | |||
oauth-authz-req+jwt", (c) implement a time-out for obtaining the | "application/oauth-authz-req+jwt", c) implement a timeout for | |||
content of "request_uri", and (d) not perform recursive GET on the | obtaining the content of "request_uri", and d) not perform recursive | |||
"request_uri". | GET on the "request_uri". | |||
10.4.2. Request URI Rewrite | 10.4.2. Request URI Rewrite | |||
The value of "request_uri" is not signed thus it can be tampered by | The value of "request_uri" is not signed; thus, it can be tampered | |||
Man-in-the-browser attacker. Several attack possibilities rise | with by a man-in-the-browser attacker. Several attack possibilities | |||
because of this, e.g., (a) attacker may create another file that the | arise because of this. For example, a) an attacker may create | |||
rewritten URI points to making it possible to request extra scope (b) | another file that the rewritten URI points to, making it possible to | |||
attacker launches a DoS attack to a victim site by setting the value | request extra scope, or b) an attacker may launch a DoS attack on a | |||
of "request_uri" to be that of the victim. | victim site by setting the value of "request_uri" to be that of the | |||
victim. | ||||
To prevent such attack to succeed, the server should (a) check that | To prevent such an attack from succeeding, the server should a) check | |||
the value of "request_uri" parameter does not point to an unexpected | that the value of the "request_uri" parameter does not point to an | |||
location, (b) check the media type of the response is "application/ | unexpected location, b) check that the media type of the response is | |||
oauth-authz-req+jwt", and (c) implement a time-out for obtaining the | "application/oauth-authz-req+jwt", and c) implement a timeout for | |||
content of "request_uri". | obtaining the content of "request_uri". | |||
10.5. Downgrade Attack | 10.5. Downgrade Attack | |||
Unless the protocol used by client and the server is locked down to | Unless the protocol used by the client and the server is locked down | |||
use OAuth JAR, it is possible for an attacker to use RFC6749 requests | to use an OAuth JWT-Secured Authorization Request (JAR), it is | |||
to bypass all the protection provided by this specification. | possible for an attacker to use RFC 6749 requests to bypass all the | |||
protection provided by this specification. | ||||
To prevent it, this specification defines a new client metadata and | To prevent this kind of attack, this specification defines new client | |||
server metadata "require_signed_request_object" whose value is a | metadata and server metadata values, both named | |||
boolean. | "require_signed_request_object", whose values are both booleans. | |||
When the value of it as a client metadata is "true", then the server | When the value of it as client metadata is "true", then the server | |||
MUST reject the authorization request from the client that does not | MUST reject the authorization request from the client that does not | |||
conform to this specification. It MUST also reject the request if | conform to this specification. It MUST also reject the request if | |||
the request object uses "alg":"none" when this client metadata value | the Request Object uses an "alg" value of "none" when this server | |||
is "true". If omitted, the default value is "false". | metadata value is "true". If omitted, the default value is "false". | |||
When the value of it as a server metadata is "true", then the server | When the value of it as server metadata is "true", then the server | |||
MUST reject the authorization request from any client that does not | MUST reject the authorization request from any client that does not | |||
conform to this specification. It MUST also reject the request if | conform to this specification. It MUST also reject the request if | |||
the request object uses "alg":"none" when this server metadata value | the Request Object uses an "alg" value of "none". If omitted, the | |||
is "true". If omitted, the default value is "false". | default value is "false". | |||
Note that even if "require_signed_request_object" metadata values are | Note that even if "require_signed_request_object" metadata values are | |||
not present, the client MAY use signed request objects, provided that | not present, the client MAY use signed Request Objects, provided that | |||
there are signing algorithms mutually supported by the client and the | there are signing algorithms mutually supported by the client and the | |||
server. Use of signing algorithm metadata is described in Section 4. | server. Use of signing algorithm metadata is described in Section 4. | |||
10.6. TLS Security Considerations | 10.6. TLS Security Considerations | |||
Current security considerations can be found in Recommendations for | Current security considerations can be found in "Recommendations for | |||
Secure Use of TLS and DTLS [BCP195]. This supersedes the TLS version | Secure Use of Transport Layer Security (TLS) and Datagram Transport | |||
Layer Security (DTLS)" [RFC7525]. This supersedes the TLS version | ||||
recommendations in OAuth 2.0 [RFC6749]. | recommendations in OAuth 2.0 [RFC6749]. | |||
10.7. Parameter Mismatches | 10.7. Parameter Mismatches | |||
Given that OAuth parameter values are being sent in two different | Given that OAuth parameter values are being sent in two different | |||
places, as normal OAuth parameters and as Request Object claims, | places, as normal OAuth parameters and as Request Object claims, | |||
implementations must guard against attacks that could use mismatching | implementations must guard against attacks that could use mismatching | |||
parameter values to obtain unintended outcomes. That is the reason | parameter values to obtain unintended outcomes. That is the reason | |||
that the two Client ID values MUST match, the reason that only the | that the two client ID values MUST match, the reason that only the | |||
parameter values from the Request Object are to be used, and the | parameter values from the Request Object are to be used, and the | |||
reason that neither "request" nor "request_uri" can appear in a | reason that neither "request" nor "request_uri" can appear in a | |||
Request Object. | Request Object. | |||
10.8. Cross-JWT Confusion | 10.8. Cross-JWT Confusion | |||
As described in Section 2.8 of [RFC8725], attackers may attempt to | As described in Section 2.8 of [RFC8725], attackers may attempt to | |||
use a JWT issued for one purpose in a context that it was not | use a JWT issued for one purpose in a context that it was not | |||
intended for. The mitigations described for these attacks can be | intended for. The mitigations described for these attacks can be | |||
applied to Request Objects. | applied to Request Objects. | |||
One way that an attacker might attempt to repurpose a Request Object | One way that an attacker might attempt to repurpose a Request Object | |||
is to try to use it as a client authentication JWT, as described in | is to try to use it as a client authentication JWT, as described in | |||
Section 2.2 of [RFC7523]. A simple way to prevent this is to never | Section 2.2 of [RFC7523]. A simple way to prevent this is to never | |||
use the Client ID as the "sub" value in a Request Object. | use the client ID as the "sub" value in a Request Object. | |||
Another way to prevent cross-JWT confusion is to use explicit typing, | Another way to prevent cross-JWT confusion is to use explicit typing, | |||
as described in Section 3.11 of [RFC8725]. One would explicitly type | as described in Section 3.11 of [RFC8725]. One would explicitly type | |||
a Request Object by including a "typ" Header Parameter with the value | a Request Object by including a "typ" Header Parameter with the value | |||
"oauth-authz-req+jwt" (which is registered in Section 9.4.1. Note | "oauth-authz-req+jwt" (which is registered in Section 9.4.1). Note, | |||
however, that requiring explicitly typed Requests Objects at existing | however, that requiring explicitly typed Request Objects at existing | |||
authorization servers will break most existing deployments, as | authorization servers will break most existing deployments, as | |||
existing clients are already commonly using untyped Request Objects, | existing clients are already commonly using untyped Request Objects, | |||
especially with OpenID Connect [OpenID.Core]. However, requiring | especially with OpenID Connect [OpenID.Core]. However, requiring | |||
explicit typing would be a good idea for new OAuth deployment | explicit typing would be a good idea for new OAuth deployment | |||
profiles where compatibility with existing deployments is not a | profiles where compatibility with existing deployments is not a | |||
consideration. | consideration. | |||
Finally, yet another way to prevent cross-JWT confusion is to use a | Finally, yet another way to prevent cross-JWT confusion is to use a | |||
key management regime in which keys used to sign Request Objects are | key management regime in which keys used to sign Request Objects are | |||
identifiably distinct from those used for other purposes. Then, if | identifiably distinct from those used for other purposes. Then, if | |||
an adversary attempts to repurpose the Request Object in another | an adversary attempts to repurpose the Request Object in another | |||
context, a key mismatch will occur, thwarting the attack. | context, a key mismatch will occur, thwarting the attack. | |||
11. Privacy Considerations | 11. Privacy Considerations | |||
When the Client is being granted access to a protected resource | When the client is being granted access to a protected resource | |||
containing personal data, both the Client and the Authorization | containing personal data, both the client and the authorization | |||
Server need to adhere to Privacy Principles. RFC 6973 Privacy | server need to adhere to Privacy Principles. "Privacy Considerations | |||
Considerations for Internet Protocols [RFC6973] gives excellent | for Internet Protocols" [RFC6973] gives excellent guidance on the | |||
guidance on the enhancement of protocol design and implementation. | enhancement of protocol design and implementation. The provisions | |||
The provision listed in it should be followed. | listed in it should be followed. | |||
Most of the provision would apply to The OAuth 2.0 Authorization | Most of the provisions would apply to "The OAuth 2.0 Authorization | |||
Framework [RFC6749] and The OAuth 2.0 Authorization Framework: Bearer | Framework" [RFC6749] and "The OAuth 2.0 Authorization Framework: | |||
Token Usage [RFC6750] and are not specific to this specification. In | Bearer Token Usage" [RFC6750] and are not specific to this | |||
what follows, only the specific provisions to this specification are | specification. In what follows, only the provisions specific to this | |||
noted. | specification are noted. | |||
11.1. Collection limitation | 11.1. Collection Limitation | |||
When the Client is being granted access to a protected resource | When the client is being granted access to a protected resource | |||
containing personal data, the Client SHOULD limit the collection of | containing personal data, the client SHOULD limit the collection of | |||
personal data to that which is within the bounds of applicable law | personal data to that which is within the bounds of applicable law | |||
and strictly necessary for the specified purpose(s). | and strictly necessary for the specified purpose(s). | |||
It is often hard for the user to find out if the personal data asked | It is often hard for the user to find out if the personal data asked | |||
for is strictly necessary. A trusted third-party service can help | for is strictly necessary. A trusted third-party service can help | |||
the user by examining the Client request and comparing to the | the user by examining the client request, comparing it to the | |||
proposed processing by the Client and certifying the request. After | proposed processing by the client, and certifying the request. After | |||
the certification, the Client, when making an Authorization Request, | the certification, the client, when making an authorization request, | |||
can submit Authorization Request to the trusted third-party service | can submit an authorization request to the trusted third-party | |||
to obtain the Request Object URI. This process is two steps: | service to obtain the Request Object URI. This process has two | |||
steps: | ||||
(1) (Certification Process) The trusted third-party service examines | (1) (Certification Process) The trusted third-party service examines | |||
the business process of the client and determines what claims | the business process of the client and determines what claims | |||
they need: This is the certification process. Once the client | they need; this is the certification process. Once the client | |||
is certified, then they are issued a client credential to | is certified, they are issued a client credential to | |||
authenticate against to push request objects to the trusted | authenticate against to push Request Objects to the trusted | |||
third-party service to get the "request_uri". | third-party service to get the "request_uri". | |||
(2) (Translation Process) The client uses the client credential that | (2) (Translation Process) The client uses the client credential that | |||
it got to push the request object to the trusted third-party | it got to push the Request Object to the trusted third-party | |||
service to get the "request_uri". The trusted third-party | service to get the "request_uri". The trusted third-party | |||
service also verifies that the Request Object is consistent with | service also verifies that the Request Object is consistent with | |||
the claims that the client is eligible for, per prior step. | the claims that the client is eligible for, per the prior step. | |||
Upon receiving such Request Object URI in the Authorization Request, | Upon receiving such a Request Object URI in the authorization | |||
the Authorization Server first verifies that the authority portion of | request, the authorization server first verifies that the authority | |||
the Request Object URI is a legitimate one for the trusted third- | portion of the Request Object URI is a legitimate one for the trusted | |||
party service. Then, the Authorization Server issues HTTP GET | third-party service. Then, the authorization server issues an HTTP | |||
request to the Request Object URI. Upon connecting, the | GET request to the Request Object URI. Upon connecting, the | |||
Authorization Server MUST verify the server identity represented in | authorization server MUST verify that the server identity represented | |||
the TLS certificate is legitimate for the Request Object URI. Then, | in the TLS certificate is legitimate for the Request Object URI. | |||
the Authorization Server can obtain the Request Object, which | Then, the authorization server can obtain the Request Object, which | |||
includes the "client_id" representing the Client. | includes the "client_id" representing the client. | |||
The Consent screen MUST indicate the Client and SHOULD indicate that | The Consent screen MUST indicate the client and SHOULD indicate that | |||
the request has been vetted by the trusted third-party service for | the request has been vetted by the trusted third-party service for | |||
adherence to the Collection Limitation principle. | the adherence to the collection limitation principle. | |||
11.2. Disclosure Limitation | 11.2. Disclosure Limitation | |||
11.2.1. Request Disclosure | 11.2.1. Request Disclosure | |||
This specification allows extension parameters. These may include | This specification allows extension parameters. These may include | |||
potentially sensitive information. Since URI query parameter may | potentially sensitive information. Since URI query parameters may | |||
leak through various means but most notably through referrer and | leak through various means but most notably through referrer and | |||
browser history, if the authorization request contains a potentially | browser history, if the authorization request contains a potentially | |||
sensitive parameter, the Client SHOULD JWE [RFC7516] encrypt the | sensitive parameter, the client SHOULD encrypt the Request Object | |||
request object. | using JWE [RFC7516]. | |||
Where Request Object URI method is being used, if the request object | Where the Request Object URI method is being used, if the Request | |||
contains personally identifiable or sensitive information, the | Object contains personally identifiable or sensitive information, the | |||
"request_uri" SHOULD be used only once, have a short validity period, | "request_uri" SHOULD be used only once and have a short validity | |||
and MUST have large enough entropy deemed necessary with applicable | period, and it MUST have sufficient entropy for the applicable | |||
security policy unless the Request Object itself is JWE [RFC7516] | security policies unless the Request Object itself is encrypted using | |||
Encrypted. The adequate shortness of the validity and the entropy of | JWE [RFC7516]. The adequate shortness of the validity and the | |||
the Request Object URI depends on the risk calculation based on the | entropy of the Request Object URI depends on the risk calculation | |||
value of the resource being protected. A general guidance for the | based on the value of the resource being protected. A general | |||
validity time would be less than a minute and the Request Object URI | guidance for the validity time would be less than a minute, and the | |||
is to include a cryptographic random value of 128bit or more at the | Request Object URI is to include a cryptographic random value of 128 | |||
time of the writing of this specification. | bits or more at the time of the writing of this specification. | |||
11.2.2. Tracking using Request Object URI | 11.2.2. Tracking Using Request Object URI | |||
Even if the protected resource does not include a personally | Even if the protected resource does not include personally | |||
identifiable information, it is sometimes possible to identify the | identifiable information, it is sometimes possible to identify the | |||
user through the Request Object URI if persistent static per-user | user through the Request Object URI if persistent static per-user | |||
Request Object URIs are used. A third party may observe it through | Request Object URIs are used. A third party may observe it through | |||
browser history etc. and start correlating the user's activity using | browser history, etc. and start correlating the user's activity using | |||
it. In a way, it is a data disclosure as well and should be avoided. | it. In a way, it is a data disclosure as well and should be avoided. | |||
Therefore, per-user persistent Request Object URIs should be avoided. | Therefore, per-user persistent Request Object URIs should be avoided. | |||
Single-use Request Object URIs are one alternative. | Single-use Request Object URIs are one alternative. | |||
12. Acknowledgements | 12. References | |||
The following people contributed to the creation of this document in | ||||
the OAuth working group and other IETF roles. (Affiliations at the | ||||
time of the contribution are used.) | ||||
Annabelle Backman (Amazon), Dirk Balfanz (Google), Sergey Beryozkin, | ||||
Ben Campbell (as AD), Brian Campbell (Ping Identity), Roman Danyliw | ||||
(as AD), Martin Duke (as AD), Vladimir Dzhuvinov (Connect2id), Lars | ||||
Eggert (as AD), Joel Halpern (as GENART), Benjamin Kaduk (as AD), | ||||
Stephen Kent (as SECDIR), Murray Kucherawy (as AD), Warren Kumari (as | ||||
OPSDIR), Watson Ladd (as SECDIR), Torsten Lodderstedt (yes.com), Jim | ||||
Manico, Axel Nennker (Deutsche Telecom), Hannes Tschofenig (ARM), | ||||
James H. Manger (Telstra), Kathleen Moriarty (as AD), John Panzer | ||||
(Google), Francesca Palombini (as AD), David Recordon (Facebook), | ||||
Marius Scurtescu (Google), Luke Shepard (Facebook), Filip Skokan | ||||
(Auth0), Eric Vyncke (as AD), and Robert Wilton (as AD). | ||||
The following people contributed to creating this document through | ||||
the OpenID Connect Core 1.0 [OpenID.Core]. | ||||
Brian Campbell (Ping Identity), George Fletcher (AOL), Ryo Itou | ||||
(Mixi), Edmund Jay (Illumila), Breno de Medeiros (Google), Hideki | ||||
Nara (TACT), Justin Richer (MITRE). | ||||
13. Revision History | ||||
Note to the RFC Editor: Please remove this section from the final | ||||
RFC. | ||||
-34 | ||||
o Addressed additional IESG comments by Murray Kucherawy and | ||||
Francesca Palombini. | ||||
-33 | ||||
o Addressed IESG comments prior to 8-Apr-21 telechat. Thanks to | ||||
Martin Duke, Lars Eggert, Benjamin Kaduk, Francesca Palombini, and | ||||
Eric Vyncke for their reviews. | ||||
-32 | ||||
o Removed outdated JSON reference. | ||||
-31 | ||||
o Addressed SecDir review comments by Watson Ladd. | ||||
-30 | ||||
o Changed the MIME Type from "oauth.authz.req+jwt" to "oauth-authz- | ||||
req+jwt", per advice from the designated experts. | ||||
-29 | ||||
o Uniformly use the Change Controller "IETF". | ||||
-28 | ||||
o Removed unused references, as suggested by Roman Danyliw. | ||||
-27 | ||||
o Edits by Mike Jones to address IESG and working group review | ||||
comments, including: | ||||
o Added Security Considerations text saying not to use the Client ID | ||||
as the "sub" value to prevent Cross-JWT Confusion. | ||||
o Added Security Considerations text about using explicit typing to | ||||
prevent Cross-JWT Confusion. | ||||
o Addressed Eric Vyncke's review comments. | ||||
o Addressed Robert Wilton's review comments. | ||||
o Addressed Murray Kucherawy's review comments. | ||||
o Addressed Benjamin Kaduk's review comments. | ||||
o Applied spelling and grammar corrections. | ||||
-20 | ||||
o BK comments | ||||
o Section 3 Removed WAP | ||||
o Section 4. Clarified authorization request object parameters, | ||||
removed extension parameters from examples | ||||
o Section 4. Specifies application/oauth.authz.req+jwt as mime-type | ||||
fore request objects | ||||
o Section 5.2.1 Added reference to Capability URLs | ||||
o Section 5.2.3. Added entropy fragment to example request | ||||
o Section 8. Replaced "subjectAltName dnsName" with "DNS-ID" | ||||
o Section 9. Registers authorization request parameters in JWT | ||||
Claims Registry. | ||||
o Section 9. Registers application/oauth.authz.req in IANA mime- | ||||
types registry | ||||
o Section 10.1. Clarified encrypted request objects are "signed | ||||
then encrypted" to maintain consistency | ||||
o Section 10.2. Clarifies trust between AS and TFP | ||||
o Section 10.3. Clarified endpoints subject to the practice | ||||
o Section 10.4 Replaced "redirect_uri" to "request_uri" | ||||
o Section 10.4. Added reference to RFC 3986 for risks | ||||
o Section 10.4.1.d Deleted "do" to maintain grammar flow | ||||
o Section 10.4.1, 10.4.2 Replaced "application/jose" to | ||||
"application/jwt" | ||||
o Section 12.1. Extended description for submitting authorization | ||||
request to TFP to obtain request object | ||||
o Section 12.2.2. Replaced per-user Request Object URI with static | ||||
per-user Request URIs | ||||
o Section 13. Combined OAuth WG contributors together | ||||
o Section Whole doc Replaced application/jwt with application/ | ||||
oauth.authz.req+jwt | ||||
-19 | ||||
o AD comments | ||||
o Section 5.2.1. s/Requiest URI/Request URI/ | ||||
o Section 8 s/[BCP195] ./[BCP195]./ | ||||
o Section 10.3. s/sited/cited/ | ||||
o Section 11. Typo. s/Curent/Current/ | ||||
-17 | ||||
o #78 Typos in content-type | ||||
-16 | ||||
o Treated remaining Ben Campbell comments. | ||||
-15 | ||||
o Removed further duplication | ||||
-14 | ||||
o #71 Reiterate dynamic params are included. | ||||
o #70 Made clear that AS must return error. | ||||
o #69 Inconsistency of the need to sign. | ||||
o Fixed Mimetype. | ||||
o #67 Inconsistence in requiring HTTPS in request URI. | ||||
o #66 Dropped ISO 29100 reference. | ||||
o #25 Removed Encrypt only option. | ||||
o #59 Same with #25. | ||||
-13 | ||||
o add TLS Security Consideration section | ||||
o replace RFC7525 reference with BCP195 | ||||
o moved front tag in FETT reference to fix XML structure | ||||
o changes reference from SoK to FETT | ||||
-12 | ||||
o fixes #62 - Alexey Melnikov Discuss | ||||
o fixes #48 - OPSDIR Review : General - delete semicolons after list | ||||
items | ||||
o fixes #58 - DP Comments for the Last Call | ||||
o fixes #57 - GENART - Remove "non-normative ... " from examples. | ||||
o fixes #45 - OPSDIR Review : Introduction - are attacks discovered | ||||
or already opened | ||||
o fixes #49 - OPSDIR Review : Introduction - Inconsistent colons | ||||
after initial sentence of list items. | ||||
o fixes #53 - OPSDIR Review : 6.2 JWS Signed Request Object - | ||||
Clarify JOSE Header | ||||
o fixes #42 - OPSDIR Review : Introduction - readability of 'and' is | ||||
confusing | ||||
o fixes #50 - OPSDIR Review : Section 4 Request Object - Clarify | ||||
'signed, encrypted, or signed and encrypted' | ||||
o fixes #39 - OPSDIR Review : Abstract - Explain/Clarify JWS and JWE | ||||
o fixed #50 - OPSDIR Review : Section 4 Request Object - Clarify | ||||
'signed, encrypted, or signed and encrypted' | ||||
o fixes #43 - OPSDIR Review : Introduction - 'properties' sounds | ||||
awkward and are not exactly 'properties' | ||||
o fixes #56 - OPSDIR Review : 12 Acknowledgements - 'contribution | ||||
is' => 'contribution are' | ||||
o fixes #55 - OPSDIR Review : 11.2.2 Privacy Considerations - ' It | ||||
is in a way' => 'In a way, it is' | ||||
o fixes #54 - OPSDIR Review : 11 Privacy Considerations - 'and not | ||||
specific' => 'and are not specific' | ||||
o fixes #51 - OPSDIR Review : Section 4 Request Object - 'It is | ||||
fine' => 'It is recommended' | ||||
o fixes #47 - OPSDIR Review : Introduction - 'over- the- wire' => | ||||
'over-the-wire' | ||||
o fixes #46 - OPSDIR Review : Introduction - 'It allows' => 'The use | ||||
of application security' for | ||||
o fixes #44 - OPSDIR Review : Introduction - 'has' => 'have' | ||||
o fixes #41 - OPSDIR Review : Introduction - missing 'is' before | ||||
'typically sent' | ||||
o fixes #38 - OPSDIR Review : Section 11 - Delete 'freely | ||||
accessible' regarding ISO 29100 | ||||
-11 | ||||
o s/bing/being/ | ||||
o Added history for -10 | ||||
-10 | ||||
o #20: KM1 -- some wording that is awkward in the TLS section. | ||||
o #21: KM2 - the additional attacks against OAuth 2.0 should also | ||||
have a pointer | ||||
o #22: KM3 -- Nit: in the first line of 10.4: | ||||
o #23: KM4 -- Mention RFC6973 in Section 11 in addition to ISO 29100 | ||||
o #24: SECDIR review: Section 4 -- Confusing requirements for | ||||
sign+encrypt | ||||
o #25: SECDIR review: Section 6 -- authentication and integrity need | ||||
not be provided if the requestor encrypts the token? | ||||
o #26: SECDIR Review: Section 10 -- why no reference for JWS | ||||
algorithms? | ||||
o #27: SECDIR Review: Section 10.2 - how to do the agreement between | ||||
client and server "a priori"? | ||||
o #28: SECDIR Review: Section 10.3 - Indication on "large entropy" | ||||
and "short lifetime" should be indicated | ||||
o #29: SECDIR Review: Section 10.3 - Typo | ||||
o #30: SECDIR Review: Section 10.4 - typos and missing articles | ||||
o #31: SECDIR Review: Section 10.4 - Clearer statement on the lack | ||||
of endpoint identifiers needed | ||||
o #32: SECDIR Review: Section 11 - ISO29100 needs to be moved to | ||||
normative reference | ||||
o #33: SECDIR Review: Section 11 - Better English and Entropy | ||||
language needed | ||||
o #34: Section 4: Typo | ||||
o #35: More Acknowledgment | ||||
o #36: DP - More precise qualification on Encryption needed. | ||||
-09 | ||||
o Minor Editorial Nits. | ||||
o Section 10.4 added. | ||||
o Explicit reference to Security consideration (10.2) added in | ||||
section 5 and section 5.2. | ||||
o , (add yourself) removed from the acknowledgment. | ||||
-08 | ||||
o Applied changes proposed by Hannes on 2016-06-29 on IETF OAuth | ||||
list recorded as https://bitbucket.org/Nat/oauth-jwsreq/ | ||||
issues/12/. | ||||
o TLS requirements added. | ||||
o Security Consideration reinforced. | ||||
o Privacy Consideration added. | ||||
o Introduction improved. | ||||
-07 | ||||
o Changed the abbrev to OAuth JAR from oauth-jar. | ||||
o Clarified sig and enc methods. | ||||
o Better English. | ||||
o Removed claims from one of the example. | ||||
o Re-worded the URI construction. | ||||
o Changed the example to use request instead of request_uri. | ||||
o Clarified that Request Object parameters take precedence | ||||
regardless of request or request_uri parameters were used. | ||||
o Generalized the language in 4.2.1 to convey the intent more | ||||
clearly. | ||||
o Changed "Server" to "Authorization Server" as a clarification. | ||||
o Stopped talking about request_object_signing_alg. | ||||
o IANA considerations now reflect the current status. | ||||
o Added Brian Campbell to the contributors list. Made the lists | ||||
alphabetic order based on the last names. Clarified that the | ||||
affiliation is at the time of the contribution. | ||||
o Added "older versions of " to the reference to IE URI length | ||||
limitations. | ||||
o Stopped talking about signed or unsigned JWS etc. | ||||
o 1.Introduction improved. | ||||
-06 | ||||
o Added explanation on the 512 chars URL restriction. | ||||
o Updated Acknowledgements. | ||||
-05 | ||||
o More alignment with OpenID Connect. | ||||
-04 | ||||
o Fixed typos in examples. (request_url -> request_uri, cliend_id -> | ||||
client_id) | ||||
o Aligned the error messages with the OAuth IANA registry. | ||||
o Added another rationale for having request object. | ||||
-03 | ||||
o Fixed the non-normative description about the advantage of static | ||||
signature. | ||||
o Changed the requirement for the parameter values in the request | ||||
itself and the request object from 'MUST MATCH" to 'Req Obj takes | ||||
precedence. | ||||
-02 | ||||
o Now that they are RFCs, replaced JWS, JWE, etc. with RFC numbers. | ||||
-01 | ||||
o Copy Edits. | ||||
14. References | ||||
14.1. Normative References | ||||
[BCP195] Sheffer, Y., Holz, R., and P. Saint-Andre, | ||||
"Recommendations for Secure Use of Transport Layer | ||||
Security (TLS) and Datagram Transport Layer Security | ||||
(DTLS)", BCP 195, RFC 7525, May 2015. | ||||
[IANA.MediaTypes] | 12.1. Normative References | |||
IANA, "Media Types", | ||||
<http://www.iana.org/assignments/media-types>. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | |||
10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November | 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November | |||
2003, <https://www.rfc-editor.org/info/rfc3629>. | 2003, <https://www.rfc-editor.org/info/rfc3629>. | |||
skipping to change at page 33, line 42 ¶ | skipping to change at line 1142 ¶ | |||
<https://www.rfc-editor.org/info/rfc7516>. | <https://www.rfc-editor.org/info/rfc7516>. | |||
[RFC7518] Jones, M., "JSON Web Algorithms (JWA)", RFC 7518, | [RFC7518] Jones, M., "JSON Web Algorithms (JWA)", RFC 7518, | |||
DOI 10.17487/RFC7518, May 2015, | DOI 10.17487/RFC7518, May 2015, | |||
<https://www.rfc-editor.org/info/rfc7518>. | <https://www.rfc-editor.org/info/rfc7518>. | |||
[RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | |||
(JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | |||
<https://www.rfc-editor.org/info/rfc7519>. | <https://www.rfc-editor.org/info/rfc7519>. | |||
[RFC7525] Sheffer, Y., Holz, R., and P. Saint-Andre, | ||||
"Recommendations for Secure Use of Transport Layer | ||||
Security (TLS) and Datagram Transport Layer Security | ||||
(DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May | ||||
2015, <https://www.rfc-editor.org/info/rfc7525>. | ||||
[RFC8141] Saint-Andre, P. and J. Klensin, "Uniform Resource Names | [RFC8141] Saint-Andre, P. and J. Klensin, "Uniform Resource Names | |||
(URNs)", RFC 8141, DOI 10.17487/RFC8141, April 2017, | (URNs)", RFC 8141, DOI 10.17487/RFC8141, April 2017, | |||
<https://www.rfc-editor.org/info/rfc8141>. | <https://www.rfc-editor.org/info/rfc8141>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | |||
Interchange Format", STD 90, RFC 8259, | Interchange Format", STD 90, RFC 8259, | |||
DOI 10.17487/RFC8259, December 2017, | DOI 10.17487/RFC8259, December 2017, | |||
<https://www.rfc-editor.org/info/rfc8259>. | <https://www.rfc-editor.org/info/rfc8259>. | |||
[RFC8414] Jones, M., Sakimura, N., and J. Bradley, "OAuth 2.0 | [RFC8414] Jones, M., Sakimura, N., and J. Bradley, "OAuth 2.0 | |||
Authorization Server Metadata", RFC 8414, | Authorization Server Metadata", RFC 8414, | |||
DOI 10.17487/RFC8414, June 2018, | DOI 10.17487/RFC8414, June 2018, | |||
<https://www.rfc-editor.org/info/rfc8414>. | <https://www.rfc-editor.org/info/rfc8414>. | |||
14.2. Informative References | 12.2. Informative References | |||
[BASIN] Basin, D., Cremers, C., and S. Meier, "Provably Repairing | [BASIN] Basin, D., Cremers, C., and S. Meier, "Provably Repairing | |||
the ISO/IEC 9798 Standard for Entity Authentication", | the ISO/IEC 9798 Standard for Entity Authentication", | |||
Journal of Computer Security - Security and Trust | Journal of Computer Security - Security and Trust | |||
Principles Volume 21 Issue 6, Pages 817-846, November | Principles, Volume 21, Issue 6, pp. 817-846, November | |||
2013, | 2013, | |||
<https://www.cs.ox.ac.uk/people/cas.cremers/downloads/ | <https://www.cs.ox.ac.uk/people/cas.cremers/downloads/ | |||
papers/BCM2012-iso9798.pdf>. | papers/BCM2012-iso9798.pdf>. | |||
[CapURLs] Tennison, J., "Good Practices for Capability URLs", | [CapURLs] Tennison, J., Ed., "Good Practices for Capability URLs", | |||
W3C Working Draft, February 2014, | W3C First Public Working Draft, 18 February 2014, | |||
<https://www.w3.org/TR/capability-urls/>. | <https://www.w3.org/TR/capability-urls/>. | |||
[IANA.JWT.Claims] | [IANA.JWT.Claims] | |||
IANA, "JSON Web Token Claims", | IANA, "JSON Web Token (JWT)", | |||
<http://www.iana.org/assignments/jwt>. | <https://www.iana.org/assignments/jwt>. | |||
[IANA.MediaTypes] | ||||
IANA, "Media Types", | ||||
<https://www.iana.org/assignments/media-types>. | ||||
[IANA.OAuth.Parameters] | [IANA.OAuth.Parameters] | |||
IANA, "OAuth Parameters", | IANA, "OAuth Parameters", | |||
<http://www.iana.org/assignments/oauth-parameters>. | <https://www.iana.org/assignments/oauth-parameters>. | |||
[OpenID.Core] | [OpenID.Core] | |||
Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and | Sakimura, N., Bradley, J., Jones, M.B., de Medeiros, B., | |||
C. Mortimore, "OpenID Connect Core 1.0", OpenID | and C. Mortimore, "OpenID Connect Core 1.0 incorporating | |||
Foundation Standards, February 2014, | errata set 1", OpenID Foundation Standards, 8 November | |||
2014, | ||||
<http://openid.net/specs/openid-connect-core-1_0.html>. | <http://openid.net/specs/openid-connect-core-1_0.html>. | |||
[RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | |||
Extensions (MIME) Part Two: Media Types", RFC 2046, | Extensions (MIME) Part Two: Media Types", RFC 2046, | |||
DOI 10.17487/RFC2046, November 1996, | DOI 10.17487/RFC2046, November 1996, | |||
<https://www.rfc-editor.org/info/rfc2046>. | <https://www.rfc-editor.org/info/rfc2046>. | |||
[RFC6819] Lodderstedt, T., Ed., McGloin, M., and P. Hunt, "OAuth 2.0 | [RFC6819] Lodderstedt, T., Ed., McGloin, M., and P. Hunt, "OAuth 2.0 | |||
Threat Model and Security Considerations", RFC 6819, | Threat Model and Security Considerations", RFC 6819, | |||
DOI 10.17487/RFC6819, January 2013, | DOI 10.17487/RFC6819, January 2013, | |||
skipping to change at page 35, line 31 ¶ | skipping to change at line 1235 ¶ | |||
[RFC7591] Richer, J., Ed., Jones, M., Bradley, J., Machulak, M., and | [RFC7591] Richer, J., Ed., Jones, M., Bradley, J., Machulak, M., and | |||
P. Hunt, "OAuth 2.0 Dynamic Client Registration Protocol", | P. Hunt, "OAuth 2.0 Dynamic Client Registration Protocol", | |||
RFC 7591, DOI 10.17487/RFC7591, July 2015, | RFC 7591, DOI 10.17487/RFC7591, July 2015, | |||
<https://www.rfc-editor.org/info/rfc7591>. | <https://www.rfc-editor.org/info/rfc7591>. | |||
[RFC8725] Sheffer, Y., Hardt, D., and M. Jones, "JSON Web Token Best | [RFC8725] Sheffer, Y., Hardt, D., and M. Jones, "JSON Web Token Best | |||
Current Practices", BCP 225, RFC 8725, | Current Practices", BCP 225, RFC 8725, | |||
DOI 10.17487/RFC8725, February 2020, | DOI 10.17487/RFC8725, February 2020, | |||
<https://www.rfc-editor.org/info/rfc8725>. | <https://www.rfc-editor.org/info/rfc8725>. | |||
Acknowledgements | ||||
The following people contributed to the creation of this document in | ||||
the OAuth Working Group and other IETF roles. (Affiliations at the | ||||
time of the contribution are used.) | ||||
Annabelle Backman (Amazon), Dirk Balfanz (Google), Sergey Beryozkin, | ||||
Ben Campbell (as AD), Brian Campbell (Ping Identity), Roman Danyliw | ||||
(as AD), Martin Duke (as AD), Vladimir Dzhuvinov (Connect2id), Lars | ||||
Eggert (as AD), Joel Halpern (as GENART), Benjamin Kaduk (as AD), | ||||
Stephen Kent (as SECDIR), Murray Kucherawy (as AD), Warren Kumari (as | ||||
OPSDIR), Watson Ladd (as SECDIR), Torsten Lodderstedt (yes.com), Jim | ||||
Manico, James H. Manger (Telstra), Kathleen Moriarty (as AD), Axel | ||||
Nennker (Deutsche Telecom), John Panzer (Google), Francesca Palombini | ||||
(as AD), David Recordon (Facebook), Marius Scurtescu (Google), Luke | ||||
Shepard (Facebook), Filip Skokan (Auth0), Hannes Tschofenig (ARM), | ||||
Éric Vyncke (as AD), and Robert Wilton (as AD). | ||||
The following people contributed to creating this document through | ||||
the OpenID Connect Core 1.0 [OpenID.Core]. | ||||
Brian Campbell (Ping Identity), George Fletcher (AOL), Ryo Itou | ||||
(Mixi), Edmund Jay (Illumila), Breno de Medeiros (Google), Hideki | ||||
Nara (TACT), and Justin Richer (MITRE). | ||||
Authors' Addresses | Authors' Addresses | |||
Nat Sakimura | Nat Sakimura | |||
NAT.Consulting | NAT.Consulting | |||
2-22-17 Naka | 2-22-17 Naka | |||
Kunitachi, Tokyo 186-0004 | Kunitachi, Tokyo 186-0004 | |||
Japan | Japan | |||
Phone: +81-42-580-7401 | Phone: +81-42-580-7401 | |||
Email: nat@nat.consulting | Email: nat@nat.consulting | |||
URI: http://nat.sakimura.org/ | URI: https://nat.sakimura.org/ | |||
John Bradley | John Bradley | |||
Yubico | Yubico | |||
Casilla 177, Sucursal Talagante | Sucursal Talagante | |||
Talagante, RM | Casilla 177 | |||
Talagante | ||||
RM | ||||
Chile | Chile | |||
Phone: +1.202.630.5272 | Phone: +1.202.630.5272 | |||
Email: ve7jtb@ve7jtb.com | Email: rfc9101@ve7jtb.com | |||
URI: http://www.thread-safe.com/ | URI: http://www.thread-safe.com/ | |||
Michael B. Jones | Michael B. Jones | |||
Microsoft | Microsoft | |||
One Microsoft Way | One Microsoft Way | |||
Redmond, Washington 98052 | Redmond, Washington 98052 | |||
United States of America | United States of America | |||
Email: mbj@microsoft.com | Email: mbj@microsoft.com | |||
URI: https://self-issued.info/ | URI: https://self-issued.info/ | |||
End of changes. 181 change blocks. | ||||
869 lines changed or deleted | 512 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |