draft-ietf-oauth-mtls-17.txt | rfc8705.txt | |||
---|---|---|---|---|
OAuth Working Group B. Campbell | Internet Engineering Task Force (IETF) B. Campbell | |||
Internet-Draft Ping Identity | Request for Comments: 8705 Ping Identity | |||
Intended status: Standards Track J. Bradley | Category: Standards Track J. Bradley | |||
Expires: February 23, 2020 Yubico | ISSN: 2070-1721 Yubico | |||
N. Sakimura | N. Sakimura | |||
Nomura Research Institute | Nomura Research Institute | |||
T. Lodderstedt | T. Lodderstedt | |||
YES.com AG | YES.com AG | |||
August 22, 2019 | February 2020 | |||
OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound | OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound | |||
Access Tokens | Access Tokens | |||
draft-ietf-oauth-mtls-17 | ||||
Abstract | Abstract | |||
This document describes OAuth client authentication and certificate- | This document describes OAuth client authentication and certificate- | |||
bound access and refresh tokens using mutual Transport Layer Security | bound access and refresh tokens using mutual Transport Layer Security | |||
(TLS) authentication with X.509 certificates. OAuth clients are | (TLS) authentication with X.509 certificates. OAuth clients are | |||
provided a mechanism for authentication to the authorization server | provided a mechanism for authentication to the authorization server | |||
using mutual TLS, based on either self-signed certificates or public | using mutual TLS, based on either self-signed certificates or public | |||
key infrastructure (PKI). OAuth authorization servers are provided a | key infrastructure (PKI). OAuth authorization servers are provided a | |||
mechanism for binding access tokens to a client's mutual-TLS | mechanism for binding access tokens to a client's mutual-TLS | |||
certificate, and OAuth protected resources are provided a method for | certificate, and OAuth protected resources are provided a method for | |||
ensuring that such an access token presented to it was issued to the | ensuring that such an access token presented to it was issued to the | |||
client presenting the token. | client presenting the token. | |||
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 | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on February 23, 2020. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc8705. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2020 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 Notation and Conventions . . . . . . . . . . 5 | 1.1. Requirements Notation and Conventions | |||
1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.2. Terminology | |||
2. Mutual TLS for OAuth Client Authentication . . . . . . . . . 5 | 2. Mutual TLS for OAuth Client Authentication | |||
2.1. PKI Mutual-TLS Method . . . . . . . . . . . . . . . . . . 6 | 2.1. PKI Mutual-TLS Method | |||
2.1.1. PKI Method Metadata Value . . . . . . . . . . . . . . 7 | 2.1.1. PKI Method Metadata Value | |||
2.1.2. Client Registration Metadata . . . . . . . . . . . . 7 | 2.1.2. Client Registration Metadata | |||
2.2. Self-Signed Certificate Mutual-TLS Method . . . . . . . . 8 | 2.2. Self-Signed Certificate Mutual-TLS Method | |||
2.2.1. Self-Signed Method Metadata Value . . . . . . . . . . 8 | 2.2.1. Self-Signed Method Metadata Value | |||
2.2.2. Client Registration Metadata . . . . . . . . . . . . 8 | 2.2.2. Client Registration Metadata | |||
3. Mutual-TLS Client Certificate-Bound Access Tokens . . . . . . 9 | 3. Mutual-TLS Client Certificate-Bound Access Tokens | |||
3.1. JWT Certificate Thumbprint Confirmation Method . . . . . 10 | 3.1. JWT Certificate Thumbprint Confirmation Method | |||
3.2. Confirmation Method for Token Introspection . . . . . . . 11 | 3.2. Confirmation Method for Token Introspection | |||
3.3. Authorization Server Metadata . . . . . . . . . . . . . . 12 | 3.3. Authorization Server Metadata | |||
3.4. Client Registration Metadata . . . . . . . . . . . . . . 12 | 3.4. Client Registration Metadata | |||
4. Public Clients and Certificate-Bound Tokens . . . . . . . . . 13 | 4. Public Clients and Certificate-Bound Tokens | |||
5. Metadata for Mutual-TLS Endpoint Aliases . . . . . . . . . . 13 | 5. Metadata for Mutual-TLS Endpoint Aliases | |||
6. Implementation Considerations . . . . . . . . . . . . . . . . 15 | 6. Implementation Considerations | |||
6.1. Authorization Server . . . . . . . . . . . . . . . . . . 15 | 6.1. Authorization Server | |||
6.2. Resource Server . . . . . . . . . . . . . . . . . . . . . 16 | 6.2. Resource Server | |||
6.3. Certificate Expiration and Bound Access Tokens . . . . . 16 | 6.3. Certificate Expiration and Bound Access Tokens | |||
6.4. Implicit Grant Unsupported . . . . . . . . . . . . . . . 16 | 6.4. Implicit Grant Unsupported | |||
6.5. TLS Termination . . . . . . . . . . . . . . . . . . . . . 17 | 6.5. TLS Termination | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | 7. Security Considerations | |||
7.1. Certificate-Bound Refresh Tokens . . . . . . . . . . . . 17 | 7.1. Certificate-Bound Refresh Tokens | |||
7.2. Certificate Thumbprint Binding . . . . . . . . . . . . . 17 | 7.2. Certificate Thumbprint Binding | |||
7.3. TLS Versions and Best Practices . . . . . . . . . . . . . 18 | 7.3. TLS Versions and Best Practices | |||
7.4. X.509 Certificate Spoofing . . . . . . . . . . . . . . . 18 | 7.4. X.509 Certificate Spoofing | |||
7.5. X.509 Certificate Parsing and Validation Complexity . . . 18 | 7.5. X.509 Certificate Parsing and Validation Complexity | |||
8. Privacy Considerations . . . . . . . . . . . . . . . . . . . 19 | 8. Privacy Considerations | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19 | 9. IANA Considerations | |||
9.1. JWT Confirmation Methods Registration . . . . . . . . . . 19 | 9.1. JWT Confirmation Methods Registration | |||
9.2. Authorization Server Metadata Registration . . . . . . . 19 | 9.2. Authorization Server Metadata Registration | |||
9.3. Token Endpoint Authentication Method Registration . . . . 20 | 9.3. Token Endpoint Authentication Method Registration | |||
9.4. Token Introspection Response Registration . . . . . . . . 20 | 9.4. Token Introspection Response Registration | |||
9.5. Dynamic Client Registration Metadata Registration . . . . 21 | 9.5. Dynamic Client Registration Metadata Registration | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 22 | 10. References | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 22 | 10.1. Normative References | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 24 | 10.2. Informative References | |||
Appendix A. Example "cnf" Claim, Certificate and JWK . . . . . . 25 | Appendix A. Example "cnf" Claim, Certificate, and JWK | |||
Appendix B. Relationship to Token Binding . . . . . . . . . . . 26 | Appendix B. Relationship to Token Binding | |||
Appendix C. Acknowledgements . . . . . . . . . . . . . . . . . . 26 | Acknowledgements | |||
Appendix D. Document(s) History . . . . . . . . . . . . . . . . 27 | Authors' Addresses | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 31 | ||||
1. Introduction | 1. Introduction | |||
The OAuth 2.0 Authorization Framework [RFC6749] enables third-party | The OAuth 2.0 Authorization Framework [RFC6749] enables third-party | |||
client applications to obtain delegated access to protected | client applications to obtain delegated access to protected | |||
resources. In the prototypical abstract OAuth flow, illustrated in | resources. In the prototypical abstract OAuth flow, illustrated in | |||
Figure 1, the client obtains an access token from an entity known as | Figure 1, the client obtains an access token from an entity known as | |||
an authorization server and then uses that token when accessing | an authorization server and then uses that token when accessing | |||
protected resources, such as HTTPS APIs. | protected resources, such as HTTPS APIs. | |||
skipping to change at page 3, line 50 ¶ | skipping to change at line 135 ¶ | |||
| | | | | | | | |||
| | v | | | v | |||
| | +---------------+ | | | +---------------+ | |||
| | | (C) | | | | | (C) | | |||
| | | | | | | | | | |||
| |<--(B)-- Use the access token -->| Protected | | | |<--(B)-- Use the access token -->| Protected | | |||
| | | Resource | | | | | Resource | | |||
| | | | | | | | | | |||
+--------+ +---------------+ | +--------+ +---------------+ | |||
Figure 1: Abstract OAuth 2.0 Protocol Flow | Figure 1: Abstract OAuth 2.0 Protocol Flow | |||
The flow illustrated in Figure 1 includes the following steps: | The flow illustrated in Figure 1 includes the following steps: | |||
(A) The client makes an HTTPS "POST" request to the authorization | (A) The client makes an HTTPS "POST" request to the authorization | |||
server and presents a credential representing the authorization | server and presents a credential representing the authorization | |||
grant. For certain types of clients (those that have been | grant. For certain types of clients (those that have been | |||
issued or otherwise established a set of client credentials) the | issued or otherwise established a set of client credentials) the | |||
request must be authenticated. In the response, the | request must be authenticated. In the response, the | |||
authorization server issues an access token to the client. | authorization server issues an access token to the client. | |||
(B) The client includes the access token when making a request to | (B) The client includes the access token when making a request to | |||
access a protected resource. | access a protected resource. | |||
(C) The protected resource validates the access token in order to | (C) The protected resource validates the access token in order to | |||
authorize the request. In some cases, such as when the token is | authorize the request. In some cases, such as when the token is | |||
self-contained and cryptographically secured, the validation can | self-contained and cryptographically secured, the validation can | |||
be done locally by the protected resource. Other cases require | be done locally by the protected resource. Other cases require | |||
that the protected resource call out to the authorization server | that the protected resource call out to the authorization server | |||
to determine the state of the token and obtain meta-information | to determine the state of the token and obtain metainformation | |||
about it. | about it. | |||
Layering on the abstract flow above, this document standardizes | Layering on the abstract flow above, this document standardizes | |||
enhanced security options for OAuth 2.0 utilizing client-certificate- | enhanced security options for OAuth 2.0 utilizing client-certificate- | |||
based mutual TLS. Section 2 provides options for authenticating the | based mutual TLS. Section 2 provides options for authenticating the | |||
request in step (A). Step (C) is supported with semantics to express | request in Step (A). Step (C) is supported with semantics to express | |||
the binding of the token to the client certificate for both local and | the binding of the token to the client certificate for both local and | |||
remote processing in Section 3.1 and Section 3.2 respectively. This | remote processing in Sections 3.1 and 3.2, respectively. This | |||
ensures that, as described in Section 3, protected resource access in | ensures that, as described in Section 3, protected resource access in | |||
step (B) is only possible by the legitimate client using a | Step (B) is only possible by the legitimate client using a | |||
certificate-bound token and holding the private key corresponding to | certificate-bound token and holding the private key corresponding to | |||
the certificate. | the certificate. | |||
OAuth 2.0 defines a shared-secret method of client authentication but | OAuth 2.0 defines a shared-secret method of client authentication but | |||
also allows for definition and use of additional client | also allows for defining and using additional client authentication | |||
authentication mechanisms when interacting directly with the | mechanisms when interacting directly with the authorization server. | |||
authorization server. This document describes an additional | This document describes an additional mechanism of client | |||
mechanism of client authentication utilizing mutual-TLS certificate- | authentication utilizing mutual-TLS certificate-based authentication | |||
based authentication, which provides better security characteristics | that provides better security characteristics than shared secrets. | |||
than shared secrets. While [RFC6749] documents client authentication | While [RFC6749] documents client authentication for requests to the | |||
for requests to the token endpoint, extensions to OAuth 2.0 (such as | token endpoint, extensions to OAuth 2.0 (such as Introspection | |||
Introspection [RFC7662], Revocation [RFC7009], and the Backchannel | [RFC7662], Revocation [RFC7009], and the Backchannel Authentication | |||
Authentication Endpoint in [OpenID.CIBA]) define endpoints that also | Endpoint in [OpenID.CIBA]) define endpoints that also utilize client | |||
utilize client authentication and the mutual TLS methods defined | authentication, and the mutual-TLS methods defined herein are | |||
herein are applicable to those endpoints as well. | applicable to those endpoints as well. | |||
Mutual-TLS certificate-bound access tokens ensure that only the party | Mutual-TLS certificate-bound access tokens ensure that only the party | |||
in possession of the private key corresponding to the certificate can | in possession of the private key corresponding to the certificate can | |||
utilize the token to access the associated resources. Such a | utilize the token to access the associated resources. Such a | |||
constraint is sometimes referred to as key confirmation, proof-of- | constraint is sometimes referred to as key confirmation, proof-of- | |||
possession, or holder-of-key and is unlike the case of the bearer | possession, or holder-of-key and is unlike the case of the bearer | |||
token described in [RFC6750], where any party in possession of the | token described in [RFC6750], where any party in possession of the | |||
access token can use it to access the associated resources. Binding | access token can use it to access the associated resources. Binding | |||
an access token to the client's certificate prevents the use of | an access token to the client's certificate prevents the use of | |||
stolen access tokens or replay of access tokens by unauthorized | stolen access tokens or replay of access tokens by unauthorized | |||
parties. | parties. | |||
Mutual-TLS certificate-bound access tokens and mutual-TLS client | Mutual-TLS certificate-bound access tokens and mutual-TLS client | |||
authentication are distinct mechanisms, which are complementary but | authentication are distinct mechanisms that are complementary but | |||
don't necessarily need to be deployed or used together. | don't necessarily need to be deployed or used together. | |||
Additional client metadata parameters are introduced by this document | Additional client metadata parameters are introduced by this document | |||
in support of certificate-bound access tokens and mutual-TLS client | in support of certificate-bound access tokens and mutual-TLS client | |||
authentication. The authorization server can obtain client metadata | authentication. The authorization server can obtain client metadata | |||
via the Dynamic Client Registration Protocol [RFC7591], which defines | via the Dynamic Client Registration Protocol [RFC7591], which defines | |||
mechanisms for dynamically registering OAuth 2.0 client metadata with | mechanisms for dynamically registering OAuth 2.0 client metadata with | |||
authorization servers. Also the metadata defined by RFC7591, and | authorization servers. Also the metadata defined by [RFC7591], and | |||
registered extensions to it, imply a general data model for clients | registered extensions to it, imply a general data model for clients | |||
that is useful for authorization server implementations even when the | that is useful for authorization server implementations, even when | |||
Dynamic Client Registration Protocol isn't in play. Such | the Dynamic Client Registration Protocol isn't in play. Such | |||
implementations will typically have some sort of user interface | implementations will typically have some sort of user interface | |||
available for managing client configuration. | available for managing client configuration. | |||
1.1. Requirements Notation and Conventions | 1.1. Requirements Notation and Conventions | |||
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. | |||
1.2. Terminology | 1.2. Terminology | |||
Throughout this document the term "mutual TLS" refers to the process | Throughout this document the term "mutual TLS" refers to the process | |||
whereby, in addition to the normal TLS server authentication with a | whereby, in addition to the normal TLS server authentication with a | |||
certificate, a client presents its X.509 certificate and proves | certificate, a client presents its X.509 certificate and proves | |||
possession of the corresponding private key to a server when | possession of the corresponding private key to a server when | |||
negotiating a TLS session. In contemporary versions of TLS [RFC8446] | negotiating a TLS session. In contemporary versions of TLS [RFC5246] | |||
[RFC5246] this requires that the client send the Certificate and | [RFC8446], this requires that the client send the Certificate and | |||
CertificateVerify messages during the handshake and for the server to | CertificateVerify messages during the handshake and for the server to | |||
verify the CertificateVerify and Finished messages. | verify the CertificateVerify and Finished messages. | |||
2. Mutual TLS for OAuth Client Authentication | 2. Mutual TLS for OAuth Client Authentication | |||
This section defines, as an extension of OAuth 2.0, Section 2.3 | This section defines, as an extension of Section 2.3 of OAuth 2.0 | |||
[RFC6749], two distinct methods of using mutual-TLS X.509 client | [RFC6749], two distinct methods of using mutual-TLS X.509 client | |||
certificates as client credentials. The requirement of mutual TLS | certificates as client credentials. The requirement of mutual TLS | |||
for client authentication is determined by the authorization server | for client authentication is determined by the authorization server, | |||
based on policy or configuration for the given client (regardless of | based on policy or configuration for the given client (regardless of | |||
whether the client was dynamically registered, statically configured, | whether the client was dynamically registered, statically configured, | |||
or otherwise established). | or otherwise established). | |||
In order to utilize TLS for OAuth client authentication, the TLS | In order to utilize TLS for OAuth client authentication, the TLS | |||
connection between the client and the authorization server MUST have | connection between the client and the authorization server MUST have | |||
been established or reestablished with mutual-TLS X.509 certificate | been established or re-established with mutual-TLS X.509 certificate | |||
authentication (i.e. the Client Certificate and Certificate Verify | authentication (i.e., the client Certificate and CertificateVerify | |||
messages are sent during the TLS Handshake). | messages are sent during the TLS handshake). | |||
For all requests to the authorization server utilizing mutual-TLS | For all requests to the authorization server utilizing mutual-TLS | |||
client authentication, the client MUST include the "client_id" | client authentication, the client MUST include the "client_id" | |||
parameter, described in OAuth 2.0, Section 2.2 [RFC6749]. The | parameter described in Section 2.2 of OAuth 2.0 [RFC6749]. The | |||
presence of the "client_id" parameter enables the authorization | presence of the "client_id" parameter enables the authorization | |||
server to easily identify the client independently from the content | server to easily identify the client independently from the content | |||
of the certificate. The authorization server can locate the client | of the certificate. The authorization server can locate the client | |||
configuration using the client identifier and check the certificate | configuration using the client identifier and check the certificate | |||
presented in the TLS Handshake against the expected credentials for | presented in the TLS handshake against the expected credentials for | |||
that client. The authorization server MUST enforce the binding | that client. The authorization server MUST enforce the binding | |||
between client and certificate as described in either Section 2.1 or | between client and certificate, as described in either Section 2.1 or | |||
Section 2.2 below. If no certificate is presented or that which is | 2.2 below. If no certificate is presented, or that which is | |||
presented doesn't match that which is expected for the given | presented doesn't match that which is expected for the given | |||
"client_id", the authorization server returns a normal OAuth 2.0 | "client_id", the authorization server returns a normal OAuth 2.0 | |||
error response per Section 5.2 of RFC6749 [RFC6749] with the | error response per Section 5.2 of [RFC6749] with the "invalid_client" | |||
"invalid_client" error code to indicate failed client authentication. | error code to indicate failed client authentication. | |||
2.1. PKI Mutual-TLS Method | 2.1. PKI Mutual-TLS Method | |||
The PKI (public key infrastructure) method of mutual-TLS OAuth client | The PKI (public key infrastructure) method of mutual-TLS OAuth client | |||
authentication adheres to the way in which X.509 certificates are | authentication adheres to the way in which X.509 certificates are | |||
traditionally used for authentication. It relies on a validated | traditionally used for authentication. It relies on a validated | |||
certificate chain [RFC5280] and a single subject distinguished name | certificate chain [RFC5280] and a single subject distinguished name | |||
(DN) or a single subject alternative name (SAN) to authenticate the | (DN) or a single subject alternative name (SAN) to authenticate the | |||
client. Only one subject name value of any type is used for each | client. Only one subject name value of any type is used for each | |||
client. The TLS handshake is utilized to validate the client's | client. The TLS handshake is utilized to validate the client's | |||
skipping to change at page 7, line 31 ¶ | skipping to change at line 307 ¶ | |||
In order to convey the expected subject of the certificate, the | In order to convey the expected subject of the certificate, the | |||
following metadata parameters are introduced for the OAuth 2.0 | following metadata parameters are introduced for the OAuth 2.0 | |||
Dynamic Client Registration Protocol [RFC7591] in support of the PKI | Dynamic Client Registration Protocol [RFC7591] in support of the PKI | |||
method of mutual-TLS client authentication. A client using the | method of mutual-TLS client authentication. A client using the | |||
"tls_client_auth" authentication method MUST use exactly one of the | "tls_client_auth" authentication method MUST use exactly one of the | |||
below metadata parameters to indicate the certificate subject value | below metadata parameters to indicate the certificate subject value | |||
that the authorization server is to expect when authenticating the | that the authorization server is to expect when authenticating the | |||
respective client. | respective client. | |||
tls_client_auth_subject_dn | tls_client_auth_subject_dn | |||
An [RFC4514] string representation of the expected subject | A string representation -- as defined in [RFC4514] -- of the | |||
distinguished name of the certificate, which the OAuth client will | expected subject distinguished name of the certificate that the | |||
use in mutual-TLS authentication. | OAuth client will use in mutual-TLS authentication. | |||
tls_client_auth_san_dns | tls_client_auth_san_dns | |||
A string containing the value of an expected dNSName SAN entry in | A string containing the value of an expected dNSName SAN entry in | |||
the certificate, which the OAuth client will use in mutual-TLS | the certificate that the OAuth client will use in mutual-TLS | |||
authentication. | authentication. | |||
tls_client_auth_san_uri | tls_client_auth_san_uri | |||
A string containing the value of an expected | A string containing the value of an expected | |||
uniformResourceIdentifier SAN entry in the certificate, which the | uniformResourceIdentifier SAN entry in the certificate that the | |||
OAuth client will use in mutual-TLS authentication. | OAuth client will use in mutual-TLS authentication. | |||
tls_client_auth_san_ip | tls_client_auth_san_ip | |||
A string representation of an IP address in either dotted decimal | A string representation of an IP address in either dotted decimal | |||
notation (for IPv4) or colon-delimited hexadecimal (for IPv6, as | notation (for IPv4) or colon-delimited hexadecimal (for IPv6, as | |||
defined in [RFC5952]) that is expected to be present as an | defined in [RFC5952]) that is expected to be present as an | |||
iPAddress SAN entry in the certificate, which the OAuth client | iPAddress SAN entry in the certificate that the OAuth client will | |||
will use in mutual-TLS authentication. Per section 8 of [RFC5952] | use in mutual-TLS authentication. Per Section 8 of [RFC5952], the | |||
the IP address comparison of the value in this parameter and the | IP address comparison of the value in this parameter and the SAN | |||
SAN entry in the certificate is to be done in binary format. | entry in the certificate is to be done in binary format. | |||
tls_client_auth_san_email | tls_client_auth_san_email | |||
A string containing the value of an expected rfc822Name SAN entry | A string containing the value of an expected rfc822Name SAN entry | |||
in the certificate, which the OAuth client will use in mutual-TLS | in the certificate that the OAuth client will use in mutual-TLS | |||
authentication. | authentication. | |||
2.2. Self-Signed Certificate Mutual-TLS Method | 2.2. Self-Signed Certificate Mutual-TLS Method | |||
This method of mutual-TLS OAuth client authentication is intended to | This method of mutual-TLS OAuth client authentication is intended to | |||
support client authentication using self-signed certificates. As a | support client authentication using self-signed certificates. As a | |||
prerequisite, the client registers its X.509 certificates (using | prerequisite, the client registers its X.509 certificates (using | |||
"jwks" defined in [RFC7591]) or a reference to a trusted source for | "jwks" defined in [RFC7591]) or a reference to a trusted source for | |||
its X.509 certificates (using "jwks_uri" from [RFC7591]) with the | its X.509 certificates (using "jwks_uri" from [RFC7591]) with the | |||
authorization server. During authentication, TLS is utilized to | authorization server. During authentication, TLS is utilized to | |||
skipping to change at page 8, line 48 ¶ | skipping to change at line 371 ¶ | |||
Endpoint Authentication Methods" registry [IANA.OAuth.Parameters]. | Endpoint Authentication Methods" registry [IANA.OAuth.Parameters]. | |||
self_signed_tls_client_auth | self_signed_tls_client_auth | |||
Indicates that client authentication to the authorization server | Indicates that client authentication to the authorization server | |||
will occur using mutual TLS with the client utilizing a self- | will occur using mutual TLS with the client utilizing a self- | |||
signed certificate. | signed certificate. | |||
2.2.2. Client Registration Metadata | 2.2.2. Client Registration Metadata | |||
For the Self-Signed Certificate method of binding a certificate with | For the Self-Signed Certificate method of binding a certificate with | |||
a client using mutual TLS client authentication, the existing | a client using mutual-TLS client authentication, the existing | |||
"jwks_uri" or "jwks" metadata parameters from [RFC7591] are used to | "jwks_uri" or "jwks" metadata parameters from [RFC7591] are used to | |||
convey the client's certificates via JSON Web Key (JWK) in a JWK Set | convey the client's certificates via JSON Web Key (JWK) in a JWK Set | |||
(JWKS) [RFC7517]. The "jwks" metadata parameter is a JWK Set | [RFC7517]. The "jwks" metadata parameter is a JWK Set containing the | |||
containing the client's public keys as an array of JWKs while the | client's public keys as an array of JWKs, while the "jwks_uri" | |||
"jwks_uri" parameter is a URL that references a client's JWK Set. A | parameter is a URL that references a client's JWK Set. A certificate | |||
certificate is represented with the "x5c" parameter of an individual | is represented with the "x5c" parameter of an individual JWK within | |||
JWK within the set. Note that the members of the JWK representing | the set. Note that the members of the JWK representing the public | |||
the public key (e.g. "n" and "e" for RSA, "x" and "y" for EC) are | key (e.g., "n" and "e" for RSA, "x" and "y" for Elliptic Curve (EC)) | |||
required parameters per [RFC7518] so will be present even though they | are required parameters per [RFC7518] so will be present even though | |||
are not utilized in this context. Also note that that Section 4.7 of | they are not utilized in this context. Also note that Section 4.7 of | |||
[RFC7517] requires that the key in the first certificate of the "x5c" | [RFC7517] requires that the key in the first certificate of the "x5c" | |||
parameter match the public key represented by those other members of | parameter match the public key represented by those other members of | |||
the JWK. | the JWK. | |||
3. Mutual-TLS Client Certificate-Bound Access Tokens | 3. Mutual-TLS Client Certificate-Bound Access Tokens | |||
When mutual TLS is used by the client on the connection to the token | When mutual TLS is used by the client on the connection to the token | |||
endpoint, the authorization server is able to bind the issued access | endpoint, the authorization server is able to bind the issued access | |||
token to the client certificate. Such a binding is accomplished by | token to the client certificate. Such a binding is accomplished by | |||
associating the certificate with the token in a way that can be | associating the certificate with the token in a way that can be | |||
skipping to change at page 9, line 37 ¶ | skipping to change at line 408 ¶ | |||
mutual TLS during protected resource access to serve purely as a | mutual TLS during protected resource access to serve purely as a | |||
proof-of-possession mechanism. Other methods of associating a | proof-of-possession mechanism. Other methods of associating a | |||
certificate with an access token are possible, per agreement by the | certificate with an access token are possible, per agreement by the | |||
authorization server and the protected resource, but are beyond the | authorization server and the protected resource, but are beyond the | |||
scope of this specification. | scope of this specification. | |||
In order for a resource server to use certificate-bound access | In order for a resource server to use certificate-bound access | |||
tokens, it must have advance knowledge that mutual TLS is to be used | tokens, it must have advance knowledge that mutual TLS is to be used | |||
for some or all resource accesses. In particular, the access token | for some or all resource accesses. In particular, the access token | |||
itself cannot be used as input to the decision of whether or not to | itself cannot be used as input to the decision of whether or not to | |||
request mutual TLS, since from the TLS perspective those are | request mutual TLS because (from the TLS perspective) it is | |||
"Application Data", only exchanged after the TLS handshake has been | "Application Data", only exchanged after the TLS handshake has been | |||
completed, and the initial CertificateRequest occurs during the | completed, and the initial CertificateRequest occurs during the | |||
handshake, before the Application Data is available. Although | handshake, before the Application Data is available. Although | |||
subsequent opportunities for a TLS client to present a certificate | subsequent opportunities for a TLS client to present a certificate | |||
may be available, e.g., via TLS 1.2 renegotiation [RFC5246] or TLS | may be available, e.g., via TLS 1.2 renegotiation [RFC5246] or TLS | |||
1.3 post-handshake authentication [RFC8446], this document makes no | 1.3 post-handshake authentication [RFC8446], this document makes no | |||
provision for their usage. It is expected to be common that a | provision for their usage. It is expected to be common that a | |||
mutual-TLS-using resource server will require mutual TLS for all | mutual-TLS-using resource server will require mutual TLS for all | |||
resources hosted thereupon, or will serve mutual-TLS-protected and | resources hosted thereupon or will serve mutual-TLS-protected and | |||
regular resources on separate hostname+port combinations, though | regular resources on separate hostname and port combinations, though | |||
other workflows are possible. How resource server policy is | other workflows are possible. How resource server policy is | |||
synchronized with the AS is out of scope for this document. | synchronized with the authorization server (AS) is out of scope for | |||
this document. | ||||
Within the scope of an mutual-TLS-protected resource-access flow, the | Within the scope of a mutual-TLS-protected resource-access flow, the | |||
client makes protected resource requests as described in [RFC6750], | client makes protected resource requests, as described in [RFC6750], | |||
however, those requests MUST be made over a mutually authenticated | however, those requests MUST be made over a mutually authenticated | |||
TLS connection using the same certificate that was used for mutual | TLS connection using the same certificate that was used for mutual | |||
TLS at the token endpoint. | TLS at the token endpoint. | |||
The protected resource MUST obtain, from its TLS implementation | The protected resource MUST obtain, from its TLS implementation | |||
layer, the client certificate used for mutual TLS and MUST verify | layer, the client certificate used for mutual TLS and MUST verify | |||
that the certificate matches the certificate associated with the | that the certificate matches the certificate associated with the | |||
access token. If they do not match, the resource access attempt MUST | access token. If they do not match, the resource access attempt MUST | |||
be rejected with an error per [RFC6750] using an HTTP 401 status code | be rejected with an error, per [RFC6750], using an HTTP 401 status | |||
and the "invalid_token" error code. | code and the "invalid_token" error code. | |||
Metadata to convey server and client capabilities for mutual-TLS | Metadata to convey server and client capabilities for mutual-TLS | |||
client certificate-bound access tokens is defined in Section 3.3 and | client certificate-bound access tokens is defined in Sections 3.3 and | |||
Section 3.4 respectively. | 3.4, respectively. | |||
3.1. JWT Certificate Thumbprint Confirmation Method | 3.1. JWT Certificate Thumbprint Confirmation Method | |||
When access tokens are represented as JSON Web Tokens (JWT)[RFC7519], | When access tokens are represented as JSON Web Tokens (JWT) | |||
the certificate hash information SHOULD be represented using the | [RFC7519], the certificate hash information SHOULD be represented | |||
"x5t#S256" confirmation method member defined herein. | using the "x5t#S256" confirmation method member defined herein. | |||
To represent the hash of a certificate in a JWT, this specification | To represent the hash of a certificate in a JWT, this specification | |||
defines the new JWT Confirmation Method [RFC7800] member "x5t#S256" | defines the new JWT Confirmation Method [RFC7800] member "x5t#S256" | |||
for the X.509 Certificate SHA-256 Thumbprint. The value of the | for the X.509 Certificate SHA-256 Thumbprint. The value of the | |||
"x5t#S256" member is a base64url-encoded [RFC4648] SHA-256 [SHS] hash | "x5t#S256" member is a base64url-encoded [RFC4648] SHA-256 [SHS] hash | |||
(a.k.a. thumbprint, fingerprint or digest) of the DER encoding [X690] | (a.k.a., thumbprint, fingerprint, or digest) of the DER encoding | |||
of the X.509 certificate [RFC5280]. The base64url-encoded value MUST | [X690] of the X.509 certificate [RFC5280]. The base64url-encoded | |||
omit all trailing pad '=' characters and MUST NOT include any line | value MUST omit all trailing pad '=' characters and MUST NOT include | |||
breaks, whitespace, or other additional characters. | any line breaks, whitespace, or other additional characters. | |||
The following is an example of a JWT payload containing an "x5t#S256" | The following is an example of a JWT payload containing an "x5t#S256" | |||
certificate thumbprint confirmation method. The new JWT content | certificate thumbprint confirmation method. The new JWT content | |||
introduced by this specification is the "cnf" confirmation method | introduced by this specification is the "cnf" confirmation method | |||
claim at the bottom of the example that has the "x5t#S256" | claim at the bottom of the example that has the "x5t#S256" | |||
confirmation method member containing the value that is the hash of | confirmation method member containing the value that is the hash of | |||
the client certificate to which the access token is bound. | the client certificate to which the access token is bound. | |||
{ | { | |||
"iss": "https://server.example.com", | "iss": "https://server.example.com", | |||
skipping to change at page 11, line 22 ¶ | skipping to change at line 479 ¶ | |||
} | } | |||
} | } | |||
Figure 2: Example JWT Claims Set with an X.509 Certificate Thumbprint | Figure 2: Example JWT Claims Set with an X.509 Certificate Thumbprint | |||
Confirmation Method | Confirmation Method | |||
3.2. Confirmation Method for Token Introspection | 3.2. Confirmation Method for Token Introspection | |||
OAuth 2.0 Token Introspection [RFC7662] defines a method for a | OAuth 2.0 Token Introspection [RFC7662] defines a method for a | |||
protected resource to query an authorization server about the active | protected resource to query an authorization server about the active | |||
state of an access token as well as to determine meta-information | state of an access token as well as to determine metainformation | |||
about the token. | about the token. | |||
For a mutual-TLS client certificate-bound access token, the hash of | For a mutual-TLS client certificate-bound access token, the hash of | |||
the certificate to which the token is bound is conveyed to the | the certificate to which the token is bound is conveyed to the | |||
protected resource as meta-information in a token introspection | protected resource as metainformation in a token introspection | |||
response. The hash is conveyed using the same "cnf" with "x5t#S256" | response. The hash is conveyed using the same "cnf" with "x5t#S256" | |||
member structure as the certificate SHA-256 thumbprint confirmation | member structure as the certificate SHA-256 thumbprint confirmation | |||
method, described in Section 3.1, as a top-level member of the | method, described in Section 3.1, as a top-level member of the | |||
introspection response JSON. The protected resource compares that | introspection response JSON. The protected resource compares that | |||
certificate hash to a hash of the client certificate used for mutual- | certificate hash to a hash of the client certificate used for mutual- | |||
TLS authentication and rejects the request, if they do not match. | TLS authentication and rejects the request if they do not match. | |||
The following is an example of an introspection response for an | The following is an example of an introspection response for an | |||
active token with an "x5t#S256" certificate thumbprint confirmation | active token with an "x5t#S256" certificate thumbprint confirmation | |||
method. The new introspection response content introduced by this | method. The new introspection response content introduced by this | |||
specification is the "cnf" confirmation method at the bottom of the | specification is the "cnf" confirmation method at the bottom of the | |||
example that has the "x5t#S256" confirmation method member containing | example that has the "x5t#S256" confirmation method member containing | |||
the value that is the hash of the client certificate to which the | the value that is the hash of the client certificate to which the | |||
access token is bound. | access token is bound. | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
skipping to change at page 12, line 19 ¶ | skipping to change at line 514 ¶ | |||
"active": true, | "active": true, | |||
"iss": "https://server.example.com", | "iss": "https://server.example.com", | |||
"sub": "ty.webb@example.com", | "sub": "ty.webb@example.com", | |||
"exp": 1493726400, | "exp": 1493726400, | |||
"nbf": 1493722800, | "nbf": 1493722800, | |||
"cnf":{ | "cnf":{ | |||
"x5t#S256": "bwcK0esc3ACC3DB2Y5_lESsXE8o9ltc05O89jdN-dg2" | "x5t#S256": "bwcK0esc3ACC3DB2Y5_lESsXE8o9ltc05O89jdN-dg2" | |||
} | } | |||
} | } | |||
Figure 3: Example Introspection Response for a Certificate-Bound | Figure 3: Example Introspection Response for a Certificate-Bound | |||
Access Token | Access Token | |||
3.3. Authorization Server Metadata | 3.3. Authorization Server Metadata | |||
This document introduces the following new authorization server | This document introduces the following new authorization server | |||
metadata [RFC8414] parameter to signal the server's capability to | metadata [RFC8414] parameter to signal the server's capability to | |||
issue certificate bound access tokens: | issue certificate-bound access tokens: | |||
tls_client_certificate_bound_access_tokens | tls_client_certificate_bound_access_tokens | |||
OPTIONAL. Boolean value indicating server support for mutual-TLS | OPTIONAL. Boolean value indicating server support for mutual-TLS | |||
client certificate-bound access tokens. If omitted, the default | client certificate-bound access tokens. If omitted, the default | |||
value is "false". | value is "false". | |||
3.4. Client Registration Metadata | 3.4. Client Registration Metadata | |||
The following new client metadata parameter is introduced to convey | The following new client metadata parameter is introduced to convey | |||
the client's intention to use certificate bound access tokens: | the client's intention to use certificate-bound access tokens: | |||
tls_client_certificate_bound_access_tokens | tls_client_certificate_bound_access_tokens | |||
OPTIONAL. Boolean value used to indicate the client's intention | OPTIONAL. Boolean value used to indicate the client's intention | |||
to use mutual-TLS client certificate-bound access tokens. If | to use mutual-TLS client certificate-bound access tokens. If | |||
omitted, the default value is "false". | omitted, the default value is "false". | |||
Note that, if a client that has indicated the intention to use | Note that if a client that has indicated the intention to use mutual- | |||
mutual-TLS client certificate-bound tokens makes a request to the | TLS client certificate-bound tokens makes a request to the token | |||
token endpoint over a non-mutual-TLS connection, it is at the | endpoint over a non-mutual-TLS connection, it is at the authorization | |||
authorization server's discretion as to whether to return an error or | server's discretion as to whether to return an error or issue an | |||
issue an unbound token. | unbound token. | |||
4. Public Clients and Certificate-Bound Tokens | 4. Public Clients and Certificate-Bound Tokens | |||
Mutual-TLS OAuth client authentication and certificate-bound access | Mutual-TLS OAuth client authentication and certificate-bound access | |||
tokens can be used independently of each other. Use of certificate- | tokens can be used independently of each other. Use of certificate- | |||
bound access tokens without mutual-TLS OAuth client authentication, | bound access tokens without mutual-TLS OAuth client authentication, | |||
for example, is possible in support of binding access tokens to a TLS | for example, is possible in support of binding access tokens to a TLS | |||
client certificate for public clients (those without authentication | client certificate for public clients (those without authentication | |||
credentials associated with the "client_id"). The authorization | credentials associated with the "client_id"). The authorization | |||
server would configure the TLS stack in the same manner as for the | server would configure the TLS stack in the same manner as for the | |||
Self-Signed Certificate method such that it does not verify that the | Self-Signed Certificate method such that it does not verify that the | |||
certificate presented by the client during the handshake is signed by | certificate presented by the client during the handshake is signed by | |||
a trusted CA. Individual instances of a client would create a self- | a trusted CA. Individual instances of a client would create a self- | |||
signed certificate for mutual TLS with both the authorization server | signed certificate for mutual TLS with both the authorization server | |||
and resource server. The authorization server would not use the | and resource server. The authorization server would not use the | |||
mutual-TLS certificate to authenticate the client at the OAuth layer | mutual-TLS certificate to authenticate the client at the OAuth layer | |||
but would bind the issued access token to that certificate, for which | but would bind the issued access token to the certificate for which | |||
the client has proven possession of the corresponding private key. | the client has proven possession of the corresponding private key. | |||
The access token is then bound to the certificate and can only be | The access token is then bound to the certificate and can only be | |||
used by the client possessing the certificate and corresponding | used by the client possessing the certificate and corresponding | |||
private key and utilizing them to negotiate mutual TLS on connections | private key and utilizing them to negotiate mutual TLS on connections | |||
to the resource server. When the authorization server issues a | to the resource server. When the authorization server issues a | |||
refresh token to such a client, it SHOULD also bind the refresh token | refresh token to such a client, it SHOULD also bind the refresh token | |||
to the respective certificate. And check the binding when the | to the respective certificate and check the binding when the refresh | |||
refresh token is presented to get new access tokens. The | token is presented to get new access tokens. The implementation | |||
implementation details of the binding the refresh token are at the | details of the binding of the refresh token are at the discretion of | |||
discretion of the authorization server. | the authorization server. | |||
5. Metadata for Mutual-TLS Endpoint Aliases | 5. Metadata for Mutual-TLS Endpoint Aliases | |||
The process of negotiating client certificate-based mutual TLS | The process of negotiating client certificate-based mutual TLS | |||
involves a TLS server requesting a certificate from the TLS client | involves a TLS server requesting a certificate from the TLS client | |||
(the client does not provide one unsolicited). Although a server can | (the client does not provide one unsolicited). Although a server can | |||
be configured such that client certificates are optional, meaning | be configured such that client certificates are optional, meaning | |||
that the connection is allowed to continue when the client does not | that the connection is allowed to continue when the client does not | |||
provide a certificate, the act of a server requesting a certificate | provide a certificate, the act of a server requesting a certificate | |||
can result in undesirable behavior from some clients. This is | can result in undesirable behavior from some clients. This is | |||
particularly true of web browsers as TLS clients, which will | particularly true of web browsers as TLS clients, which will | |||
typically present the end-user with an intrusive certificate | typically present the end user with an intrusive certificate | |||
selection interface when the server requests a certificate. | selection interface when the server requests a certificate. | |||
Authorization servers supporting both clients using mutual TLS and | Authorization servers supporting both clients using mutual TLS and | |||
conventional clients MAY chose to isolate the server side mutual-TLS | conventional clients MAY chose to isolate the server side mutual-TLS | |||
behavior to only clients intending to do mutual TLS, thus avoiding | behavior to only clients intending to do mutual TLS, thus avoiding | |||
any undesirable effects it might have on conventional clients. The | any undesirable effects it might have on conventional clients. The | |||
following authorization server metadata parameter is introduced to | following authorization server metadata parameter is introduced to | |||
facilitate such separation: | facilitate such separation: | |||
mtls_endpoint_aliases | mtls_endpoint_aliases | |||
OPTIONAL. A JSON object containing alternative authorization | OPTIONAL. A JSON object containing alternative authorization | |||
server endpoints that, when present, an OAuth client intending to | server endpoints that, when present, an OAuth client intending to | |||
do mutual TLS uses in preference to the conventional endpoints. | do mutual TLS uses in preference to the conventional endpoints. | |||
The parameter value itself consists of one or more endpoint | The parameter value itself consists of one or more endpoint | |||
parameters, such as "token_endpoint", "revocation_endpoint", | parameters, such as "token_endpoint", "revocation_endpoint", | |||
"introspection_endpoint", etc., conventionally defined for the | "introspection_endpoint", etc., conventionally defined for the top | |||
top-level of authorization server metadata. An OAuth client | level of authorization server metadata. An OAuth client intending | |||
intending to do mutual TLS (for OAuth client authentication and/or | to do mutual TLS (for OAuth client authentication and/or to | |||
to acquire or use certificate-bound tokens) when making a request | acquire or use certificate-bound tokens) when making a request | |||
directly to the authorization server MUST use the alias URL of the | directly to the authorization server MUST use the alias URL of the | |||
endpoint within the "mtls_endpoint_aliases", when present, in | endpoint within the "mtls_endpoint_aliases", when present, in | |||
preference to the endpoint URL of the same name at top-level of | preference to the endpoint URL of the same name at the top level | |||
metadata. When an endpoint is not present in | of metadata. When an endpoint is not present in | |||
"mtls_endpoint_aliases", then the client uses the conventional | "mtls_endpoint_aliases", then the client uses the conventional | |||
endpoint URL defined at the top-level of the authorization server | endpoint URL defined at the top level of the authorization server | |||
metadata. Metadata parameters within "mtls_endpoint_aliases" that | metadata. Metadata parameters within "mtls_endpoint_aliases" that | |||
do not define endpoints to which an OAuth client makes a direct | do not define endpoints to which an OAuth client makes a direct | |||
request have no meaning and SHOULD be ignored. | request have no meaning and SHOULD be ignored. | |||
Below is an example of an authorization server metadata document with | Below is an example of an authorization server metadata document with | |||
the "mtls_endpoint_aliases" parameter, which indicates aliases for | the "mtls_endpoint_aliases" parameter, which indicates aliases for | |||
the token, revocation, and introspection endpoints that an OAuth | the token, revocation, and introspection endpoints that an OAuth | |||
client intending to do mutual TLS would in preference to the | client intending to do mutual TLS would use in preference to the | |||
conventional token, revocation, and introspection endpoints. Note | conventional token, revocation, and introspection endpoints. Note | |||
that the endpoints in "mtls_endpoint_aliases" use a different host | that the endpoints in "mtls_endpoint_aliases" use a different host | |||
than their conventional counterparts, which allows the authorization | than their conventional counterparts, which allows the authorization | |||
server (via TLS "server_name" extension [RFC6066] or actual distinct | server (via TLS "server_name" extension [RFC6066] or actual distinct | |||
hosts) to differentiate its TLS behavior as appropriate. | hosts) to differentiate its TLS behavior as appropriate. | |||
{ | { | |||
"issuer": "https://server.example.com", | "issuer": "https://server.example.com", | |||
"authorization_endpoint": "https://server.example.com/authz", | "authorization_endpoint": "https://server.example.com/authz", | |||
"token_endpoint": "https://server.example.com/token", | "token_endpoint": "https://server.example.com/token", | |||
"introspection_endpoint": "https://server.example.com/introspect", | "introspection_endpoint": "https://server.example.com/introspect", | |||
"revocation_endpoint": "https://server.example.com/revo", | "revocation_endpoint": "https://server.example.com/revo", | |||
"jwks_uri": "https://server.example.com/jwks", | "jwks_uri": "https://server.example.com/jwks", | |||
"response_types_supported": ["code"], | "response_types_supported": ["code"], | |||
"response_modes_supported": ["fragment","query","form_post"], | "response_modes_supported": ["fragment","query","form_post"], | |||
"grant_types_supported": ["authorization_code", "refresh_token"], | "grant_types_supported": ["authorization_code", "refresh_token"], | |||
"token_endpoint_auth_methods_supported": | "token_endpoint_auth_methods_supported": | |||
["tls_client_auth","client_secret_basic","none"], | ["tls_client_auth","client_secret_basic","none"], | |||
"tls_client_certificate_bound_access_tokens": true | "tls_client_certificate_bound_access_tokens": true, | |||
"mtls_endpoint_aliases": { | "mtls_endpoint_aliases": { | |||
"token_endpoint": "https://mtls.example.com/token", | "token_endpoint": "https://mtls.example.com/token", | |||
"revocation_endpoint": "https://mtls.example.com/revo", | "revocation_endpoint": "https://mtls.example.com/revo", | |||
"introspection_endpoint": "https://mtls.example.com/introspect" | "introspection_endpoint": "https://mtls.example.com/introspect" | |||
} | } | |||
} | } | |||
Figure 4: Example Authorization Server Metadata with Mutual-TLS | Figure 4: Example Authorization Server Metadata with Mutual-TLS | |||
Endpoint Aliases | Endpoint Aliases | |||
6. Implementation Considerations | 6. Implementation Considerations | |||
6.1. Authorization Server | 6.1. Authorization Server | |||
The authorization server needs to set up its TLS configuration | The authorization server needs to set up its TLS configuration | |||
appropriately for the OAuth client authentication methods it | appropriately for the OAuth client authentication methods it | |||
supports. | supports. | |||
An authorization server that supports mutual-TLS client | An authorization server that supports mutual-TLS client | |||
authentication and other client authentication methods or public | authentication and other client authentication methods or public | |||
clients in parallel would make mutual TLS optional (i.e. allowing a | clients in parallel would make mutual TLS optional (i.e., allowing a | |||
handshake to continue after the server requests a client certificate | handshake to continue after the server requests a client certificate | |||
but the client does not send one). | but the client does not send one). | |||
In order to support the Self-Signed Certificate method alone, the | In order to support the Self-Signed Certificate method alone, the | |||
authorization server would configure the TLS stack in such a way that | authorization server would configure the TLS stack in such a way that | |||
it does not verify whether the certificate presented by the client | it does not verify whether the certificate presented by the client | |||
during the handshake is signed by a trusted CA certificate. | during the handshake is signed by a trusted CA certificate. | |||
As described in Section 3, the authorization server binds the issued | As described in Section 3, the authorization server binds the issued | |||
access token to the TLS client certificate, which means that it will | access token to the TLS client certificate, which means that it will | |||
only issue certificate-bound tokens for a certificate which the | only issue certificate-bound tokens for a certificate that the client | |||
client has proven possession of the corresponding private key. | has proven possession of the corresponding private key. | |||
The authorization server may also consider hosting the token | The authorization server may also consider hosting the token endpoint | |||
endpoint, and other endpoints requiring client authentication, on a | and other endpoints requiring client authentication on a separate | |||
separate host name or port in order to prevent unintended impact on | host name or port in order to prevent unintended impact on the TLS | |||
the TLS behavior of its other endpoints, e.g. the authorization | behavior of its other endpoints, e.g., the authorization endpoint. | |||
endpoint. As described in Section 5, it may further isolate any | As described in Section 5, it may further isolate any potential | |||
potential impact of the server requesting client certificates by | impact of the server requesting client certificates by offering a | |||
offering a distinct set of endpoints on a separate host or port, | distinct set of endpoints on a separate host or port, which are | |||
which are aliases for the originals that a client intending to do | aliases for the originals that a client intending to do mutual TLS | |||
mutual TLS will use in preference to the conventional endpoints. | will use in preference to the conventional endpoints. | |||
6.2. Resource Server | 6.2. Resource Server | |||
OAuth divides the roles and responsibilities such that the resource | OAuth divides the roles and responsibilities such that the resource | |||
server relies on the authorization server to perform client | server relies on the authorization server to perform client | |||
authentication and obtain resource owner (end-user) authorization. | authentication and obtain resource-owner (end-user) authorization. | |||
The resource server makes authorization decisions based on the access | The resource server makes authorization decisions based on the access | |||
token presented by the client but does not directly authenticate the | token presented by the client but does not directly authenticate the | |||
client per se. The manner in which an access token is bound to the | client per se. The manner in which an access token is bound to the | |||
client certificate and how a protected resource verifies the proof- | client certificate and how a protected resource verifies the proof- | |||
of-possession decouples that from the specific method that the client | of-possession decouples that from the specific method that the client | |||
used to authenticate with the authorization server. Mutual TLS | used to authenticate with the authorization server. Mutual TLS | |||
during protected resource access can therefore serve purely as a | during protected resource access can, therefore, serve purely as a | |||
proof-of-possession mechanism. As such, it is not necessary for the | proof-of-possession mechanism. As such, it is not necessary for the | |||
resource server to validate the trust chain of the client's | resource server to validate the trust chain of the client's | |||
certificate in any of the methods defined in this document. The | certificate in any of the methods defined in this document. The | |||
resource server would therefore configure the TLS stack in a way that | resource server would, therefore, configure the TLS stack in a way | |||
it does not verify whether the certificate presented by the client | that it does not verify whether the certificate presented by the | |||
during the handshake is signed by a trusted CA certificate. | client during the handshake is signed by a trusted CA certificate. | |||
6.3. Certificate Expiration and Bound Access Tokens | 6.3. Certificate Expiration and Bound Access Tokens | |||
As described in Section 3, an access token is bound to a specific | As described in Section 3, an access token is bound to a specific | |||
client certificate, which means that the same certificate must be | client certificate, which means that the same certificate must be | |||
used for mutual TLS on protected resource access. It also implies | used for mutual TLS on protected resource access. It also implies | |||
that access tokens are invalidated when a client updates the | that access tokens are invalidated when a client updates the | |||
certificate, which can be handled similar to expired access tokens | certificate, which can be handled similarly to expired access tokens | |||
where the client requests a new access token (typically with a | where the client requests a new access token (typically with a | |||
refresh token) and retries the protected resource request. | refresh token) and retries the protected resource request. | |||
6.4. Implicit Grant Unsupported | 6.4. Implicit Grant Unsupported | |||
This document describes binding an access token to the client | This document describes binding an access token to the client | |||
certificate presented on the TLS connection from the client to the | certificate presented on the TLS connection from the client to the | |||
authorization server's token endpoint, however, such binding of | authorization server's token endpoint, however, such binding of | |||
access tokens issued directly from the authorization endpoint via the | access tokens issued directly from the authorization endpoint via the | |||
implicit grant flow is explicitly out of scope. End users interact | implicit grant flow is explicitly out of scope. End users interact | |||
directly with the authorization endpoint using a web browser and the | directly with the authorization endpoint using a web browser, and the | |||
use of client certificates in user's browsers bring operational and | use of client certificates in user's browsers bring operational and | |||
usability issues, which make it undesirable to support certificate- | usability issues that make it undesirable to support certificate- | |||
bound access tokens issued in the implicit grant flow. | bound access tokens issued in the implicit grant flow. | |||
Implementations wanting to employ certificate-bound access tokens | Implementations wanting to employ certificate-bound access tokens | |||
should utilize grant types that involve the client making an access | should utilize grant types that involve the client making an access | |||
token request directly to the token endpoint (e.g. the authorization | token request directly to the token endpoint (e.g., the authorization | |||
code and refresh token grant types). | code and refresh token grant types). | |||
6.5. TLS Termination | 6.5. TLS Termination | |||
An authorization server or resource server MAY choose to terminate | An authorization server or resource server MAY choose to terminate | |||
TLS connections at a load balancer, reverse proxy, or other network | TLS connections at a load balancer, reverse proxy, or other network | |||
intermediary. How the client certificate metadata is securely | intermediary. How the client certificate metadata is securely | |||
communicated between the intermediary and the application server in | communicated between the intermediary and the application server, in | |||
this case is out of scope of this specification. | this case, is out of scope of this specification. | |||
7. Security Considerations | 7. Security Considerations | |||
7.1. Certificate-Bound Refresh Tokens | 7.1. Certificate-Bound Refresh Tokens | |||
The OAuth 2.0 Authorization Framework [RFC6749] requires that an | The OAuth 2.0 Authorization Framework [RFC6749] requires that an | |||
authorization server bind refresh tokens to the client to which they | authorization server (AS) bind refresh tokens to the client to which | |||
were issued and that confidential clients (those having established | they were issued and that confidential clients (those having | |||
authentication credentials with the authorization server) | established authentication credentials with the AS) authenticate to | |||
authenticate to the AS when presenting a refresh token. As a result, | the AS when presenting a refresh token. As a result, refresh tokens | |||
refresh tokens are indirectly certificate-bound by way of the client | are indirectly certificate-bound by way of the client ID and the | |||
ID and the associated requirement for (certificate-based) | associated requirement for (certificate-based) authentication to the | |||
authentication to the authorization server when issued to clients | AS when issued to clients utilizing the "tls_client_auth" or | |||
utilizing the "tls_client_auth" or "self_signed_tls_client_auth" | "self_signed_tls_client_auth" methods of client authentication. | |||
methods of client authentication. Section 4 describes certificate- | Section 4 describes certificate-bound refresh tokens issued to public | |||
bound refresh tokens issued to public clients (those without | clients (those without authentication credentials associated with the | |||
authentication credentials associated with the "client_id"). | "client_id"). | |||
7.2. Certificate Thumbprint Binding | 7.2. Certificate Thumbprint Binding | |||
The binding between the certificate and access token specified in | The binding between the certificate and access token specified in | |||
Section 3.1 uses a cryptographic hash of the certificate. It relies | Section 3.1 uses a cryptographic hash of the certificate. It relies | |||
on the hash function having sufficient second-preimage resistance so | on the hash function having sufficient second-preimage resistance so | |||
as to make it computationally infeasible to find or create another | as to make it computationally infeasible to find or create another | |||
certificate that produces to the same hash output value. The SHA-256 | certificate that produces to the same hash output value. The SHA-256 | |||
hash function was used because it meets the aforementioned | hash function was used because it meets the aforementioned | |||
requirement while being widely available. If, in the future, | requirement while being widely available. If, in the future, | |||
certificate thumbprints need to be computed using hash function(s) | certificate thumbprints need to be computed using hash function(s) | |||
other than SHA-256, it is suggested that additional related JWT | other than SHA-256, it is suggested that, for additional related JWT | |||
confirmation methods members be defined for that purpose and | confirmation methods, members be defined for that purpose and | |||
registered in the IANA "JWT Confirmation Methods" registry | registered in the IANA "JWT Confirmation Methods" registry | |||
[IANA.JWT.Claims] for JWT "cnf" member values. | [IANA.JWT.Claims] for JWT "cnf" member values. | |||
Community knowledge about the strength of various algorithms and | Community knowledge about the strength of various algorithms and | |||
feasible attacks can change suddenly, and experience shows that a | feasible attacks can change suddenly, and experience shows that a | |||
document about security is a point-in-time statement. Readers are | document about security is a point-in-time statement. Readers are | |||
advised to seek out any errata or updates that apply to this | advised to seek out any errata or updates that apply to this | |||
document. | document. | |||
7.3. TLS Versions and Best Practices | 7.3. TLS Versions and Best Practices | |||
In the abstract this document is applicable with any TLS version | This document is applicable with any TLS version supporting | |||
supporting certificate-based client authentication. Both TLS 1.3 | certificate-based client authentication. Both TLS 1.3 [RFC8446] and | |||
[RFC8446] and TLS 1.2 [RFC5246] are cited herein because, at the time | TLS 1.2 [RFC5246] are cited herein, because, at the time of writing, | |||
of writing, 1.3 is the newest version while 1.2 is the most widely | 1.3 is the newest version, while 1.2 is the most widely deployed. | |||
deployed. General implementation and security considerations for | General implementation and security considerations for TLS, including | |||
TLS, including version recommendations, can be found in [BCP195]. | version recommendations, can be found in [BCP195]. | |||
TLS certificate validation (for both client and server certificates) | TLS certificate validation (for both client and server certificates) | |||
requires a local database of trusted certificate authorities (CAs). | requires a local database of trusted certificate authorities (CAs). | |||
Decisions about what CAs to trust and how to make such a | Decisions about what CAs to trust and how to make such a | |||
determination of trust are out of scope for this document. | determination of trust are out of scope for this document. | |||
7.4. X.509 Certificate Spoofing | 7.4. X.509 Certificate Spoofing | |||
If the PKI method of client authentication is used, an attacker could | If the PKI method of client authentication is used, an attacker could | |||
try to impersonate a client using a certificate with the same subject | try to impersonate a client using a certificate with the same subject | |||
(DN or SAN) but issued by a different CA, which the authorization | (DN or SAN) but issued by a different CA that the authorization | |||
server trusts. To cope with that threat, the authorization server | server trusts. To cope with that threat, the authorization server | |||
SHOULD only accept as trust anchors a limited number of CAs whose | SHOULD only accept, as trust anchors, a limited number of CAs whose | |||
certificate issuance policy meets its security requirements. There | certificate issuance policy meets its security requirements. There | |||
is an assumption then that the client and server agree out of band on | is an assumption then that the client and server agree out of band on | |||
the set of trust anchors that the server uses to create and validate | the set of trust anchors that the server uses to create and validate | |||
the certificate chain. Without this assumption the use of a subject | the certificate chain. Without this assumption the use of a subject | |||
to identify the client certificate would open the server up to | to identify the client certificate would open the server up to | |||
certificate spoofing attacks. | certificate spoofing attacks. | |||
7.5. X.509 Certificate Parsing and Validation Complexity | 7.5. X.509 Certificate Parsing and Validation Complexity | |||
Parsing and validation of X.509 certificates and certificate chains | Parsing and validation of X.509 certificates and certificate chains | |||
is complex and implementation mistakes have previously exposed | is complex, and implementation mistakes have previously exposed | |||
security vulnerabilities. Complexities of validation include (but | security vulnerabilities. Complexities of validation include (but | |||
are not limited to) [CX5P] [DCW] [RFC5280]: | are not limited to) [CX5P] [DCW] [RFC5280]: | |||
o checking of Basic Constraints, basic and extended Key Usage | * checking of basic constraints, basic and extended key usage | |||
constraints, validity periods, and critical extensions; | constraints, validity periods, and critical extensions; | |||
o handling of embedded NUL bytes in ASN.1 counted-length strings, | * handling of embedded NUL bytes in ASN.1 counted-length strings and | |||
and non-canonical or non-normalized string representations in | non-canonical or non-normalized string representations in subject | |||
subject names; | names; | |||
o handling of wildcard patterns in subject names; | * handling of wildcard patterns in subject names; | |||
o recursive verification of certificate chains and checking | * recursive verification of certificate chains and checking | |||
certificate revocation. | certificate revocation. | |||
For these reasons, implementors SHOULD use an established and well- | For these reasons, implementors SHOULD use an established and well- | |||
tested X.509 library (such as one used by an established TLS library) | tested X.509 library (such as one used by an established TLS library) | |||
for validation of X.509 certificate chains and SHOULD NOT attempt to | for validation of X.509 certificate chains and SHOULD NOT attempt to | |||
write their own X.509 certificate validation procedures. | write their own X.509 certificate validation procedures. | |||
8. Privacy Considerations | 8. Privacy Considerations | |||
In TLS versions prior to 1.3, the client's certificate is sent | In TLS versions prior to 1.3, the client's certificate is sent | |||
unencrypted in the initial handshake and can potentially be used by | unencrypted in the initial handshake and can potentially be used by | |||
third parties to monitor, track, and correlate client activity. This | third parties to monitor, track, and correlate client activity. This | |||
is likely of little concern for clients that act on behalf of a | is likely of little concern for clients that act on behalf of a | |||
significant number of end-users because individual user activity will | significant number of end users because individual user activity will | |||
not be discernible amidst the client activity as a whole. However, | not be discernible amidst the client activity as a whole. However, | |||
clients that act on behalf of a single end-user, such as a native | clients that act on behalf of a single end user, such as a native | |||
application on a mobile device, should use TLS version 1.3 whenever | application on a mobile device, should use TLS version 1.3 whenever | |||
possible or consider the potential privacy implications of using | possible or consider the potential privacy implications of using | |||
mutual TLS on earlier versions. | mutual TLS on earlier versions. | |||
9. IANA Considerations | 9. IANA Considerations | |||
9.1. JWT Confirmation Methods Registration | 9.1. JWT Confirmation Methods Registration | |||
This specification requests registration of the following value in | Per this specification, the following value has been registered in | |||
the IANA "JWT Confirmation Methods" registry [IANA.JWT.Claims] for | the IANA "JWT Confirmation Methods" registry [IANA.JWT.Claims] for | |||
JWT "cnf" member values established by [RFC7800]. | JWT "cnf" member values established by [RFC7800]. | |||
o Confirmation Method Value: "x5t#S256" | Confirmation Method Value: "x5t#S256" | |||
o Confirmation Method Description: X.509 Certificate SHA-256 | Confirmation Method Description: X.509 Certificate SHA-256 | |||
Thumbprint | Thumbprint | |||
o Change Controller: IESG | Change Controller: IESG | |||
o Specification Document(s): Section 3.1 of [[ this specification ]] | Specification Document(s): Section 3.1 of RFC 8705 | |||
9.2. Authorization Server Metadata Registration | 9.2. Authorization Server Metadata Registration | |||
This specification requests registration of the following values in | Per this specification, the following values have been registered in | |||
the IANA "OAuth Authorization Server Metadata" registry | the IANA "OAuth Authorization Server Metadata" registry | |||
[IANA.OAuth.Parameters] established by [RFC8414]. | [IANA.OAuth.Parameters] established by [RFC8414]. | |||
o Metadata Name: "tls_client_certificate_bound_access_tokens" | Metadata Name: "tls_client_certificate_bound_access_tokens" | |||
o Metadata Description: Indicates authorization server support for | Metadata Description: Indicates authorization server support for | |||
mutual-TLS client certificate-bound access tokens. | mutual-TLS client certificate-bound access tokens. | |||
o Change Controller: IESG | Change Controller: IESG | |||
o Specification Document(s): Section 3.3 of [[ this specification ]] | Specification Document(s): Section 3.3 of RFC 8705 | |||
o Metadata Name: "mtls_endpoint_aliases" | ||||
o Metadata Description: JSON object containing alternative | Metadata Name: "mtls_endpoint_aliases" | |||
Metadata Description: JSON object containing alternative | ||||
authorization server endpoints, which a client intending to do | authorization server endpoints, which a client intending to do | |||
mutual TLS will use in preference to the conventional endpoints. | mutual TLS will use in preference to the conventional endpoints. | |||
o Change Controller: IESG | Change Controller: IESG | |||
o Specification Document(s): Section 5 of [[ this specification ]] | Specification Document(s): Section 5 of RFC 8705 | |||
9.3. Token Endpoint Authentication Method Registration | 9.3. Token Endpoint Authentication Method Registration | |||
This specification requests registration of the following values in | Per this specification, the following values have been registered in | |||
the IANA "OAuth Token Endpoint Authentication Methods" registry | the IANA "OAuth Token Endpoint Authentication Methods" registry | |||
[IANA.OAuth.Parameters] established by [RFC7591]. | [IANA.OAuth.Parameters] established by [RFC7591]. | |||
o Token Endpoint Authentication Method Name: "tls_client_auth" | Token Endpoint Authentication Method Name: "tls_client_auth" | |||
o Change Controller: IESG | Change Controller: IESG | |||
o Specification Document(s): Section 2.1.1 of [[ this specification | Specification Document(s): Section 2.1.1 of RFC 8705 | |||
]] | ||||
o Token Endpoint Authentication Method Name: | Token Endpoint Authentication Method Name: "self_signed_tls_client_ | |||
"self_signed_tls_client_auth" | auth" | |||
o Change Controller: IESG | Change Controller: IESG | |||
o Specification Document(s): Section 2.2.1 of [[ this specification | Specification Document(s): Section 2.2.1 of RFC 8705 | |||
]] | ||||
9.4. Token Introspection Response Registration | 9.4. Token Introspection Response Registration | |||
Proof-of-Possession Key Semantics for JSON Web Tokens [RFC7800] | "Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)" | |||
defined the "cnf" (confirmation) claim, which enables confirmation | [RFC7800] defined the "cnf" (confirmation) claim that enables | |||
key information to be carried in a JWT. However, the same proof-of- | confirmation key information to be carried in a JWT. However, the | |||
possession semantics are also useful for introspected access tokens | same proof-of-possession semantics are also useful for introspected | |||
whereby the protected resource obtains the confirmation key data as | access tokens whereby the protected resource obtains the confirmation | |||
meta-information of a token introspection response and uses that | key data as metainformation of a token introspection response and | |||
information in verifying proof-of-possession. Therefore this | uses that information in verifying proof-of-possession. Therefore, | |||
specification defines and registers proof-of-possession semantics for | this specification defines and registers proof-of-possession | |||
OAuth 2.0 Token Introspection [RFC7662] using the "cnf" structure. | semantics for OAuth 2.0 Token Introspection [RFC7662] using the "cnf" | |||
When included as a top-level member of an OAuth token introspection | structure. When included as a top-level member of an OAuth token | |||
response, "cnf" has the same semantics and format as the claim of the | introspection response, "cnf" has the same semantics and format as | |||
same name defined in [RFC7800]. While this specification only | the claim of the same name defined in [RFC7800]. While this | |||
explicitly uses the "x5t#S256" confirmation method member (see | specification only explicitly uses the "x5t#S256" confirmation method | |||
Section 3.2), it needs to define and register the higher level "cnf" | member (see Section 3.2), it needs to define and register the higher- | |||
structure as an introspection response member in order to define and | level "cnf" structure as an introspection response member in order to | |||
use the more specific certificate thumbprint confirmation method. | define and use the more specific certificate thumbprint confirmation | |||
method. | ||||
As such, this specification requests registration of the following | As such, the following values have been registered in the IANA "OAuth | |||
value in the IANA "OAuth Token Introspection Response" registry | Token Introspection Response" registry [IANA.OAuth.Parameters] | |||
[IANA.OAuth.Parameters] established by [RFC7662]. | established by [RFC7662]. | |||
o Claim Name: "cnf" | Claim Name: "cnf" | |||
o Claim Description: Confirmation | Claim Description: Confirmation | |||
o Change Controller: IESG | Change Controller: IESG | |||
o Specification Document(s): [RFC7800] and [[ this specification ]] | Specification Document(s): [RFC7800] and RFC 8705 | |||
9.5. Dynamic Client Registration Metadata Registration | 9.5. Dynamic Client Registration Metadata Registration | |||
This specification requests registration of the following client | Per this specification, the following client metadata definitions | |||
metadata definitions in the IANA "OAuth Dynamic Client Registration | have been registered in the IANA "OAuth Dynamic Client Registration | |||
Metadata" registry [IANA.OAuth.Parameters] established by [RFC7591]: | Metadata" registry [IANA.OAuth.Parameters] established by [RFC7591]: | |||
o Client Metadata Name: "tls_client_certificate_bound_access_tokens" | Client Metadata Name: "tls_client_certificate_bound_access_tokens" | |||
o Client Metadata Description: Indicates the client's intention to | Client Metadata Description: Indicates the client's intention to use | |||
use mutual-TLS client certificate-bound access tokens. | mutual-TLS client certificate-bound access tokens. | |||
o Change Controller: IESG | Change Controller: IESG | |||
o Specification Document(s): Section 3.4 of [[ this specification ]] | Specification Document(s): Section 3.4 of RFC 8705 | |||
o Client Metadata Name: "tls_client_auth_subject_dn" | Client Metadata Name: "tls_client_auth_subject_dn" | |||
o Client Metadata Description: String value specifying the expected | Client Metadata Description: String value specifying the expected | |||
subject DN of the client certificate. | subject DN of the client certificate. | |||
o Change Controller: IESG | Change Controller: IESG | |||
o Specification Document(s): Section 2.1.2 of [[ this specification | Specification Document(s): Section 2.1.2 of RFC 8705 | |||
]] | ||||
o Client Metadata Name: "tls_client_auth_san_dns" | Client Metadata Name: "tls_client_auth_san_dns" | |||
o Client Metadata Description: String value specifying the expected | Client Metadata Description: String value specifying the expected | |||
dNSName SAN entry in the client certificate. | dNSName SAN entry in the client certificate. | |||
o Change Controller: IESG | Change Controller: IESG | |||
o Specification Document(s): Section 2.1.2 of [[ this specification | Specification Document(s): Section 2.1.2 of RFC 8705 | |||
]] | ||||
o Client Metadata Name: "tls_client_auth_san_uri" | Client Metadata Name: "tls_client_auth_san_uri" | |||
o Client Metadata Description: String value specifying the expected | Client Metadata Description: String value specifying the expected | |||
uniformResourceIdentifier SAN entry in the client certificate. | uniformResourceIdentifier SAN entry in the client certificate. | |||
o Change Controller: IESG | Change Controller: IESG | |||
o Specification Document(s): Section 2.1.2 of [[ this specification | Specification Document(s): Section 2.1.2 of RFC 8705 | |||
]] | ||||
o Client Metadata Name: "tls_client_auth_san_ip" | Client Metadata Name: "tls_client_auth_san_ip" | |||
o Client Metadata Description: String value specifying the expected | Client Metadata Description: String value specifying the expected | |||
iPAddress SAN entry in the client certificate. | iPAddress SAN entry in the client certificate. | |||
o Change Controller: IESG | Change Controller: IESG | |||
o Specification Document(s): Section 2.1.2 of [[ this specification | Specification Document(s): Section 2.1.2 of RFC 8705 | |||
]] | ||||
o Client Metadata Name: "tls_client_auth_san_email" | Client Metadata Name: "tls_client_auth_san_email" | |||
o Client Metadata Description: String value specifying the expected | Client Metadata Description: String value specifying the expected | |||
rfc822Name SAN entry in the client certificate. | rfc822Name SAN entry in the client certificate. | |||
o Change Controller: IESG | Change Controller: IESG | |||
o Specification Document(s): Section 2.1.2 of [[ this specification | Specification Document(s): Section 2.1.2 of RFC 8705 | |||
]] | ||||
10. References | 10. References | |||
10.1. Normative References | 10.1. Normative References | |||
[BCP195] Sheffer, Y., Holz, R., and P. Saint-Andre, | [BCP195] Sheffer, Y., Holz, R., and P. Saint-Andre, | |||
"Recommendations for Secure Use of Transport Layer | "Recommendations for Secure Use of Transport Layer | |||
Security (TLS) and Datagram Transport Layer Security | Security (TLS) and Datagram Transport Layer Security | |||
(DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May | (DTLS)", BCP 195, RFC 7525, May 2015, | |||
2015, <http://www.rfc-editor.org/info/bcp195>. | <https://www.rfc-editor.org/info/bcp195>. | |||
[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>. | |||
[RFC4514] Zeilenga, K., Ed., "Lightweight Directory Access Protocol | [RFC4514] Zeilenga, K., Ed., "Lightweight Directory Access Protocol | |||
(LDAP): String Representation of Distinguished Names", | (LDAP): String Representation of Distinguished Names", | |||
RFC 4514, DOI 10.17487/RFC4514, June 2006, | RFC 4514, DOI 10.17487/RFC4514, June 2006, | |||
<https://www.rfc-editor.org/info/rfc4514>. | <https://www.rfc-editor.org/info/rfc4514>. | |||
skipping to change at page 23, line 40 ¶ | skipping to change at line 1032 ¶ | |||
[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>. | |||
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
<https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
[SHS] National Institute of Standards and Technology, "Secure | [SHS] National Institute of Standards and Technology (NIST), | |||
Hash Standard (SHS)", FIPS PUB 180-4, March 2012, | "Secure Hash Standard (SHS)", FIPS PUB 180-4, | |||
<http://csrc.nist.gov/publications/fips/fips180-4/ | DOI 10.6028/NIST.FIPS.180-4, August 2015, | |||
fips-180-4.pdf>. | <https://nvlpubs.nist.gov/nistpubs/FIPS/ | |||
NIST.FIPS.180-4.pdf>. | ||||
[X690] International Telephone and Telegraph Consultative | [X690] ITU-T, "Information Technology - ASN.1 encoding rules: | |||
Committee, "ASN.1 encoding rules: Specification of basic | Specification of Basic Encoding Rules (BER), Canonical | |||
encoding Rules (BER), Canonical encoding rules (CER) and | Encoding Rules (CER) and Distinguished Encoding Rules | |||
Distinguished encoding rules (DER)", CCITT Recommendation | (DER)", ITU-T Recommendation X.690, August 2015. | |||
X.690, July 2015. | ||||
10.2. Informative References | 10.2. Informative References | |||
[CX5P] Wong, D., "Common x509 certificate validation/creation | [CX5P] Wong, D., "Common x509 certificate validation/creation | |||
pitfalls", September 2016, | pitfalls", September 2016, | |||
<https://www.cryptologie.net/article/374/ | <https://www.cryptologie.net/article/374/common-x509- | |||
common-x509-certificate-validationcreation-pitfalls>. | certificate-validationcreation-pitfalls>. | |||
[DCW] Georgiev, M., Iyengar, S., Jana, S., Anubhai, R., Boneh, | [DCW] Georgiev, M., Iyengar, S., Jana, S., Anubhai, R., Boneh, | |||
D., and V. Shmatikov, "The Most Dangerous Code in the | D., and V. Shmatikov, "The Most Dangerous Code in the | |||
World: Validating SSL Certificates in Non-Browser | World: Validating SSL Certificates in Non-Browser | |||
Software", | Software", DOI 10.1145/2382196.2382204, October 2012, | |||
<http://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf>. | <http://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf>. | |||
[I-D.ietf-oauth-token-binding] | ||||
Jones, M., Campbell, B., Bradley, J., and W. Denniss, | ||||
"OAuth 2.0 Token Binding", draft-ietf-oauth-token- | ||||
binding-06 (work in progress), March 2018. | ||||
[IANA.JWT.Claims] | [IANA.JWT.Claims] | |||
IANA, "JSON Web Token Claims", | IANA, "JSON Web Token Claims", | |||
<http://www.iana.org/assignments/jwt>. | <https://www.iana.org/assignments/jwt>. | |||
[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.CIBA] | [OpenID.CIBA] | |||
Fernandez, G., Walter, F., Nennker, A., Tonge, D., and B. | Fernandez, G., Walter, F., Nennker, A., Tonge, D., and B. | |||
Campbell, "OpenID Connect Client Initiated Backchannel | Campbell, "OpenID Connect Client Initiated Backchannel | |||
Authentication Flow - Core 1.0", January 2019, | Authentication Flow - Core 1.0", 16 January 2019, | |||
<https://openid.net/specs/openid-client-initiated- | <https://openid.net/specs/openid-client-initiated- | |||
backchannel-authentication-core-1_0.html>. | backchannel-authentication-core-1_0.html>. | |||
[RFC4517] Legg, S., Ed., "Lightweight Directory Access Protocol | [RFC4517] Legg, S., Ed., "Lightweight Directory Access Protocol | |||
(LDAP): Syntaxes and Matching Rules", RFC 4517, | (LDAP): Syntaxes and Matching Rules", RFC 4517, | |||
DOI 10.17487/RFC4517, June 2006, | DOI 10.17487/RFC4517, June 2006, | |||
<https://www.rfc-editor.org/info/rfc4517>. | <https://www.rfc-editor.org/info/rfc4517>. | |||
[RFC5952] Kawamura, S. and M. Kawashima, "A Recommendation for IPv6 | [RFC5952] Kawamura, S. and M. Kawashima, "A Recommendation for IPv6 | |||
Address Text Representation", RFC 5952, | Address Text Representation", RFC 5952, | |||
skipping to change at page 25, line 13 ¶ | skipping to change at line 1094 ¶ | |||
<https://www.rfc-editor.org/info/rfc6066>. | <https://www.rfc-editor.org/info/rfc6066>. | |||
[RFC7009] Lodderstedt, T., Ed., Dronia, S., and M. Scurtescu, "OAuth | [RFC7009] Lodderstedt, T., Ed., Dronia, S., and M. Scurtescu, "OAuth | |||
2.0 Token Revocation", RFC 7009, DOI 10.17487/RFC7009, | 2.0 Token Revocation", RFC 7009, DOI 10.17487/RFC7009, | |||
August 2013, <https://www.rfc-editor.org/info/rfc7009>. | August 2013, <https://www.rfc-editor.org/info/rfc7009>. | |||
[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>. | |||
Appendix A. Example "cnf" Claim, Certificate and JWK | [TOKEN] Jones, M., Campbell, B., Bradley, J., and W. Denniss, | |||
"OAuth 2.0 Token Binding", Work in Progress, Internet- | ||||
Draft, draft-ietf-oauth-token-binding-08, 19 October 2018, | ||||
<https://tools.ietf.org/html/draft-ietf-oauth-token- | ||||
binding-08>. | ||||
For reference, an "x5t#S256" value and the X.509 Certificate from | Appendix A. Example "cnf" Claim, Certificate, and JWK | |||
For reference, an "x5t#S256" value and the X.509 certificate from | ||||
which it was calculated are provided in the following examples, | which it was calculated are provided in the following examples, | |||
Figure 5 and Figure 6 respectively. A JWK representation of the | Figures 5 and 6, respectively. A JWK representation of the | |||
certificate's public key along with the "x5c" member is also provided | certificate's public key along with the "x5c" member is also provided | |||
in Figure 7. | in Figure 7. | |||
"cnf":{"x5t#S256":"A4DtL2JmUMhAsvJj5tKyn64SqzmuXbMrJa0n761y5v0"} | "cnf":{"x5t#S256":"A4DtL2JmUMhAsvJj5tKyn64SqzmuXbMrJa0n761y5v0"} | |||
Figure 5: x5t#S256 Confirmation Claim | Figure 5: x5t#S256 Confirmation Claim | |||
-----BEGIN CERTIFICATE----- | -----BEGIN CERTIFICATE----- | |||
MIIBBjCBrAIBAjAKBggqhkjOPQQDAjAPMQ0wCwYDVQQDDARtdGxzMB4XDTE4MTAx | MIIBBjCBrAIBAjAKBggqhkjOPQQDAjAPMQ0wCwYDVQQDDARtdGxzMB4XDTE4MTAx | |||
ODEyMzcwOVoXDTIyMDUwMjEyMzcwOVowDzENMAsGA1UEAwwEbXRsczBZMBMGByqG | ODEyMzcwOVoXDTIyMDUwMjEyMzcwOVowDzENMAsGA1UEAwwEbXRsczBZMBMGByqG | |||
skipping to change at page 25, line 51 ¶ | skipping to change at line 1138 ¶ | |||
"x5c":[ | "x5c":[ | |||
"MIIBBjCBrAIBAjAKBggqhkjOPQQDAjAPMQ0wCwYDVQQDDARtdGxzMB4XDTE4MTA | "MIIBBjCBrAIBAjAKBggqhkjOPQQDAjAPMQ0wCwYDVQQDDARtdGxzMB4XDTE4MTA | |||
xODEyMzcwOVoXDTIyMDUwMjEyMzcwOVowDzENMAsGA1UEAwwEbXRsczBZMBMGBy | xODEyMzcwOVoXDTIyMDUwMjEyMzcwOVowDzENMAsGA1UEAwwEbXRsczBZMBMGBy | |||
qGSM49AgEGCCqGSM49AwEHA0IABNcnyxwqV6hY8QnhxxzFQ03C7HKW9OylMbnQZ | qGSM49AgEGCCqGSM49AwEHA0IABNcnyxwqV6hY8QnhxxzFQ03C7HKW9OylMbnQZ | |||
jjJ/Au08/coZwxS7LfA4vOLS9WuneIXhbGGWvsDSb0tH6IxLm8wCgYIKoZIzj0E | jjJ/Au08/coZwxS7LfA4vOLS9WuneIXhbGGWvsDSb0tH6IxLm8wCgYIKoZIzj0E | |||
AwIDSQAwRgIhAP0RC1E+vwJD/D1AGHGzuri+hlV/PpQEKTWUVeORWz83AiEA5x2 | AwIDSQAwRgIhAP0RC1E+vwJD/D1AGHGzuri+hlV/PpQEKTWUVeORWz83AiEA5x2 | |||
eXZOVbUlJSGQgjwD5vaUaKlLR50Q2DmFfQj1L+SY=" | eXZOVbUlJSGQgjwD5vaUaKlLR50Q2DmFfQj1L+SY=" | |||
] | ] | |||
} | } | |||
Figure 7: JSON Web Key | Figure 7: JSON Web Key | |||
Appendix B. Relationship to Token Binding | Appendix B. Relationship to Token Binding | |||
OAuth 2.0 Token Binding [I-D.ietf-oauth-token-binding] enables the | OAuth 2.0 Token Binding [TOKEN] enables the application of Token | |||
application of Token Binding to the various artifacts and tokens | Binding to the various artifacts and tokens employed throughout | |||
employed throughout OAuth. That includes binding of an access token | OAuth. That includes binding of an access token to a Token Binding | |||
to a Token Binding key, which bears some similarities in motivation | key, which bears some similarities in motivation and design to the | |||
and design to the mutual-TLS client certificate-bound access tokens | mutual-TLS client certificate-bound access tokens defined in this | |||
defined in this document. Both documents define what is often called | document. Both documents define what is often called a proof-of- | |||
a proof-of-possession security mechanism for access tokens, whereby a | possession security mechanism for access tokens, whereby a client | |||
client must demonstrate possession of cryptographic keying material | must demonstrate possession of cryptographic keying material when | |||
when accessing a protected resource. The details differ somewhat | accessing a protected resource. The details differ somewhat between | |||
between the two documents but both have the authorization server bind | the two documents but both have the authorization server bind the | |||
the access token that it issues to an asymmetric key pair held by the | access token that it issues to an asymmetric key pair held by the | |||
client. The client then proves possession of the private key from | client. The client then proves possession of the private key from | |||
that pair with respect to the TLS connection over which the protected | that pair with respect to the TLS connection over which the protected | |||
resource is accessed. | resource is accessed. | |||
Token Binding uses bare keys that are generated on the client, which | Token Binding uses bare keys that are generated on the client, which | |||
avoids many of the difficulties of creating, distributing, and | avoids many of the difficulties of creating, distributing, and | |||
managing certificates used in this specification. However, at the | managing certificates used in this specification. However, at the | |||
time of writing, Token Binding is fairly new and there is relatively | time of writing, Token Binding is fairly new, and there is relatively | |||
little support for it in available application development platforms | little support for it in available application development platforms | |||
and tooling. Until better support for the underlying core Token | and tooling. Until better support for the underlying core Token | |||
Binding specifications exists, practical implementations of OAuth 2.0 | Binding specifications exists, practical implementations of OAuth 2.0 | |||
Token Binding are infeasible. Mutual TLS, on the other hand, has | Token Binding are infeasible. Mutual TLS, on the other hand, has | |||
been around for some time and enjoys widespread support in web | been around for some time and enjoys widespread support in web | |||
servers and development platforms. As a consequence, OAuth 2.0 | servers and development platforms. As a consequence, OAuth 2.0 | |||
Mutual-TLS Client Authentication and Certificate-Bound Access Tokens | Mutual-TLS Client Authentication and Certificate-Bound Access Tokens | |||
can be built and deployed now using existing platforms and tools. In | can be built and deployed now using existing platforms and tools. In | |||
the future, the two specifications are likely to be deployed in | the future, the two specifications are likely to be deployed in | |||
parallel for solving similar problems in different environments. | parallel for solving similar problems in different environments. | |||
Authorization servers may even support both specifications | Authorization servers may even support both specifications | |||
simultaneously using different proof-of-possession mechanisms for | simultaneously using different proof-of-possession mechanisms for | |||
tokens issued to different clients. | tokens issued to different clients. | |||
Appendix C. Acknowledgements | Acknowledgements | |||
Scott "not Tomlinson" Tomilson and Matt Peterson were involved in | Scott "not Tomlinson" Tomilson and Matt Peterson were involved in | |||
design and development work on a mutual-TLS OAuth client | design and development work on a mutual-TLS OAuth client | |||
authentication implementation, which predates this document. | authentication implementation that predates this document. | |||
Experience and learning from that work informed some of the content | Experience and learning from that work informed some of the content | |||
of this document. | of this document. | |||
This specification was developed within the OAuth Working Group under | This specification was developed within the OAuth Working Group under | |||
the chairmanship of Hannes Tschofenig and Rifaat Shekh-Yusef with | the chairmanship of Hannes Tschofenig and Rifaat Shekh-Yusef with | |||
Eric Rescorla, Benjamin Kaduk, and Roman Danyliw serving as Security | Eric Rescorla, Benjamin Kaduk, and Roman Danyliw serving as Security | |||
Area Directors. Additionally, the following individuals contributed | Area Directors. Additionally, the following individuals contributed | |||
ideas, feedback, and wording that helped shape this specification: | ideas, feedback, and wording that helped shape this specification: | |||
Vittorio Bertocci, Sergey Beryozkin, Ralph Bragg, Sophie Bremer, | Vittorio Bertocci, Sergey Beryozkin, Ralph Bragg, Sophie Bremer, | |||
Roman Danyliw, Vladimir Dzhuvinov, Samuel Erdtman, Evan Gilman, Leif | Roman Danyliw, Vladimir Dzhuvinov, Samuel Erdtman, Evan Gilman, Leif | |||
Johansson, Michael Jones, Phil Hunt, Benjamin Kaduk, Takahiko | Johansson, Michael Jones, Phil Hunt, Benjamin Kaduk, Takahiko | |||
Kawasaki, Sean Leonard, Kepeng Li, Neil Madden, James Manger, Jim | Kawasaki, Sean Leonard, Kepeng Li, Neil Madden, James Manger, Jim | |||
Manico, Nov Matake, Sascha Preibisch, Eric Rescorla, Justin Richer, | Manico, Nov Matake, Sascha Preibisch, Eric Rescorla, Justin Richer, | |||
Vincent Roca, Filip Skokan, Dave Tonge, and Hannes Tschofenig. | Vincent Roca, Filip Skokan, Dave Tonge, and Hannes Tschofenig. | |||
Appendix D. Document(s) History | ||||
[[ to be removed by the RFC Editor before publication as an RFC ]] | ||||
draft-ietf-oauth-mtls-17 | ||||
o Updates from IESG ballot position comments. | ||||
draft-ietf-oauth-mtls-16 | ||||
o Editorial updates from last call review. | ||||
draft-ietf-oauth-mtls-15 | ||||
o Editorial updates from second AD review. | ||||
draft-ietf-oauth-mtls-14 | ||||
o Editorial clarifications around there being only a single subject | ||||
registered/configured per client for the tls_client_auth method. | ||||
o Add a brief explanation about how, with tls_client_auth and | ||||
self_signed_tls_client_auth, refresh tokens are certificate-bound | ||||
indirectly via the client authentication. | ||||
o Add mention of refresh tokens in the abstract. | ||||
draft-ietf-oauth-mtls-13 | ||||
o Add an abstract protocol flow and diagram to serve as an overview | ||||
of OAuth in general and baseline to describe the various ways in | ||||
which the mechanisms defined herein are intended to be used. | ||||
o A little bit less of that German influence. | ||||
o Rework the TLS references a bit and, in the Terminology section, | ||||
clean up the description of what messages are sent and verified in | ||||
the handshake to do 'mutual TLS'. | ||||
o Move the explanation about "cnf" introspection registration into | ||||
the IANA Considerations. | ||||
o Add CIBA as an informational reference and additional example of | ||||
an OAuth extension that defines an endpoint that utilizes client | ||||
authentication. | ||||
o Shorten a few of the section titles. | ||||
o Add new client metadata values to allow for the use of a SAN in | ||||
the PKI MTLS client authentication method. | ||||
o Add privacy considerations attempting to discuss the implications | ||||
of the client cert being sent in the clear in TLS 1.2. | ||||
o Changed the 'Certificate Bound Access Tokens Without Client | ||||
Authentication' section to 'Public Clients and Certificate-Bound | ||||
Tokens' and moved it up to be a top level section while adding | ||||
discussion of binding refresh tokens for public clients. | ||||
o Reword/restructure the main PKI method section somewhat to | ||||
(hopefully) improve readability. | ||||
o Reword/restructure the Self-Signed method section a bit to | ||||
(hopefully) make it more comprehensible. | ||||
o Reword the AS and RS Implementation Considerations somewhat to | ||||
(hopefully) improve readability. | ||||
o Clarify that the protected resource obtains the client certificate | ||||
used for mutual TLS from its TLS implementation layer. | ||||
o Add Security Considerations section about the certificate | ||||
thumbprint binding that includes the hash algorithm agility | ||||
recommendation. | ||||
o Add an "mtls_endpoint_aliases" AS metadata parameter that is a | ||||
JSON object containing alternative authorization server endpoints, | ||||
which a client intending to do mutual TLS will use in preference | ||||
to the conventional endpoints. | ||||
o Minor editorial updates. | ||||
draft-ietf-oauth-mtls-12 | ||||
o Add an example certificate, JWK, and confirmation method claim. | ||||
o Minor editorial updates based on implementer feedback. | ||||
o Additional Acknowledgements. | ||||
draft-ietf-oauth-mtls-11 | ||||
o Editorial updates. | ||||
o Mention/reference TLS 1.3 RFC8446 in the TLS Versions and Best | ||||
Practices section. | ||||
draft-ietf-oauth-mtls-10 | ||||
o Update draft-ietf-oauth-discovery reference to RFC8414 | ||||
draft-ietf-oauth-mtls-09 | ||||
o Change "single certificates" to "self-signed certificates" in the | ||||
Abstract | ||||
draft-ietf-oauth-mtls-08 | ||||
o Incorporate clarifications and editorial improvements from Justin | ||||
Richer's WGLC review | ||||
o Drop the use of the "sender constrained" terminology per WGLC | ||||
feedback from Neil Madden (including changing the metadata | ||||
parameters from mutual_tls_sender_constrained_access_tokens to | ||||
tls_client_certificate_bound_access_tokens) | ||||
o Add a new security considerations section on X.509 parsing and | ||||
validation per WGLC feedback from Neil Madden and Benjamin Kaduk | ||||
o Note that a server can terminate TLS at a load balancer, reverse | ||||
proxy, etc. but how the client certificate metadata is securely | ||||
communicated to the backend is out of scope per WGLC feedback | ||||
o Note that revocation checking is at the discretion of the AS per | ||||
WGLC feedback | ||||
o Editorial updates and clarifications | ||||
o Update draft-ietf-oauth-discovery reference to -10 and draft-ietf- | ||||
oauth-token-binding to -06 | ||||
o Add folks involved in WGLC feedback to the acknowledgements list | ||||
draft-ietf-oauth-mtls-07 | ||||
o Update to use the boilerplate from RFC 8174 | ||||
draft-ietf-oauth-mtls-06 | ||||
o Add an appendix section describing the relationship of this | ||||
document to OAuth Token Binding as requested during the Singapore | ||||
meeting https://datatracker.ietf.org/doc/minutes-100-oauth/ | ||||
o Add an explicit note that the implicit flow is not supported for | ||||
obtaining certificate bound access tokens as discussed at the | ||||
Singapore meeting https://datatracker.ietf.org/doc/minutes- | ||||
100-oauth/ | ||||
o Add/incorporate text to the Security Considerations on Certificate | ||||
Spoofing as suggested https://mailarchive.ietf.org/arch/msg/oauth/ | ||||
V26070X-6OtbVSeUz_7W2k94vCo | ||||
o Changed the title to be more descriptive | ||||
o Move the Security Considerations section to before the IANA | ||||
Considerations | ||||
o Elaborated on certificate-bound access tokens a bit more in the | ||||
Abstract | ||||
o Update draft-ietf-oauth-discovery reference to -08 | ||||
draft-ietf-oauth-mtls-05 | ||||
o Editorial fixes | ||||
draft-ietf-oauth-mtls-04 | ||||
o Change the name of the 'Public Key method' to the more accurate | ||||
'Self-Signed Certificate method' and also change the associated | ||||
authentication method metadata value to | ||||
"self_signed_tls_client_auth". | ||||
o Removed the "tls_client_auth_root_dn" client metadata field as | ||||
discussed in https://mailarchive.ietf.org/arch/msg/oauth/ | ||||
swDV2y0be6o8czGKQi1eJV-g8qc | ||||
o Update draft-ietf-oauth-discovery reference to -07 | ||||
o Clarify that MTLS client authentication isn't exclusive to the | ||||
token endpoint and can be used with other endpoints, e.g. RFC | ||||
7009 revocation and 7662 introspection, that utilize client | ||||
authentication as discussed in | ||||
https://mailarchive.ietf.org/arch/msg/oauth/ | ||||
bZ6mft0G7D3ccebhOxnEYUv4puI | ||||
o Reorganize the document somewhat in an attempt to more clearly | ||||
make a distinction between mTLS client authentication and | ||||
certificate-bound access tokens as well as a more clear | ||||
delineation between the two (PKI/Public key) methods for client | ||||
authentication | ||||
o Editorial fixes and clarifications | ||||
draft-ietf-oauth-mtls-03 | ||||
o Introduced metadata and client registration parameter to publish | ||||
and request support for mutual TLS sender constrained access | ||||
tokens | ||||
o Added description of two methods of binding the cert and client, | ||||
PKI and Public Key. | ||||
o Indicated that the "tls_client_auth" authentication method is for | ||||
the PKI method and introduced "pub_key_tls_client_auth" for the | ||||
Public Key method | ||||
o Added implementation considerations, mainly regarding TLS stack | ||||
configuration and trust chain validation, as well as how to to do | ||||
binding of access tokens to a TLS client certificate for public | ||||
clients, and considerations around certificate-bound access tokens | ||||
o Added new section to security considerations on cert spoofing | ||||
o Add text suggesting that a new cnf member be defined in the | ||||
future, if hash function(s) other than SHA-256 need to be used for | ||||
certificate thumbprints | ||||
draft-ietf-oauth-mtls-02 | ||||
o Fixed editorial issue https://mailarchive.ietf.org/arch/msg/oauth/ | ||||
U46UMEh8XIOQnvXY9pHFq1MKPns | ||||
o Changed the title (hopefully "Mutual TLS Profile for OAuth 2.0" is | ||||
better than "Mutual TLS Profiles for OAuth Clients"). | ||||
draft-ietf-oauth-mtls-01 | ||||
o Added more explicit details of using RFC 7662 token introspection | ||||
with mutual TLS sender constrained access tokens. | ||||
o Added an IANA OAuth Token Introspection Response Registration | ||||
request for "cnf". | ||||
o Specify that tls_client_auth_subject_dn and | ||||
tls_client_auth_root_dn are RFC 4514 String Representation of | ||||
Distinguished Names. | ||||
o Changed tls_client_auth_issuer_dn to tls_client_auth_root_dn. | ||||
o Changed the text in the Section 3 to not be specific about using a | ||||
hash of the cert. | ||||
o Changed the abbreviated title to 'OAuth Mutual TLS' (previously | ||||
was the acronym MTLSPOC). | ||||
draft-ietf-oauth-mtls-00 | ||||
o Created the initial working group version from draft-campbell- | ||||
oauth-mtls | ||||
draft-campbell-oauth-mtls-01 | ||||
o Fix some typos. | ||||
o Add to the acknowledgements list. | ||||
draft-campbell-oauth-mtls-00 | ||||
o Add a Mutual TLS sender constrained protected resource access | ||||
method and a x5t#S256 cnf method for JWT access tokens (concepts | ||||
taken in part from draft-sakimura-oauth-jpop-04). | ||||
o Fixed "token_endpoint_auth_methods_supported" to | ||||
"token_endpoint_auth_method" for client metadata. | ||||
o Add "tls_client_auth_subject_dn" and "tls_client_auth_issuer_dn" | ||||
client metadata parameters and mention using "jwks_uri" or "jwks". | ||||
o Say that the authentication method is determined by client policy | ||||
regardless of whether the client was dynamically registered or | ||||
statically configured. | ||||
o Expand acknowledgements to those that participated in discussions | ||||
around draft-campbell-oauth-tls-client-auth-00 | ||||
o Add Nat Sakimura and Torsten Lodderstedt to the author list. | ||||
draft-campbell-oauth-tls-client-auth-00 | ||||
o Initial draft. | ||||
Authors' Addresses | Authors' Addresses | |||
Brian Campbell | Brian Campbell | |||
Ping Identity | Ping Identity | |||
Email: brian.d.campbell@gmail.com | Email: brian.d.campbell@gmail.com | |||
John Bradley | John Bradley | |||
Yubico | Yubico | |||
Email: ve7jtb@ve7jtb.com | Email: ve7jtb@ve7jtb.com | |||
URI: http://www.thread-safe.com/ | URI: http://www.thread-safe.com/ | |||
End of changes. 125 change blocks. | ||||
560 lines changed or deleted | 327 lines changed or added | |||
This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |