rfc8705xml2.original.xml | rfc8705.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="us-ascii"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<?xml-stylesheet type='text/xsl' href='http://xml2rfc.tools.ietf.org/authoring/r | ||||
fc2629.xslt' ?> | ||||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | ||||
<?rfc toc="yes"?> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<?rfc tocompact="yes"?> | ||||
<?rfc tocdepth="4"?> | <rfc number="8705" xmlns:xi="http://www.w3.org/2001/XInclude" category="std" | |||
<?rfc tocindent="yes"?> | consensus="true" docName="draft-ietf-oauth-mtls-17" ipr="trust200902" obsol | |||
<?rfc symrefs="yes"?> | etes="" | |||
<?rfc sortrefs="yes"?> | updates="" submissionType="IETF" xml:lang="en" tocInclude="true" | |||
<?rfc comments="yes"?> | symRefs="true" sortRefs="true" version="3"> | |||
<?rfc inline="yes"?> | ||||
<?rfc compact="yes"?> | <!-- xml2rfc v2v3 conversion 2.32.0 --> | |||
<?rfc subcompact="no"?> | ||||
<rfc category="std" docName="draft-ietf-oauth-mtls-17" ipr="trust200902"> | ||||
<front> | <front> | |||
<title abbrev="OAuth Mutual TLS">OAuth 2.0 Mutual-TLS Client Authentication | <title abbrev="OAuth Mutual TLS">OAuth 2.0 Mutual-TLS Client | |||
and Certificate-Bound Access Tokens</title> | Authentication and Certificate-Bound Access Tokens</title> | |||
<seriesInfo name="RFC" value="8705" /> | ||||
<author fullname="Brian Campbell" initials="B." surname="Campbell"> | <author fullname="Brian Campbell" initials="B." surname="Campbell"> | |||
<organization>Ping Identity</organization> | <organization>Ping Identity</organization> | |||
<address><email>brian.d.campbell@gmail.com</email></address> | <address> | |||
<email>brian.d.campbell@gmail.com</email> | ||||
</address> | ||||
</author> | </author> | |||
<author fullname="John Bradley" initials="J." surname="Bradley"> | <author fullname="John Bradley" initials="J." surname="Bradley"> | |||
<organization>Yubico</organization> | <organization>Yubico</organization> | |||
<address> | <address> | |||
<email>ve7jtb@ve7jtb.com</email> | <email>ve7jtb@ve7jtb.com</email> | |||
<uri>http://www.thread-safe.com/</uri> | <uri>http://www.thread-safe.com/</uri> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Nat Sakimura" initials="N." surname="Sakimura"> | <author fullname="Nat Sakimura" initials="N." surname="Sakimura"> | |||
<organization>Nomura Research Institute</organization> | <organization>Nomura Research Institute</organization> | |||
<address> | <address> | |||
<email>n-sakimura@nri.co.jp</email> | <email>n-sakimura@nri.co.jp</email> | |||
<uri>https://nat.sakimura.org/</uri> | <uri>https://nat.sakimura.org/</uri> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Torsten Lodderstedt" initials="T." surname="Lodderstedt"> | <author fullname="Torsten Lodderstedt" initials="T." surname="Lodderstedt"> | |||
<organization>YES.com AG</organization> | <organization>YES.com AG</organization> | |||
<address> | <address> | |||
<email>torsten@lodderstedt.net</email> | <email>torsten@lodderstedt.net</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date month="February" year="2020" /> | ||||
<date /> | ||||
<area>Security</area> | <area>Security</area> | |||
<workgroup>OAuth Working Group</workgroup> | <workgroup>OAuth Working Group</workgroup> | |||
<keyword>JSON Web Token</keyword> | <keyword>JSON Web Token</keyword> | |||
<keyword>JWT</keyword> | <keyword>JWT</keyword> | |||
<keyword>MTLS</keyword> | <keyword>MTLS</keyword> | |||
<keyword>Mutual TLS</keyword> | <keyword>Mutual TLS</keyword> | |||
<keyword>proof-of-possession</keyword> | <keyword>proof-of-possession</keyword> | |||
<keyword>proof-of-possession access token</keyword> | <keyword>proof-of-possession access token</keyword> | |||
<keyword>key confirmed access token</keyword> | <keyword>key confirmed access token</keyword> | |||
<keyword>certificate-bound access token</keyword> | <keyword>certificate-bound access token</keyword> | |||
<keyword>client certificate</keyword> | <keyword>client certificate</keyword> | |||
<keyword>X.509 Client Certificate Authentication</keyword> | <keyword>X.509 Client Certificate Authentication</keyword> | |||
skipping to change at line 67 ¶ | skipping to change at line 61 ¶ | |||
<keyword>proof-of-possession</keyword> | <keyword>proof-of-possession</keyword> | |||
<keyword>proof-of-possession access token</keyword> | <keyword>proof-of-possession access token</keyword> | |||
<keyword>key confirmed access token</keyword> | <keyword>key confirmed access token</keyword> | |||
<keyword>certificate-bound access token</keyword> | <keyword>certificate-bound access token</keyword> | |||
<keyword>client certificate</keyword> | <keyword>client certificate</keyword> | |||
<keyword>X.509 Client Certificate Authentication</keyword> | <keyword>X.509 Client Certificate Authentication</keyword> | |||
<keyword>key confirmation</keyword> | <keyword>key confirmation</keyword> | |||
<keyword>confirmation method</keyword> | <keyword>confirmation method</keyword> | |||
<keyword>holder-of-key</keyword> | <keyword>holder-of-key</keyword> | |||
<keyword>OAuth</keyword> | <keyword>OAuth</keyword> | |||
<abstract> | <abstract> | |||
<t> | <t> | |||
This document describes OAuth client authentication and certificate-bound acce | This document describes OAuth client authentication and certificate-bound | |||
ss and refresh tokens using | access and refresh tokens using mutual Transport Layer Security (TLS) | |||
mutual Transport Layer Security (TLS) authentication with X.509 certificates. | authentication with X.509 certificates. OAuth clients are provided a | |||
OAuth clients are provided a mechanism for authentication to the authorization | mechanism for authentication to the authorization server using mutual TLS, | |||
server using mutual TLS, based on either self-signed certificates or public ke | based on either self-signed certificates or public key infrastructure (PKI). | |||
y infrastructure (PKI). | OAuth authorization servers are provided a mechanism for binding access | |||
OAuth authorization servers are provided a mechanism for binding access tokens | tokens to a client's mutual-TLS certificate, and OAuth protected resources | |||
to a client's | are provided a method for ensuring that such an access token presented to it | |||
mutual-TLS certificate, and OAuth protected resources are provided a method fo | was issued to the client presenting the token. | |||
r ensuring | ||||
that such an access token presented to it was issued to the client presenting | ||||
the token. | ||||
</t> | </t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="Introduction" title="Introduction"> | <section anchor="Introduction" numbered="true" toc="default"> | |||
<t> | <name>Introduction</name> | |||
The OAuth 2.0 Authorization Framework <xref target="RFC6749"/> enables third-p | <t> | |||
arty | The OAuth 2.0 Authorization Framework <xref target="RFC6749" format="default"/ | |||
> enables third-party | ||||
client applications to obtain delegated access to protected resources. | client applications to obtain delegated access to protected resources. | |||
In the prototypical abstract OAuth flow, illustrated in <xref target="protocol -flow-figure"/>, | In the prototypical abstract OAuth flow, illustrated in <xref target="protocol -flow-figure" format="default"/>, | |||
the client obtains an access token from an entity known as an | the client obtains an access token from an entity known as an | |||
authorization server and then uses that token when accessing protected resourc es, | authorization server and then uses that token when accessing protected resourc es, | |||
such as HTTPS APIs. | such as HTTPS APIs. | |||
</t> | </t> | |||
<t> | <figure anchor="protocol-flow-figure"> | |||
<figure title='Abstract OAuth 2.0 Protocol Flow' anchor='protocol-flow-figure' | <name>Abstract OAuth 2.0 Protocol Flow</name> | |||
> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
<artwork><![CDATA[ | ||||
+--------+ +---------------+ | +--------+ +---------------+ | |||
| | | | | | | | | | |||
| |<--(A)-- Get an access token --->| Authorization | | | |<--(A)-- Get an access token --->| Authorization | | |||
| | | Server | | | | | Server | | |||
| | | | | | | | | | |||
| | +---------------+ | | | +---------------+ | |||
| | ^ | | | ^ | |||
| | | | | | | | |||
| | | | | | |||
| | (C) | | | | (C) | | |||
skipping to change at line 118 ¶ | skipping to change at line 112 ¶ | |||
| | | | | | | | |||
| | v | | | v | |||
| | +---------------+ | | | +---------------+ | |||
| | | (C) | | | | | (C) | | |||
| | | | | | | | | | |||
| |<--(B)-- Use the access token -->| Protected | | | |<--(B)-- Use the access token -->| Protected | | |||
| | | Resource | | | | | Resource | | |||
| | | | | | | | | | |||
+--------+ +---------------+ | +--------+ +---------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t> | ||||
The flow illustrated in <xref target="protocol-flow-figure" format="default"/> | ||||
includes the following steps: | ||||
</t> | </t> | |||
<t> | <ol spacing="normal" type="(%C)" indent="5"> | |||
The flow illustrated in <xref target="protocol-flow-figure"/> includes the fol | <li> | |||
lowing steps: | The client makes an HTTPS <tt>POST</tt> request to | |||
<list style='format (%C)'> | ||||
<t> | ||||
The client makes an HTTPS <spanx style='verb'>POST</spanx> request to | ||||
the authorization server and presents | the authorization server and presents | |||
a credential representing the authorization grant. For | a credential representing the authorization grant. For | |||
certain types of clients (those that have been issued or otherwise establi shed | certain types of clients (those that have been issued or otherwise establi shed | |||
a set of client credentials) the request must be authenticated. | a set of client credentials) the request must be authenticated. | |||
In the response, the authorization server issues an access token to the cl ient. | In the response, the authorization server issues an access token to the cl ient. | |||
</t> | </li> | |||
<t> | <li> | |||
The client includes the access token when making a request to access a pro tected resource. | The client includes the access token when making a request to access a pro tected resource. | |||
</t> | </li> | |||
<t> | <li> | |||
The protected resource validates the access token in order to authorize th e request. | The protected resource validates the access token in order to authorize th e request. | |||
In some cases, such as when the token is self-contained and cryptographica lly secured, | In some cases, such as when the token is self-contained and cryptographica lly secured, | |||
the validation can be done locally by the protected resource. Other cases require | the validation can be done locally by the protected resource. Other cases require | |||
that the protected resource call out to the authorization server to determ ine the state | that the protected resource call out to the authorization server to determ ine the state | |||
of the token and obtain meta-information about it. | of the token and obtain metainformation about it. | |||
</t> | </li> | |||
</list> | </ol> | |||
</t> | <t> | |||
<t> | Layering on the abstract flow above, this document standardizes enhanced | |||
Layering on the abstract flow above, | security options for OAuth 2.0 utilizing client-certificate-based mutual | |||
this document standardizes enhanced security options for OAuth 2.0 utilizing c | TLS. <xref target="mtlsca" format="default"/> provides options for | |||
lient-certificate-based mutual TLS. | authenticating the request in Step | |||
<xref target="mtlsca"/> provides options for authenticating the request in ste | (A). Step (C) is supported with semantics | |||
p (A). Step (C) is supported | to express the binding of the token to the client certificate for both local | |||
with semantics to express the binding of the token to the client certificate f | and remote processing in Sections <xref target="x5t" format="counter"/> and | |||
or both local and remote processing | <xref target="introspect" format="counter"/>, respectively. This ensures | |||
in <xref target="x5t"/> and <xref target="introspect"/> respectively. This ens | that, as described in <xref target="CertificateBoundAccessTokens" | |||
ures that, as | format="default"/>, protected resource access in Step | |||
described in <xref target="CertificateBoundAccessTokens"/>, protected resource | (B) is only possible by the legitimate client using a | |||
access in step (B) is only possible by the legitimate client using a certifica | certificate-bound token and holding the private key corresponding to the | |||
te-bound token and | certificate. | |||
holding the private key corresponding to the certificate. | ||||
</t> | </t> | |||
<t> | <t> | |||
OAuth 2.0 | OAuth 2.0 | |||
defines a shared-secret method of client authentication but also | defines a shared-secret method of client authentication but also | |||
allows for definition and use of additional client authentication mechanisms | allows for defining and using additional client authentication mechanisms | |||
when interacting directly with the authorization server. | when interacting directly with the authorization server. | |||
This document describes an additional mechanism of client authentication utili zing | This document describes an additional mechanism of client authentication utili zing | |||
mutual-TLS certificate-based authentication, which provides | mutual-TLS certificate-based authentication that provides | |||
better security characteristics than shared secrets. | better security characteristics than shared secrets. | |||
While <xref target="RFC6749"/> documents client authentication for requests to | While <xref target="RFC6749" format="default"/> documents client authenticatio | |||
the token endpoint, | n for requests to the token endpoint, | |||
extensions to OAuth 2.0 (such as <xref target="RFC7662">Introspection</xref>, | extensions to OAuth 2.0 (such as Introspection <xref target="RFC7662" format=" | |||
<xref target="RFC7009">Revocation</xref>, and the Backchannel Authentication E | default"></xref>, | |||
ndpoint | Revocation <xref target="RFC7009" format="default"></xref>, and the Backchanne | |||
in <xref target="OpenID.CIBA"/>) define endpoints that also utilize client aut | l Authentication Endpoint | |||
hentication | in <xref target="OpenID.CIBA" format="default"/>) define endpoints that also u | |||
and the mutual TLS methods defined herein are applicable to those endpoints as | tilize client authentication, | |||
well. | and the mutual-TLS methods defined herein are applicable to those endpoints as | |||
well. | ||||
</t> | </t> | |||
<t> | ||||
<t> | ||||
Mutual-TLS certificate-bound access tokens ensure that | Mutual-TLS certificate-bound access tokens ensure that | |||
only the party in possession of the | only the party in possession of the | |||
private key corresponding to the certificate can utilize the token to | private key corresponding to the certificate can utilize the token to | |||
access the associated resources. Such a constraint is | access the associated resources. Such a constraint is | |||
sometimes referred to as key confirmation, proof-of-possession, or holder-of-k ey | sometimes referred to as key confirmation, proof-of-possession, or holder-of-k ey | |||
and is unlike the case of the | and is unlike the case of the | |||
bearer token described in <xref target="RFC6750"/>, where any party in | bearer token described in <xref target="RFC6750" format="default"/>, where any party in | |||
possession of the access token can use it to access the associated resources. | possession of the access token can use it to access the associated resources. | |||
Binding an access token to the client's certificate | Binding an access token to the client's certificate | |||
prevents the use of stolen access tokens or replay of access tokens | prevents the use of stolen access tokens or replay of access tokens | |||
by unauthorized parties. | by unauthorized parties. | |||
</t> | </t> | |||
<t> | <t> | |||
Mutual-TLS certificate-bound access tokens and mutual-TLS client authenticatio n | Mutual-TLS certificate-bound access tokens and mutual-TLS client authenticatio n | |||
are distinct mechanisms, which are complementary but don't necessarily need to be deployed or used together. | are distinct mechanisms that are complementary but don't necessarily need to b e deployed or used together. | |||
</t> | </t> | |||
<t> | <t> | |||
Additional client metadata parameters are introduced by this document in suppo rt of | Additional client metadata parameters are introduced by this document in suppo rt of | |||
certificate-bound access tokens and mutual-TLS client authentication. | certificate-bound access tokens and mutual-TLS client authentication. | |||
The authorization server can obtain client metadata via the | The authorization server can obtain client metadata via the | |||
<xref target="RFC7591">Dynamic Client Registration Protocol</xref>, | Dynamic Client Registration Protocol <xref target="RFC7591" | |||
which defines mechanisms for dynamically registering | format="default"></xref>, which defines mechanisms for dynamically registering | |||
OAuth 2.0 client metadata with authorization servers. | OAuth 2.0 client metadata with authorization servers. | |||
Also the metadata defined by RFC7591, and registered extensions to | Also the metadata defined by <xref target="RFC7591" format="default"></xref>, and registered extensions to | |||
it, imply a general data model for clients that is useful for | it, imply a general data model for clients that is useful for | |||
authorization server implementations even when the Dynamic Client | authorization server implementations, even when the Dynamic Client | |||
Registration Protocol isn't in play. Such implementations will typically have | Registration Protocol isn't in play. Such implementations will typically have | |||
some sort of user interface available for managing client configuration. | some sort of user interface available for managing client configuration. | |||
</t> | </t> | |||
<section anchor="RNC" title="Requirements Notation and Conventions"> | <section anchor="RNC" numbered="true" toc="default"> | |||
<t> | <name>Requirements Notation and Conventions</name> | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL | ||||
" | ||||
in this document are to be interpreted as described in | ||||
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
</section> | ||||
<section anchor="Terminology" title="Terminology"> | <t> | |||
<t> | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | ||||
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | ||||
RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | ||||
be interpreted as | ||||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
</section> | ||||
<section anchor="Terminology" numbered="true" toc="default"> | ||||
<name>Terminology</name> | ||||
<t> | ||||
Throughout this document the term "mutual TLS" refers to the process whereby, in addition to the normal TLS | Throughout this document the term "mutual TLS" refers to the process whereby, in addition to the normal TLS | |||
server authentication with a certificate, a client presents its X.509 certific ate | server authentication with a certificate, a client presents its X.509 certific ate | |||
and proves possession of the corresponding private key to a server when negoti ating a TLS session. | and proves possession of the corresponding private key to a server when negoti ating a TLS session. | |||
In contemporary versions of TLS <xref target="RFC8446"/> <xref target="RFC5246 "/> this requires that the client send | In contemporary versions of TLS <xref target="RFC5246" format="default"/> <xre f target="RFC8446" format="default"/>, this requires that the client send | |||
the Certificate and CertificateVerify messages during the handshake and | the Certificate and CertificateVerify messages during the handshake and | |||
for the server to verify the CertificateVerify and Finished messages. | for the server to verify the CertificateVerify and Finished messages. | |||
</t> | </t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="mtlsca" numbered="true" toc="default"> | ||||
</section> | <name>Mutual TLS for OAuth Client Authentication</name> | |||
<section anchor="mtlsca" title="Mutual TLS for OAuth Client Authentication"> | <t> | |||
<t> | ||||
This section defines, as an extension of | This section defines, as an extension of | |||
<xref target="RFC6749">OAuth 2.0, Section 2.3</xref>, two distinct methods of using | <xref target="RFC6749" sectionFormat="of" section="2.3">OAuth 2.0</xref>, two distinct methods of using | |||
mutual-TLS X.509 client certificates as client credentials. | mutual-TLS X.509 client certificates as client credentials. | |||
The requirement of mutual TLS for client authentication is determined by the a | ||||
The requirement of mutual TLS for client authentication is determined by the a | uthorization server, | |||
uthorization server | ||||
based on policy or configuration for the given client (regardless of whether t he client was dynamically | based on policy or configuration for the given client (regardless of whether t he client was dynamically | |||
registered, statically configured, or otherwise established). | registered, statically configured, or otherwise established). | |||
</t> | </t> | |||
<t> | <t> | |||
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 been esta blished or reestablished | connection between the client and the authorization server <bcp14>MUST</bcp14> have been established or re-established | |||
with mutual-TLS X.509 certificate authentication | with mutual-TLS X.509 certificate authentication | |||
(i.e. the Client Certificate and Certificate Verify messages are sent during t | (i.e., the client Certificate and CertificateVerify messages are sent during | |||
he TLS Handshake). | the TLS handshake). | |||
</t> | ||||
<t> | ||||
For all requests to the authorization server utilizing mutual-TLS client authe | ||||
ntication, | ||||
the client MUST include the <spanx style='verb'>client_id</spanx> parameter, | ||||
described in <xref target="RFC6749">OAuth 2.0, Section 2.2</xref>. | ||||
The presence of the <spanx style='verb'>client_id</spanx> | ||||
parameter enables the authorization server to easily identify the | ||||
client independently from the content of the certificate. The authorization se | ||||
rver | ||||
can locate the client configuration using the client identifier and check the | ||||
certificate | ||||
presented in the TLS Handshake against the expected credentials for that clien | ||||
t. | ||||
The authorization server MUST enforce the | ||||
binding between client and certificate as described in either <xref target="pk | ||||
i_method"/> or | ||||
<xref target="self_signed_method"/> below. | ||||
If no certificate is presented or that which is presented doesn't match that w | ||||
hich is expected for the given <spanx style='verb'>client_id</spanx>, | ||||
the authorization server returns a normal OAuth 2.0 error response per <xref t | ||||
arget="RFC6749"> Section 5.2 of RFC6749</xref> | ||||
with the <spanx style='verb'>invalid_client</spanx> error code to indicate fai | ||||
led client authentication. | ||||
</t> | ||||
<section anchor="pki_method" title="PKI Mutual-TLS Method"> | </t> | |||
<t> | <t> | |||
For all requests to the authorization server utilizing mutual-TLS client | ||||
authentication, the client <bcp14>MUST</bcp14> include the | ||||
<tt>client_id</tt> parameter described in <xref target="RFC6749" | ||||
sectionFormat="of" section="2.2">OAuth 2.0</xref>. The presence of the | ||||
<tt>client_id</tt> parameter enables the authorization server to easily | ||||
identify the client independently from the content of the certificate. The | ||||
authorization server can locate the client configuration using the client | ||||
identifier and check the certificate presented in the TLS handshake against | ||||
the expected credentials for that client. The authorization server | ||||
<bcp14>MUST</bcp14> enforce the binding between client and certificate, as | ||||
described in either Section <xref target="pki_method" format="counter"/> or <x | ||||
ref | ||||
target="self_signed_method" format="counter"/> below. If no certificate is | ||||
presented, or that which is presented doesn't match that which is expected | ||||
for the given <tt>client_id</tt>, the authorization server returns a normal | ||||
OAuth 2.0 error response per <xref target="RFC6749" sectionFormat="of" | ||||
section="5.2"></xref> with the <tt>invalid_client</tt> error code to | ||||
indicate failed client authentication. | ||||
</t> | ||||
<section anchor="pki_method" numbered="true" toc="default"> | ||||
<name>PKI Mutual-TLS Method</name> | ||||
<t> | ||||
The PKI (public key infrastructure) method of mutual-TLS OAuth client au thentication | The PKI (public key infrastructure) method of mutual-TLS OAuth client au thentication | |||
adheres to the way in which X.509 certificates are traditionally used | adheres to the way in which X.509 certificates are traditionally used | |||
for authentication. It relies on a validated certificate chain <xref tar get="RFC5280"/> | for authentication. It relies on a validated certificate chain <xref tar get="RFC5280" format="default"/> | |||
and a single subject distinguished name (DN) or a single | and a single subject distinguished name (DN) or a single | |||
subject alternative name (SAN) to authenticate the client. | 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 possession | The TLS handshake is utilized to validate the client's possession | |||
of the private key corresponding to the public key in the certificate an d to | of the private key corresponding to the public key in the certificate an d to | |||
validate the corresponding certificate chain. The client is successfully authenticated | validate the corresponding certificate chain. The client is successfully authenticated | |||
if the subject information in the certificate matches the single expecte d subject configured or | if the subject information in the certificate matches the single expecte d subject configured or | |||
registered for that particular client | registered for that particular client | |||
(note that a predictable treatment of DN values, such as the distinguish edNameMatch | (note that a predictable treatment of DN values, such as the distinguish edNameMatch | |||
rule from <xref target="RFC4517"/>, is needed in comparing the | rule from <xref target="RFC4517" format="default"/>, is needed in compar ing the | |||
certificate's subject DN to the client's registered DN). | certificate's subject DN to the client's registered DN). | |||
Revocation checking is possible with the PKI method but if and how to ch eck a certificate's | Revocation checking is possible with the PKI method but if and how to ch eck a certificate's | |||
revocation status is a deployment decision at the discretion of the auth orization server. | revocation status is a deployment decision at the discretion of the auth orization server. | |||
Clients can rotate their X.509 certificates | Clients can rotate their X.509 certificates | |||
without the need to modify the respective authentication data at the aut horization | without the need to modify the respective authentication data at the aut horization | |||
server by obtaining a new certificate with the same subject from a trust ed certificate authority (CA). | server by obtaining a new certificate with the same subject from a trust ed certificate authority (CA). | |||
</t> | </t> | |||
<section anchor="metadata_auth_value_pki" numbered="true" toc="default"> | ||||
<section anchor="metadata_auth_value_pki" title="PKI Method Metadata Value | <name>PKI Method Metadata Value</name> | |||
"> | <t> | |||
<t> | ||||
For the PKI method of mutual-TLS client authentication, this specifica tion | For the PKI method of mutual-TLS client authentication, this specifica tion | |||
defines and registers the following authentication method metadata | defines and registers the following authentication method metadata | |||
value into the "OAuth Token Endpoint Authentication Methods" registry | value into the "OAuth Token Endpoint Authentication Methods" registry | |||
<xref target="IANA.OAuth.Parameters"/>. | <xref target="IANA.OAuth.Parameters" format="default"/>. | |||
</t> | </t> | |||
<t> | <dl newline="true" spacing="normal"> | |||
<list style="hanging"> | <dt>tls_client_auth</dt> | |||
<t hangText="tls_client_auth"> | <dd> | |||
<vspace/> | ||||
Indicates that client authentication to the authorization server w ill occur with | Indicates that client authentication to the authorization server w ill occur with | |||
mutual TLS utilizing the PKI method of associating a certificate t o a client. | mutual TLS utilizing the PKI method of associating a certificate t o a client. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | </section> | |||
</section> | <section anchor="client_metadata_pki" numbered="true" toc="default"> | |||
<name>Client Registration Metadata</name> | ||||
<section anchor="client_metadata_pki" title="Client Registration Metadata" | <t> | |||
> | ||||
<t> | ||||
In order to convey the expected subject of the certificate, | In order to convey the expected subject of the certificate, | |||
the following metadata | the following metadata | |||
parameters are introduced for the | parameters are introduced for the | |||
<xref target="RFC7591">OAuth 2.0 Dynamic Client Registration Protocol< /xref> in support of | OAuth 2.0 Dynamic Client Registration Protocol <xref target="RFC7591" format="default"></xref> in support of | |||
the PKI method of mutual-TLS client authentication. | the PKI method of mutual-TLS client authentication. | |||
A client using the <spanx style="verb">tls_client_auth</spanx> authent ication method MUST use | A client using the <tt>tls_client_auth</tt> authentication method <bcp 14>MUST</bcp14> use | |||
exactly one of the below metadata parameters to indicate the certifica te subject value that | exactly one of the below metadata parameters to indicate the certifica te subject value that | |||
the authorization server is to expect when authenticating the respecti ve client. | the authorization server is to expect when authenticating the respecti ve client. | |||
<list style="hanging"> | </t> | |||
<t hangText="tls_client_auth_subject_dn"><vspace/> | <dl newline="true" spacing="normal"> | |||
An <xref target="RFC4514"/> string representation of the expected | <dt>tls_client_auth_subject_dn</dt> | |||
subject distinguished | <dd> | |||
name of the certificate, which the OAuth client will use in mutual | A string representation -- as defined in <xref target="RFC4514" fo | |||
-TLS authentication. | rmat="default"/> -- of the expected subject distinguished | |||
</t> | name of the certificate that the OAuth client will use in mutual-T | |||
LS authentication. | ||||
<t hangText="tls_client_auth_san_dns"><vspace/> | </dd> | |||
<dt>tls_client_auth_san_dns</dt> | ||||
<dd> | ||||
A string containing the value of an expected dNSName SAN entry | A string containing the value of an expected dNSName 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. | |||
</t> | </dd> | |||
<dt>tls_client_auth_san_uri</dt> | ||||
<t hangText="tls_client_auth_san_uri"><vspace/> | <dd> | |||
A string containing the value of an expected | A string containing the value of an expected | |||
uniformResourceIdentifier SAN entry in the certificate, which | uniformResourceIdentifier SAN entry in the certificate that | |||
the OAuth client will use in mutual-TLS authentication. | the OAuth client will use in mutual-TLS authentication. | |||
</t> | </dd> | |||
<dt>tls_client_auth_san_ip</dt> | ||||
<t hangText="tls_client_auth_san_ip"><vspace/> | <dd> | |||
A string representation of an IP address in either dotted decimal | A string representation of an IP address in either dotted | |||
notation (for IPv4) or colon-delimited hexadecimal (for IPv6, as | decimal notation (for IPv4) or colon-delimited hexadecimal (for | |||
defined in <xref target="RFC5952"/>) that is expected to be presen | IPv6, as defined in <xref target="RFC5952" format="default"/>) | |||
t | that is expected to be present as an iPAddress SAN entry in the | |||
as an iPAddress SAN entry in the certificate, which the OAuth | certificate that the OAuth client will use in mutual-TLS | |||
client will use in mutual-TLS authentication. Per section 8 of <xr | authentication. Per <xref target="RFC5952" | |||
ef target="RFC5952"/> | sectionFormat="of" section="8"/>, the IP address comparison of the | |||
the IP address comparison of the value in this parameter and the S | value in | |||
AN entry in the | this parameter and the SAN entry in the certificate is to be | |||
certificate is to be done in binary format. | done in binary format. | |||
</t> | </dd> | |||
<dt>tls_client_auth_san_email</dt> | ||||
<t hangText="tls_client_auth_san_email"><vspace/> | <dd> | |||
A string containing the value of an expected rfc822Name SAN | A string containing the value of an expected rfc822Name SAN | |||
entry in the certificate, which the OAuth client will use in | entry in the certificate that the OAuth client will use in | |||
mutual-TLS authentication. | mutual-TLS authentication. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | </section> | |||
</section> | </section> | |||
<section anchor="self_signed_method" numbered="true" toc="default"> | ||||
</section> | <name>Self-Signed Certificate Mutual-TLS Method</name> | |||
<t> | ||||
<section anchor="self_signed_method" title="Self-Signed Certificate Mutual-T | ||||
LS Method"> | ||||
<t> | ||||
This method of mutual-TLS OAuth client authentication | This method of mutual-TLS OAuth client authentication | |||
is intended to support client authentication using self-signed certifica tes. | is intended to support client authentication using self-signed certifica tes. | |||
As a prerequisite, the client registers its X.509 certificates | As a prerequisite, the client registers its X.509 certificates | |||
(using <spanx style="verb">jwks</spanx> defined in <xref target="RFC7591 | (using <tt>jwks</tt> defined in <xref target="RFC7591" format="default"/ | |||
"/>) or a reference to a trusted source | >) or a reference to a trusted source | |||
for its X.509 certificates (using <spanx style="verb">jwks_uri</spanx> f | for its X.509 certificates (using <tt>jwks_uri</tt> from <xref target="R | |||
rom <xref target="RFC7591"/>) | FC7591" format="default"/>) | |||
with the authorization server. During authentication, | with the authorization server. During authentication, | |||
TLS is utilized to validate the client's possession of the private key | TLS is utilized to validate the client's possession of the private key | |||
corresponding to the public key presented within the certificate in the respective TLS handshake. In | corresponding to the public key presented within the certificate in the respective TLS handshake. In | |||
contrast to the PKI method, the client's certificate chain is not valida ted by the server in this case. | contrast to the PKI method, the client's certificate chain is not valida ted by the server in this case. | |||
The client is successfully authenticated if the | The client is successfully authenticated if the | |||
certificate that it presented during the handshake matches one of the ce rtificates | certificate that it presented during the handshake matches one of the ce rtificates | |||
configured or registered for that particular client. | configured or registered for that particular client. | |||
The Self-Signed Certificate method allows the use of mutual TLS to authe nticate clients without | The Self-Signed Certificate method allows the use of mutual TLS to authe nticate clients without | |||
the need to maintain a PKI. When used in conjunction with a <spanx style ="verb">jwks_uri</spanx> for the | the need to maintain a PKI. When used in conjunction with a <tt>jwks_uri </tt> for the | |||
client, it also allows the client to rotate its X.509 certificates witho ut the | client, it also allows the client to rotate its X.509 certificates witho ut the | |||
need to change its respective authentication data directly with the auth orization server. | need to change its respective authentication data directly with the auth orization server. | |||
</t> | </t> | |||
<section anchor="metadata_auth_value_self_signed" title="Self-Signed Metho | <section anchor="metadata_auth_value_self_signed" numbered="true" toc="d | |||
d Metadata Value"> | efault"> | |||
<t> | <name>Self-Signed Method Metadata Value</name> | |||
<t> | ||||
For the Self-Signed Certificate method of mutual-TLS client authentica tion, this specification | For the Self-Signed Certificate method of mutual-TLS client authentica tion, this specification | |||
defines and registers the following authentication method metadata | defines and registers the following authentication method metadata | |||
value into the "OAuth Token Endpoint Authentication Methods" registry | value into the "OAuth Token Endpoint Authentication Methods" registry | |||
<xref target="IANA.OAuth.Parameters"/>. | <xref target="IANA.OAuth.Parameters" format="default"/>. | |||
</t> | </t> | |||
<t> | <dl newline="true" spacing="normal"> | |||
<list style="hanging"> | <dt>self_signed_tls_client_auth</dt> | |||
<t hangText="self_signed_tls_client_auth"> | <dd> | |||
<vspace/> | ||||
Indicates that client authentication to the authorization server w ill occur using | Indicates that client authentication to the authorization server w ill occur using | |||
mutual TLS with the client utilizing a self-signed certificate. | mutual TLS with the client utilizing a self-signed certificate. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | </section> | |||
</section> | <section anchor="client_metadata_self_signed" numbered="true" toc="defau | |||
lt"> | ||||
<name>Client Registration Metadata</name> | ||||
<section anchor="client_metadata_self_signed" title="Client Registration M | <t> | |||
etadata"> | For the Self-Signed Certificate method of binding a certificate with | |||
<t> | a client using mutual-TLS client authentication, the existing | |||
For the Self-Signed Certificate method of binding a certificate with a | <tt>jwks_uri</tt> or <tt>jwks</tt> metadata parameters from <xref | |||
client using mutual | target="RFC7591" format="default"/> are used to convey the client's | |||
TLS client authentication, the existing | certificates via JSON Web Key (JWK) in a JWK Set <xref | |||
<spanx style="verb">jwks_uri</spanx> or <spanx style="verb">jwks</span | target="RFC7517" format="default"/>. The <tt>jwks</tt> metadata | |||
x> | parameter is a JWK Set containing the client's public keys as an | |||
metadata parameters from <xref target="RFC7591"/> are used to convey t | array of JWKs, while the <tt>jwks_uri</tt> parameter is a URL that | |||
he client's | references a client's JWK Set. A certificate is represented with | |||
certificates via JSON Web Key (JWK) in a JWK Set (JWKS) <xref target=" | the <tt>x5c</tt> parameter of an individual JWK within the set. | |||
RFC7517"/>. | Note that the members of the JWK representing the public key | |||
The <spanx style="verb">jwks</spanx> metadata parameter is a | (e.g., "n" and "e" for RSA, "x" and "y" for Elliptic Curve (EC)) are r | |||
JWK Set containing the client's public keys as an array of JWKs while | equired | |||
the <spanx style="verb">jwks_uri</spanx> parameter is a URL that refer | parameters per <xref target="RFC7518" format="default"/> so will be | |||
ences a client's JWK Set. | present even though they are not utilized in this context. Also note | |||
A certificate is represented with the <spanx style="verb">x5c</spanx> | that <xref target="RFC7517" sectionFormat="of" | |||
parameter of an individual JWK within | section="4.7"/> requires that the key in the first certificate of | |||
the set. | the <tt>x5c</tt> parameter match the public key represented by those | |||
Note that the members of the JWK representing the public key (e.g. "n" | other members of the JWK. | |||
and "e" for RSA, | </t> | |||
"x" and "y" for EC) are required parameters per <xref target="RFC7518" | </section> | |||
/> so will be present | ||||
even though they are not utilized in this context. Also note that | ||||
that Section 4.7 of <xref target="RFC7517"/> requires that the key | ||||
in the first certificate of the <spanx style="verb">x5c</spanx> parame | ||||
ter match the public | ||||
key represented by those other members of the JWK. | ||||
</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="CertificateBoundAccessTokens" numbered="true" toc="default" | ||||
</section> | > | |||
<name>Mutual-TLS Client Certificate-Bound Access Tokens</name> | ||||
<section anchor="CertificateBoundAccessTokens" title="Mutual-TLS Client Cert | <t> | |||
ificate-Bound Access Tokens"> | ||||
<t> | ||||
When mutual TLS is used by the client on the connection to the token endpoint, | 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 token to the client certificate. | the authorization server is able to bind the issued access token to the client certificate. | |||
Such a binding is accomplished by associating the certificate with the token i n | Such a binding is accomplished by associating the certificate with the token i n | |||
a way that can be accessed by the protected resource, such as embedding the ce rtificate | a way that can be accessed by the protected resource, such as embedding the ce rtificate | |||
hash in the issued access token directly, using the syntax described in <xref | hash in the issued access token directly, using the syntax described in <xref | |||
target="x5t"/>, | target="x5t" format="default"/>, | |||
or through token introspection as described in <xref target="introspect"/>. | or through token introspection as described in <xref target="introspect" forma | |||
t="default"/>. | ||||
Binding the access token to the client certificate in that fashion has the ben efit of | Binding the access token to the client certificate in that fashion has the ben efit of | |||
decoupling that binding from the client's authentication with the | decoupling that binding from the client's authentication with the | |||
authorization server, which enables mutual TLS during protected resource acces s to | authorization server, which enables mutual TLS during protected resource acces s to | |||
serve purely as a proof-of-possession mechanism. | serve purely as a proof-of-possession mechanism. | |||
Other methods of associating a certificate with an access token are possible, | Other methods of associating a certificate with an access token are possible, | |||
per agreement by the authorization server and the protected resource, but are | per agreement by the authorization server and the protected resource, but are | |||
beyond the scope of this specification. | beyond the scope of this specification. | |||
</t> | </t> | |||
<t> | <t> | |||
In order for a resource server to use certificate-bound access tokens, it | In order for a resource server to use certificate-bound access tokens, it | |||
must have advance knowledge that mutual TLS is to be used for some or all | must have advance knowledge that mutual TLS is to be used for some or all | |||
resource accesses. In particular, the access token itself | resource accesses. | |||
cannot be used as input to the decision of whether or not to request mutual TL | ||||
S, | In particular, the access token | |||
since from the TLS perspective those are "Application Data", only exchanged | itself cannot be used as input to the decision of whether or not to | |||
after the TLS handshake has been completed, and the initial | request mutual TLS because (from the TLS perspective) it is | |||
CertificateRequest occurs during the handshake, before the Application Data | "Application Data", only exchanged after the TLS handshake has been | |||
is available. Although subsequent opportunities for a TLS client to | completed, and the initial CertificateRequest occurs during the | |||
handshake, before the Application Data is available. | ||||
Although subsequent opportunities for a TLS client to | ||||
present a certificate may be available, e.g., via TLS 1.2 renegotiation | present a certificate may be available, e.g., via TLS 1.2 renegotiation | |||
<xref target="RFC5246"/> or TLS 1.3 post-handshake authentication <xref target ="RFC8446"/>, this document | <xref target="RFC5246" format="default"/> or TLS 1.3 post-handshake authentica tion <xref target="RFC8446" format="default"/>, this document | |||
makes no provision for their usage. It is expected to be common that a | makes no provision for their usage. It is expected to be common that a | |||
mutual-TLS-using resource server will require mutual TLS for all resources hos ted | mutual-TLS-using resource server will require mutual TLS for all resources hos ted | |||
thereupon, or will serve mutual-TLS-protected and regular resources on separat | thereupon or will serve mutual-TLS-protected and regular resources on separate | |||
e | hostname and port combinations, though other workflows are possible. | |||
hostname+port combinations, though other workflows are possible. How | ||||
resource server policy is synchronized with the AS is out of scope for this | How | |||
resource server policy is synchronized with the authorization server (AS) is o | ||||
ut of scope for this | ||||
document. | document. | |||
</t> | </t> | |||
<t> | <t> | |||
Within the scope of an mutual-TLS-protected resource-access flow, | Within the scope of a mutual-TLS-protected resource-access flow, | |||
the client makes protected resource requests as described in <xref target="RFC | the client makes protected resource requests, as described in <xref target="RF | |||
6750"/>, | C6750" format="default"/>, | |||
however, those requests MUST be made over a mutually authenticated TLS connect | however, those requests <bcp14>MUST</bcp14> be made over a mutually authentica | |||
ion | ted TLS connection | |||
using the same certificate that was used for mutual TLS at the token endpoint. | using the same certificate that was used for mutual TLS at the token endpoint. | |||
</t> | </t> | |||
<t> | <t> | |||
The protected resource MUST obtain, from its TLS implementation layer, the cli | The protected resource <bcp14>MUST</bcp14> obtain, from its TLS implementation | |||
ent certificate | layer, the client certificate | |||
used for mutual TLS | used for mutual TLS | |||
and MUST verify that the certificate matches the | and <bcp14>MUST</bcp14> verify that the certificate matches the | |||
certificate associated with the access token. If they do not match, | certificate associated with the access token. If they do not match, | |||
the resource access attempt MUST be rejected with an error per <xref target="R | the resource access attempt <bcp14>MUST</bcp14> be rejected with an error, per | |||
FC6750"/> | <xref target="RFC6750" format="default"/>, | |||
using an HTTP 401 status code and the <spanx style="verb">invalid_token</spanx | using an HTTP 401 status code and the <tt>invalid_token</tt> error code. | |||
> error code. | ||||
</t> | </t> | |||
<t> | <t> | |||
Metadata to convey server and client capabilities for mutual-TLS client certif icate-bound access tokens | Metadata to convey server and client capabilities for mutual-TLS client certif icate-bound access tokens | |||
is defined in <xref target="server_metadata_at"/> and <xref target="client_met adata_at"/> respectively. | is defined in Sections <xref target="server_metadata_at" format="counter"/> an d <xref target="client_metadata_at" format="counter"/>, respectively. | |||
</t> | </t> | |||
<section anchor="x5t" numbered="true" toc="default"> | ||||
<section anchor="x5t" title="JWT Certificate Thumbprint Confirmation Metho | <name>JWT Certificate Thumbprint Confirmation Method</name> | |||
d"> | <t> | |||
<t> | When access tokens are represented as JSON Web Tokens (JWT) <xref target="RF | |||
When access tokens are represented as JSON Web Tokens (JWT)<xref target="RFC | C7519" format="default"/>, | |||
7519"/>, | the certificate hash information <bcp14>SHOULD</bcp14> be represented using | |||
the certificate hash information SHOULD be represented using | the <tt>x5t#S256</tt> confirmation method member defined herein. | |||
the <spanx style="verb">x5t#S256</spanx> confirmation method member defined | </t> | |||
herein. | <t> | |||
</t> | To represent the hash of a certificate in a JWT, this specification | |||
<t> | defines the new JWT Confirmation Method <xref target="RFC7800" | |||
To represent the hash of a certificate in a JWT, | format="default"></xref> member <tt>x5t#S256</tt> for the X.509 | |||
this specification defines the new <xref target="RFC7800">JWT Confirmation M | Certificate SHA-256 Thumbprint. The value of the <tt>x5t#S256</tt> member | |||
ethod</xref> | is a base64url-encoded <xref target="RFC4648" format="default"/> SHA-256 | |||
member <spanx style="verb">x5t#S256</spanx> for the X.509 Certificate SHA-25 | <xref target="SHS" format="default"/> hash (a.k.a., thumbprint, fingerprint, | |||
6 Thumbprint. | or digest) of the DER encoding <xref target="X690" format="default"/> of | |||
The value of the <spanx style="verb">x5t#S256</spanx> member is a base64url- | the X.509 certificate <xref target="RFC5280" format="default"/>. The | |||
encoded <xref target="RFC4648"/> | base64url-encoded value <bcp14>MUST</bcp14> omit all trailing pad '=' | |||
SHA-256 <xref target="SHS"/> hash (a.k.a. thumbprint, fingerprint or digest) | characters and <bcp14>MUST NOT</bcp14> include any line breaks, | |||
of the DER encoding <xref target="X690"/> of the X.509 certificate | whitespace, or other additional characters. | |||
<xref target="RFC5280"/>. The base64url-encoded value MUST omit all trailing | </t> | |||
pad '=' characters | <t> | |||
and MUST NOT include any line breaks, whitespace, or other additional charac | The following is an example of a JWT payload containing an <tt>x5t#S256</tt> | |||
ters. | certificate thumbprint | |||
</t> | confirmation method. The new JWT content introduced by this specification is | |||
<t> | the <tt>cnf</tt> | |||
The following is an example of a JWT payload containing an <spanx style="ver | ||||
b">x5t#S256</spanx> certificate thumbprint | ||||
confirmation method. The new JWT content introduced by this specification is | ||||
the <spanx style="verb">cnf</spanx> | ||||
confirmation method claim at the bottom of the example that has | confirmation method claim at the bottom of the example that has | |||
the <spanx style="verb">x5t#S256</spanx> confirmation method member containi ng the value that is the hash | the <tt>x5t#S256</tt> confirmation method member containing the value that i s the hash | |||
of the client certificate to which the access token is bound. | of the client certificate to which the access token is bound. | |||
</t> | </t> | |||
<figure anchor="eg_x5ts256jwt"> | ||||
<figure anchor="eg_x5ts256jwt" title="Example JWT Claims Set with an X.509 Cer | <name>Example JWT Claims Set with an X.509 Certificate Thumbprint Conf | |||
tificate Thumbprint Confirmation Method"> | irmation Method</name> | |||
<artwork><![CDATA[ | <sourcecode type="json"><![CDATA[ | |||
{ | { | |||
"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" | |||
} | } | |||
}]]> | } | |||
</artwork> | ]]></sourcecode> | |||
</figure> | </figure> | |||
</section> | </section> | |||
<section anchor="introspect" numbered="true" toc="default"> | ||||
<section anchor="introspect" title="Confirmation Method for Token Introspe | <name>Confirmation Method for Token Introspection</name> | |||
ction"> | ||||
<t> | <t> | |||
<xref target="RFC7662">OAuth 2.0 Token Introspection</xref> defines a | OAuth 2.0 Token Introspection <xref target="RFC7662" format="default"> </xref> defines a | |||
method for a protected resource to query | method for a protected resource to query | |||
an authorization server about the active state of an | an authorization server about the active state of an | |||
access token as well as to determine meta-information about the token. | access token as well as to determine metainformation about the token. | |||
</t> | </t> | |||
<t> | <t> | |||
For a mutual-TLS client certificate-bound access token, the hash of th e | For a mutual-TLS client certificate-bound access token, the hash of th e | |||
certificate to which the token is bound | certificate to which the token is bound | |||
is conveyed to the protected resource as meta-information | is conveyed to the protected resource as metainformation | |||
in a token introspection response. The hash is conveyed using the same | in a token introspection response. The hash is conveyed using the same | |||
<spanx style="verb">cnf</spanx> with <spanx style="verb">x5t#S256</spa nx> member structure as the | <tt>cnf</tt> with <tt>x5t#S256</tt> member structure as the | |||
certificate SHA-256 thumbprint confirmation method, described in | certificate SHA-256 thumbprint confirmation method, described in | |||
<xref target="x5t"/>, as a top-level member of the introspection respo nse JSON. | <xref target="x5t" format="default"/>, as a top-level member of the in trospection response JSON. | |||
The protected resource compares | The protected resource compares | |||
that certificate hash to a hash of the client certificate used for | that certificate hash to a hash of the client certificate used for | |||
mutual-TLS authentication | mutual-TLS authentication | |||
and rejects the request, if they do not match. | and rejects the request if they do not match. | |||
</t> | </t> | |||
<t> | <t> | |||
The following is an example of an introspection response for an active token with | The following is an example of an introspection response for an active token with | |||
an <spanx style="verb">x5t#S256</spanx> certificate thumbprint | an <tt>x5t#S256</tt> certificate thumbprint | |||
confirmation method. The new introspection response content introduced | confirmation method. The new introspection response content introduced | |||
by this specification is the <spanx style="verb">cnf</spanx> | by this specification is the <tt>cnf</tt> | |||
confirmation method at the bottom of the example that has | confirmation method at the bottom of the example that has | |||
the <spanx style="verb">x5t#S256</spanx> confirmation method member co ntaining the value that is the hash | the <tt>x5t#S256</tt> confirmation method member containing the value that is the hash | |||
of the client certificate to which the access token is bound. | of the client certificate to which the access token is bound. | |||
</t> | </t> | |||
<figure anchor="eg_x5ts256intro"> | ||||
<figure anchor="eg_x5ts256intro" title="Example Introspection Response f | <name>Example Introspection Response for a Certificate-Bound Access To | |||
or a Certificate-Bound Access Token"> | ken</name> | |||
<artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Type: application/json | Content-Type: application/json | |||
{ | { | |||
"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" | |||
} | } | |||
}]]> | } | |||
</artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
</section> | </section> | |||
<section anchor="server_metadata_at" numbered="true" toc="default"> | ||||
<name>Authorization Server Metadata</name> | ||||
<t>This document introduces the following new authorization server | ||||
metadata <xref target="RFC8414" format="default"/> parameter to sign | ||||
al the server's capability to issue certificate-bound access tokens: | ||||
<section anchor="server_metadata_at" title="Authorization Server Metadata" | </t> | |||
> | <dl newline="true" spacing="normal"> | |||
<t>This document introduces the following new authorization server | <dt>tls_client_certificate_bound_access_tokens</dt> | |||
metadata <xref target="RFC8414"/> parameter to signal the server's c | <dd> | |||
apability to issue certificate | <bcp14>OPTIONAL</bcp14>. Boolean value indicating server support | |||
bound access tokens: | for | |||
<list style="hanging"> | ||||
<t hangText="tls_client_certificate_bound_access_tokens"><vspace/> | ||||
OPTIONAL. Boolean value indicating server support for | ||||
mutual-TLS client certificate-bound access tokens. If omitted, t he | mutual-TLS client certificate-bound access tokens. If omitted, t he | |||
default value is <spanx style="verb">false</spanx>. | default value is <tt>false</tt>. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | </section> | |||
</section> | <section anchor="client_metadata_at" numbered="true" toc="default"> | |||
<name>Client Registration Metadata</name> | ||||
<section anchor="client_metadata_at" title="Client Registration Metadata"> | ||||
<t>The following new client | <t>The following new client | |||
metadata parameter is introduced to convey the client's intention to u | metadata parameter is introduced to convey the client's intention to u | |||
se certificate | se certificate-bound access tokens: | |||
bound access tokens: | ||||
<list style="hanging"> | </t> | |||
<t hangText="tls_client_certificate_bound_access_tokens"><vspace/> | <dl newline="true" spacing="normal"> | |||
OPTIONAL. Boolean value used to indicate the client's intention | <dt>tls_client_certificate_bound_access_tokens</dt> | |||
<dd> | ||||
<bcp14>OPTIONAL</bcp14>. Boolean value used to indicate the client | ||||
's intention | ||||
to use mutual-TLS client certificate-bound access tokens. | to use mutual-TLS client certificate-bound access tokens. | |||
If omitted, the default value is <spanx style="verb">false</spanx> | If omitted, the default value is <tt>false</tt>. | |||
. | </dd> | |||
</t> | </dl> | |||
</list> | <t> | |||
Note that, if a client that has indicated the intention to use mutual- TLS client certificate-bound tokens | Note that if a client that has indicated the intention to use mutual-T LS client certificate-bound tokens | |||
makes a request to the token endpoint over a non-mutual-TLS connection , | makes a request to the token endpoint over a non-mutual-TLS connection , | |||
it is at the authorization server's discretion as to whether to return an error or issue an unbound token. | it is at the authorization server's discretion as to whether to return an error or issue an unbound token. | |||
</t> | </t> | |||
</section> | ||||
</section> | </section> | |||
</section> | ||||
<section anchor="PubClient" title="Public Clients and Certificate-Bound Toke | <section anchor="PubClient" numbered="true" toc="default"> | |||
ns"> | <name>Public Clients and Certificate-Bound Tokens</name> | |||
<t> | <t> | |||
Mutual-TLS OAuth client authentication and certificate-bound access toke ns | Mutual-TLS OAuth client authentication and certificate-bound access toke ns | |||
can be used independently of each other. | can be used independently of each other. | |||
Use of certificate-bound access tokens without mutual-TLS OAuth client a uthentication, for example, | Use of certificate-bound access tokens without mutual-TLS OAuth client a uthentication, for example, | |||
is possible in support of binding access tokens to a TLS client certific ate for public clients (those without | is possible in support of binding access tokens to a TLS client certific ate for public clients (those without | |||
authentication credentials associated with the <spanx style="verb">clien t_id</spanx>). | authentication credentials associated with the <tt>client_id</tt>). | |||
The authorization server would configure the TLS stack in the same manne r as for the Self-Signed Certificate method | The authorization server would configure the TLS stack in the same manne r as for the Self-Signed Certificate method | |||
such that it does not verify that the certificate presented by the clien t during the handshake is | such that it does not verify that the certificate presented by the clien t during the handshake is | |||
signed by a trusted CA. Individual instances of a client would create a self-signed | signed by a trusted CA. Individual instances of a client would create a self-signed | |||
certificate for mutual TLS with both the authorization server and resour ce server. The authorization | certificate for mutual TLS with both the authorization server and resour ce server. The authorization | |||
server would not use the mutual-TLS certificate to authenticate the clie nt at the OAuth layer | server would not use the mutual-TLS certificate to authenticate the clie nt at the OAuth layer | |||
but would bind the issued access token | but would bind the issued access token | |||
to that certificate, for which the client has proven possession of the c orresponding private key. | to the certificate for which the client has proven possession of the cor responding private key. | |||
The access token is then bound to the certificate and can only be used b y the client | The access token is then bound to the certificate and can only be used b y the client | |||
possessing the certificate and corresponding private key and utilizing t hem to negotiate mutual TLS on | possessing the certificate and corresponding private key and utilizing t hem to negotiate mutual TLS on | |||
connections to the resource server. | connections to the resource server. | |||
When the authorization server issues a refresh token to such a client, i | When the authorization server issues a refresh token to such a client, i | |||
t SHOULD also bind the refresh token | t <bcp14>SHOULD</bcp14> also bind the refresh token | |||
to the respective certificate. And check the binding when the refresh to | to the respective certificate and check the binding when the refresh tok | |||
ken is presented to get new | en is presented to get new | |||
access tokens. | access tokens. | |||
The implementation details of the binding the refresh token are at the d iscretion of the authorization | The implementation details of the binding of the refresh token are at th e discretion of the authorization | |||
server. | server. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="endpointAliases" numbered="true" toc="default"> | ||||
<section anchor="endpointAliases" title="Metadata for Mutual-TLS Endpoint Al | <name>Metadata for Mutual-TLS Endpoint Aliases</name> | |||
iases"> | ||||
<t> | <t> | |||
The process of negotiating client certificate-based mutual TLS involves a TLS server requesting a certificate | The process of negotiating client certificate-based mutual TLS involves a TLS server requesting a certificate | |||
from the TLS client (the client does not provide one unsolicited). Altho ugh a server can be configured | from the TLS client (the client does not provide one unsolicited). Altho ugh a server can be configured | |||
such that client certificates are optional, meaning that the connection is allowed to continue when the client | such that client certificates are optional, meaning that the connection is allowed to continue when the client | |||
does not provide a certificate, the act of a server requesting a certifi cate can result in undesirable | does not provide a certificate, the act of a server requesting a certifi cate can result in undesirable | |||
behavior from some clients. This is particularly true of web browsers as TLS clients, which will typically | behavior from some clients. This is particularly true of web browsers as TLS clients, which will typically | |||
present the end-user with an intrusive certificate selection interface w hen the server requests a certificate. | present the end user with an intrusive certificate selection interface w hen the server requests a certificate. | |||
</t> | </t> | |||
<t> | <t> | |||
Authorization servers supporting both clients using mutual TLS and conve ntional clients MAY chose to | Authorization servers supporting both clients using mutual TLS and conve ntional clients <bcp14>MAY</bcp14> chose to | |||
isolate the server side mutual-TLS behavior to only clients intending to do mutual TLS, thus | isolate the server side mutual-TLS behavior to only clients intending to do mutual TLS, thus | |||
avoiding any undesirable effects it might have on conventional clients. The following authorization server | avoiding any undesirable effects it might have on conventional clients. The following authorization server | |||
metadata parameter is introduced to facilitate such separation: | metadata parameter is introduced to facilitate such separation: | |||
</t> | </t> | |||
<t> | <dl newline="true" spacing="normal"> | |||
<list style="hanging"> | <dt>mtls_endpoint_aliases</dt> | |||
<t hangText="mtls_endpoint_aliases"> | <dd><bcp14>OPTIONAL</bcp14>. | |||
<vspace/>OPTIONAL. | ||||
A JSON object containing alternative authorization server endpoints that, | A JSON object containing alternative authorization server endpoints that, | |||
when present, an OAuth client intending to do mutual TLS | when present, an OAuth client intending to do mutual TLS | |||
uses in preference to the conventional endpoints. | uses in preference to the conventional endpoints. | |||
The parameter value itself consists of one or more endpoint paramete rs, | The parameter value itself consists of one or more endpoint paramete rs, | |||
such as <spanx style="verb">token_endpoint</spanx>, | such as <tt>token_endpoint</tt>, | |||
<spanx style="verb">revocation_endpoint</spanx>, | <tt>revocation_endpoint</tt>, | |||
<spanx style="verb">introspection_endpoint</spanx>, etc., convention | <tt>introspection_endpoint</tt>, etc., conventionally defined for th | |||
ally defined for the | e | |||
top-level of authorization server metadata. | top level of authorization server metadata. | |||
An OAuth client intending to do mutual TLS | An OAuth client intending to do mutual TLS | |||
(for OAuth client authentication and/or to acquire or use certificat e-bound tokens) | (for OAuth client authentication and/or to acquire or use certificat e-bound tokens) | |||
when making a request directly to the authorization server MUST | when making a request directly to the authorization server <bcp14>MU | |||
use the alias URL of the endpoint within the <spanx style="verb">mtl | ST</bcp14> | |||
s_endpoint_aliases</spanx>, when present, | use the alias URL of the endpoint within the <tt>mtls_endpoint_alias | |||
in preference to the endpoint URL of the same name at top-level of m | es</tt>, when present, | |||
etadata. | in preference to the endpoint URL of the same name at the top level | |||
of metadata. | ||||
When an endpoint is not present in | When an endpoint is not present in | |||
<spanx style="verb">mtls_endpoint_aliases</spanx>, then the client u | <tt>mtls_endpoint_aliases</tt>, then the client uses the conventiona | |||
ses the conventional endpoint URL | l endpoint URL | |||
defined at the top-level of the authorization server metadata. Metad | defined at the top level of the authorization server metadata. Metad | |||
ata parameters within | ata parameters within | |||
<spanx style="verb">mtls_endpoint_aliases</spanx> that do not define | <tt>mtls_endpoint_aliases</tt> that do not define | |||
endpoints to which an OAuth client makes a direct request have no me | endpoints to which an OAuth client makes a direct request have no me | |||
aning and SHOULD be ignored. | aning and <bcp14>SHOULD</bcp14> be ignored. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | ||||
<t> | <t> | |||
Below is an example of an authorization server metadata document with th e | Below is an example of an authorization server metadata document with th e | |||
<spanx style="verb">mtls_endpoint_aliases</spanx> parameter, which indic ates aliases for the | <tt>mtls_endpoint_aliases</tt> parameter, which indicates aliases for th e | |||
token, revocation, and introspection endpoints that an OAuth client inte nding to do mutual TLS | token, revocation, and introspection endpoints that an OAuth client inte nding to do mutual TLS | |||
would in preference to the conventional token, revocation, and introspec | would use in preference to the conventional token, revocation, and | |||
tion endpoints. | introspection endpoints. | |||
Note that the endpoints in <spanx style="verb">mtls_endpoint_aliases</sp | Note that the endpoints in <tt>mtls_endpoint_aliases</tt> use a differen | |||
anx> use a different | t | |||
host than their conventional counterparts, which allows the authorizatio n server | host than their conventional counterparts, which allows the authorizatio n server | |||
(via TLS <spanx style="verb">server_name</spanx> extension <xref target= "RFC6066"/> or actual distinct hosts) to differentiate its TLS behavior as appro priate. | (via TLS <tt>server_name</tt> extension <xref target="RFC6066" format="d efault"/> or actual distinct hosts) to differentiate its TLS behavior as appropr iate. | |||
<figure title='Example Authorization Server Metadata with Mutual-TLS End | </t> | |||
point Aliases' anchor='as-meta'> | <figure anchor="as-meta"> | |||
<artwork><![CDATA[ | <name>Example Authorization Server Metadata with Mutual-TLS Endpoint Ali | |||
ases</name> | ||||
<sourcecode type="json"><![CDATA[ | ||||
{ | { | |||
"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" | |||
} | } | |||
} | } | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | </figure> | |||
</t> | ||||
</section> | </section> | |||
<section anchor="Impl" numbered="true" toc="default"> | ||||
<section anchor="Impl" title="Implementation Considerations"> | <name>Implementation Considerations</name> | |||
<section anchor="ImplAS" title="Authorization Server"> | <section anchor="ImplAS" numbered="true" toc="default"> | |||
<t>The authorization server needs to set up its TLS configuration appropriat | <name>Authorization Server</name> | |||
ely | <t>The authorization server needs to set up its TLS configuration approp | |||
riately | ||||
for the OAuth client authentication methods it supports.</t> | for the OAuth client authentication methods it supports.</t> | |||
<t>An authorization server that supports mutual-TLS client authentication | <t>An authorization server that supports mutual-TLS client authenticatio n | |||
and other client authentication methods or public clients in parallel would make mutual TLS | and other client authentication methods or public clients in parallel would make mutual TLS | |||
optional (i.e. allowing a handshake to continue after the server requests a client certificate | optional (i.e., allowing a handshake to continue after the server requests a client certificate | |||
but the client does not send one).</t> | but the client does not send one).</t> | |||
<t>In order to support the Self-Signed Certificate method alone, the authori zation server | <t>In order to support the Self-Signed Certificate method alone, the aut horization server | |||
would configure the TLS stack in such a way that it does not verify whether the | would configure the TLS stack in such a way that it does not verify whether the | |||
certificate presented by the client during the handshake is signed by a trus ted CA | certificate presented by the client during the handshake is signed by a trus ted CA | |||
certificate.</t> | certificate.</t> | |||
<t>As described in <xref target="CertificateBoundAccessTokens"/>, the author ization server | <t>As described in <xref target="CertificateBoundAccessTokens" format="d efault"/>, the authorization server | |||
binds the issued access token to the TLS client certificate, which means tha t it | binds the issued access token to the TLS client certificate, which means tha t it | |||
will only issue certificate-bound tokens for a | will only issue certificate-bound tokens for a | |||
certificate which the client has proven possession of the corresponding priv | certificate that the client has proven possession of the corresponding priva | |||
ate key.</t> | te key.</t> | |||
<t>The authorization server may also consider hosting the token endpoint, | <t>The authorization server may also consider hosting the token endpoint | |||
and other endpoints requiring client authentication, on | and other endpoints requiring client authentication on | |||
a separate host name or port in order to prevent unintended impact on the TL S behavior of | a separate host name or port in order to prevent unintended impact on the TL S behavior of | |||
its other endpoints, e.g. the authorization endpoint. As described in <xref target="endpointAliases"/>, | its other endpoints, e.g., the authorization endpoint. As described in <xref target="endpointAliases" format="default"/>, | |||
it may further isolate any potential impact of the server requesting client certificates by | it may further isolate any potential impact of the server requesting client certificates by | |||
offering a distinct set of endpoints on a separate host or port, which are a liases for | offering a distinct set of endpoints on a separate host or port, which are a liases for | |||
the originals that a client intending to do mutual TLS will use in preferenc e to the conventional endpoints.</t> | the originals that a client intending to do mutual TLS will use in preferenc e to the conventional endpoints.</t> | |||
</section> | </section> | |||
<section anchor="ImplRS" title="Resource Server"> | <section anchor="ImplRS" numbered="true" toc="default"> | |||
<t> | <name>Resource Server</name> | |||
<t> | ||||
OAuth divides the roles and responsibilities such that the resource server relies | OAuth divides the roles and responsibilities such that the resource server relies | |||
on the authorization server to perform client authentication and obtain re source owner (end-user) | on the authorization server to perform client authentication and obtain re source-owner (end-user) | |||
authorization. The resource server makes authorization decisions based on the access token | authorization. The resource server makes authorization decisions based on the access token | |||
presented by the client but does not directly authenticate the client per se. | 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 certificate and how a protected resource verifies the proof-of-possession | The manner in which an access token is bound to the client certificate and how a protected resource verifies the proof-of-possession | |||
decouples that from the specific method that the client used to authentica te with the | decouples that from the specific method that the client used to authentica te with the | |||
authorization server. Mutual TLS during protected resource access can ther efore | authorization server. Mutual TLS during protected resource access can, the refore, | |||
serve purely as a proof-of-possession mechanism. | serve purely as a proof-of-possession mechanism. | |||
As such, it is not necessary for the resource server to validate | As such, it is not necessary for the resource server to validate | |||
the trust chain of the client's certificate in any of the methods | the trust chain of the client's certificate in any of the methods | |||
defined in this document. | defined in this document. | |||
The resource server would therefore configure the TLS stack | The resource server would, therefore, configure the TLS stack | |||
in a way that it does not verify whether the certificate presented by the client | in a way that 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. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="ImplExp" title="Certificate Expiration and Bound Access Tok | <section anchor="ImplExp" numbered="true" toc="default"> | |||
ens"> | <name>Certificate Expiration and Bound Access Tokens</name> | |||
<t> | <t> | |||
As described in <xref target="CertificateBoundAccessTokens"/>, | As described in <xref target="CertificateBoundAccessTokens" format="defa | |||
ult"/>, | ||||
an access token is bound to a specific client certificate, which means t hat | an access token is bound to a specific client certificate, which means t hat | |||
the same certificate must be used for mutual TLS on protected resource a ccess. | the same certificate must be used for mutual TLS on protected resource a ccess. | |||
It also implies that access tokens are invalidated when a client updates the certificate, | It also implies that access tokens are invalidated when a client updates the certificate, | |||
which can be handled similar to expired access tokens where the client | which can be handled similarly to expired access tokens where the client | |||
requests a new access token (typically with a refresh token) and retries the protected resource | requests a new access token (typically with a refresh token) and retries the protected resource | |||
request. | request. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="ImplImplicit" title="Implicit Grant Unsupported"> | <section anchor="ImplImplicit" numbered="true" toc="default"> | |||
<t> | <name>Implicit Grant Unsupported</name> | |||
<t> | ||||
This document describes binding an access token to the | This document describes binding an access token to the | |||
client certificate presented on the TLS connection from the client to the | client certificate presented on the TLS connection from the client to the | |||
authorization server's token endpoint, | authorization server's token endpoint, | |||
however, such binding of access tokens issued directly from the authorizat ion | however, such binding of access tokens issued directly from the authorizat ion | |||
endpoint via the implicit grant flow is explicitly out of scope. | endpoint via the implicit grant flow is explicitly out of scope. | |||
End users interact directly with the authorization endpoint using a web br owser | End users interact directly with the authorization endpoint using a web br owser, | |||
and the use of client certificates in user's browsers bring operational an d | and the use of client certificates in user's browsers bring operational an d | |||
usability issues, which make it undesirable to support certificate-bound a ccess | usability issues that make it undesirable to support certificate-bound acc ess | |||
tokens issued in the implicit grant flow. Implementations wanting to emplo y | tokens issued in the implicit grant flow. Implementations wanting to emplo y | |||
certificate-bound access tokens should utilize grant types | certificate-bound access tokens should utilize grant types | |||
that involve the client making an access token request directly to the tok en endpoint | that involve the client making an access token request directly to the tok en endpoint | |||
(e.g. the authorization code and refresh token grant types). | (e.g., the authorization code and refresh token grant types). | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="TTRP" title="TLS Termination"> | <section anchor="TTRP" numbered="true" toc="default"> | |||
<t> | <name>TLS Termination</name> | |||
An authorization server or resource server MAY choose to terminate TLS con | <t> | |||
nections at a load balancer, | An authorization server or resource server <bcp14>MAY</bcp14> choose to te | |||
rminate TLS connections at a load balancer, | ||||
reverse proxy, or other network intermediary. How the client certificate m etadata is securely | reverse proxy, or other network intermediary. How the client certificate m etadata is securely | |||
communicated between the intermediary and the application server in this c | communicated between the intermediary and the application server, in this | |||
ase is out of scope of this specification. | case, is out of scope of this specification. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="Security" numbered="true" toc="default"> | ||||
<section anchor="Security" title="Security Considerations"> | <name>Security Considerations</name> | |||
<section title="Certificate-Bound Refresh Tokens"> | <section numbered="true" toc="default"> | |||
<t>The OAuth 2.0 Authorization Framework <xref target="RFC6749"/> requir | <name>Certificate-Bound Refresh Tokens</name> | |||
es that an authorization server | <t>The OAuth 2.0 Authorization Framework <xref target="RFC6749" | |||
format="default"/> requires that an authorization server (AS) | ||||
bind refresh tokens to the client to which they were issued and that c onfidential clients | bind refresh tokens to the client to which they were issued and that c onfidential clients | |||
(those having established authentication credentials with the authoriz ation server) authenticate to | (those having established authentication credentials with the AS) auth enticate to | |||
the AS when presenting a refresh token. As a result, refresh tokens ar e indirectly certificate-bound by way of the | the AS when presenting a refresh token. As a result, refresh tokens ar e indirectly certificate-bound by way of the | |||
client ID and the associated requirement for (certificate-based) authe | client ID and the associated requirement for (certificate-based) authe | |||
ntication to the authorization server when | ntication to the AS when | |||
issued to clients utilizing the <spanx style="verb">tls_client_auth</s | issued to clients utilizing the <tt>tls_client_auth</tt> or | |||
panx> or | <tt>self_signed_tls_client_auth</tt> methods of client authentication. | |||
<spanx style="verb">self_signed_tls_client_auth</spanx> methods of cli | <xref target="PubClient" format="default"/> describes certificate-boun | |||
ent authentication. | d refresh tokens issued to public clients (those without | |||
<xref target="PubClient"/> describes certificate-bound refresh tokens | authentication credentials associated with the <tt>client_id</tt>). | |||
issued to public clients (those without | ||||
authentication credentials associated with the <spanx style="verb">cli | ||||
ent_id</spanx>). | ||||
</t> | </t> | |||
</section> | </section> | |||
<section title="Certificate Thumbprint Binding"> | <section numbered="true" toc="default"> | |||
<name>Certificate Thumbprint Binding</name> | ||||
<t> | <t> | |||
The binding between the certificate and access token specified in <xre f target="x5t"/> uses | The binding between the certificate and access token specified in <xre f target="x5t" format="default"/> uses | |||
a cryptographic hash of the certificate. It relies on the hash functio n having sufficient | a cryptographic hash of the certificate. It relies on the hash functio n having sufficient | |||
second-preimage resistance so as to make it computationally infeasible to | second-preimage resistance so as to make it computationally infeasible to | |||
find or create another certificate that produces to the same hash outp ut value. | find or create another certificate that produces to the same hash outp ut value. | |||
The SHA-256 hash function was used because it meets the aforementioned requirement while being widely available. | The SHA-256 hash function was used because it meets the aforementioned requirement while being widely available. | |||
If, in the future, certificate thumbprints need to be computed using | If, in the future, certificate thumbprints need to be computed using | |||
hash function(s) other than SHA-256, it is suggested that additional | hash function(s) other than SHA-256, it is suggested that, for additio | |||
related JWT confirmation methods members be defined for that purpose | nal | |||
related JWT confirmation methods, members be defined for that purpose | ||||
and registered in the IANA "JWT Confirmation Methods" registry | and registered in the IANA "JWT Confirmation Methods" registry | |||
<xref target="IANA.JWT.Claims"/> | <xref target="IANA.JWT.Claims" format="default"/> | |||
for JWT <spanx style="verb">cnf</spanx> member values. | for JWT <tt>cnf</tt> member values. | |||
</t> | </t> | |||
<t> | <t> | |||
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 | document about security is a point-in-time | |||
statement. Readers are advised to seek out any errata or updates | statement. Readers are advised to seek out any errata or updates | |||
that apply to this document. | that apply to this document. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="TLSV" title="TLS Versions and Best Practices"> | <section anchor="TLSV" numbered="true" toc="default"> | |||
<name>TLS Versions and Best Practices</name> | ||||
<t> | <t> | |||
In the abstract this document is applicable with any TLS version suppo | This document is applicable with any TLS version supporting certificat | |||
rting certificate-based client authentication. | e-based client authentication. | |||
Both <xref target="RFC8446">TLS 1.3</xref> and <xref target="RFC5246"> | Both <xref target="RFC8446" format="default">TLS 1.3</xref> and <xref | |||
TLS 1.2</xref> are cited herein because, | target="RFC5246" format="default">TLS 1.2</xref> are cited herein, because, | |||
at the time of writing, 1.3 is the newest version while 1.2 is the mos | at the time of writing, 1.3 is the newest version, while 1.2 is the mo | |||
t widely deployed. | st widely deployed. | |||
General implementation and security considerations for TLS, including version recommendations, | General implementation and security considerations for TLS, including version recommendations, | |||
can be found in <xref target="BCP195"/>. | can be found in <xref target="BCP195" format="default"/>. | |||
</t> | </t> | |||
<t> | <t> | |||
TLS certificate validation | TLS certificate validation | |||
(for both client and server certificates) requires a local database of | (for both client and server certificates) requires a local database of | |||
trusted certificate authorities (CAs). Decisions about what CAs to tr ust | trusted certificate authorities (CAs). Decisions about what CAs to tru st | |||
and how to make such a determination of trust are out of scope for thi s | and how to make such a determination of trust are out of scope for thi s | |||
document. | document. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="certspoofing" title="X.509 Certificate Spoofing"> | <section anchor="certspoofing" numbered="true" toc="default"> | |||
<name>X.509 Certificate Spoofing</name> | ||||
<t> | <t> | |||
If the PKI method of client authentication is used, an attacker could try to impersonate a client using | If the PKI method of client authentication is used, an attacker could try to impersonate a client using | |||
a certificate with the same subject (DN or SAN) but issued by a differ | a certificate with the same subject (DN or SAN) but issued by a | |||
ent CA, which the authorization server trusts. | different CA that the authorization server trusts. | |||
To cope with that threat, the authorization server SHOULD only accept | To cope with that threat, the authorization server <bcp14>SHOULD</bcp1 | |||
as trust anchors | 4> only accept, as trust anchors, | |||
a limited number of CAs whose certificate issuance policy meets its se curity requirements. | a limited number of CAs whose certificate issuance policy meets its se curity requirements. | |||
There is an assumption then that the client and server agree out of ba nd on the set | There is an assumption then that the client and server agree out of ba nd on the set | |||
of trust anchors that the server uses to create and validate the | of trust anchors that the server uses to create and validate the | |||
certificate chain. Without this assumption the use of a subject | 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. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="X.509 Certificate Parsing and Validation Complexity"> | <section numbered="true" toc="default"> | |||
<name>X.509 Certificate Parsing and Validation Complexity</name> | ||||
<t> | <t> | |||
Parsing and validation of X.509 certificates and certificate chains is | Parsing and validation of X.509 certificates and certificate chains | |||
complex and implementation | is complex, and implementation | |||
mistakes have previously exposed security vulnerabilities. | mistakes have previously exposed security vulnerabilities. | |||
Complexities of validation include (but are not limited to) | Complexities of validation include (but are not limited to) | |||
<xref target="CX5P"/> <xref target="DCW"/> <xref target="RFC5280"/>: | <xref target="CX5P" format="default"/> <xref target="DCW" format="defa ult"/> <xref target="RFC5280" format="default"/>: | |||
</t> | </t> | |||
<ul spacing="normal"> | ||||
<li>checking of basic constraints, basic and extended key usage constr | ||||
aints, validity periods, and critical extensions;</li> | ||||
<li>handling of embedded NUL bytes in ASN.1 counted-length strings and | ||||
non-canonical or non-normalized string representations in subject names;</li> | ||||
<li>handling of wildcard patterns in subject names;</li> | ||||
<li>recursive verification of certificate chains and checking certific | ||||
ate revocation.</li> | ||||
</ul> | ||||
<t> | <t> | |||
<list style="symbols"> | For these reasons, implementors <bcp14>SHOULD</bcp14> use an establish | |||
<t>checking of Basic Constraints, basic and extended Key Usage constra | ed and well-tested X.509 library | |||
ints, validity periods, and critical extensions;</t> | ||||
<t>handling of embedded NUL bytes in ASN.1 counted-length strings, and | ||||
non-canonical or non-normalized string representations in subject names;</t> | ||||
<t>handling of wildcard patterns in subject names;</t> | ||||
<t>recursive verification of certificate chains and checking certifica | ||||
te revocation.</t> | ||||
</list> | ||||
</t><t> | ||||
For these reasons, implementors SHOULD use an established and well-tes | ||||
ted X.509 library | ||||
(such as one used by an established TLS library) for validation of X.5 09 certificate chains | (such as one used by an established TLS library) for validation of X.5 09 certificate chains | |||
and SHOULD NOT attempt to write their own X.509 certificate validation procedures. | and <bcp14>SHOULD NOT</bcp14> attempt to write their own X.509 certifi cate validation procedures. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="Privacy" numbered="true" toc="default"> | ||||
<section anchor="Privacy" title="Privacy Considerations"> | <name>Privacy Considerations</name> | |||
<t> | <t> | |||
In TLS versions prior to 1.3, the client's certificate is sent unencrypt ed in the initial handshake and | In TLS versions prior to 1.3, the client's certificate is sent unencrypt ed in the initial handshake and | |||
can potentially be used by third parties to monitor, track, and correlat e client activity. | can potentially be used by third parties to monitor, track, and correlat e client activity. | |||
This is likely of little concern for clients that act on behalf of a sig | This is likely of little concern for clients that act on behalf of a | |||
nificant number of end-users because | significant number of end users because | |||
individual user activity will not be discernible amidst the client activ ity as a whole. | individual user activity will not be discernible amidst the client activ ity as a whole. | |||
However, clients that act on behalf of a single end-user, such as a nati ve application on a mobile device, | However, clients that act on behalf of a single end user, such as a nati ve application on a mobile device, | |||
should use TLS version 1.3 whenever possible or consider the potential p rivacy implications of using mutual TLS on | should use TLS version 1.3 whenever possible or consider the potential p rivacy implications of using mutual TLS on | |||
earlier versions. | earlier versions. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="IANA" numbered="true" toc="default"> | ||||
<section anchor="IANA" title="IANA Considerations"> | <name>IANA Considerations</name> | |||
<section numbered="true" toc="default"> | ||||
<section title="JWT Confirmation Methods Registration"> | <name>JWT Confirmation Methods Registration</name> | |||
<t> | <t> | |||
This specification requests registration of the following value | Per this specification, the following value has been registered | |||
in the IANA "JWT Confirmation Methods" registry | in the IANA "JWT Confirmation Methods" registry | |||
<xref target="IANA.JWT.Claims"/> | <xref target="IANA.JWT.Claims" format="default"/> | |||
for JWT <spanx style="verb">cnf</spanx> member values | for JWT <tt>cnf</tt> member values | |||
established by <xref target="RFC7800"/>. | established by <xref target="RFC7800" format="default"/>. | |||
</t> | ||||
<t> | ||||
<?rfc subcompact="yes"?> | ||||
<list style='symbols'> | ||||
<t>Confirmation Method Value: <spanx style="verb">x5t#S256</spanx></ | ||||
t> | ||||
<t>Confirmation Method Description: X.509 Certificate SHA-256 Thumbp | ||||
rint</t> | ||||
<t>Change Controller: IESG</t> | ||||
<t>Specification Document(s): <xref target="x5t"/> of [[ this specif | ||||
ication ]]</t> | ||||
</list> | ||||
<?rfc subcompact="no"?> | ||||
</t> | </t> | |||
</section> | ||||
<section title="Authorization Server Metadata Registration"> | <dl spacing="compact"> | |||
<dt>Confirmation Method Value:</dt><dd><tt>x5t#S256</tt></dd> | ||||
<dt>Confirmation Method Description:</dt><dd>X.509 Certificate SHA-256 | ||||
Thumbprint</dd> | ||||
<dt>Change Controller:</dt><dd>IESG</dd> | ||||
<dt>Specification Document(s):</dt><dd><xref target="x5t" format="defa | ||||
ult"/> | ||||
of RFC 8705</dd> | ||||
</dl> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Authorization Server Metadata Registration</name> | ||||
<t> | <t> | |||
This specification requests registration of the following values | Per this specification, the following values have been registered | |||
in the IANA "OAuth Authorization Server Metadata" registry | in the IANA "OAuth Authorization Server Metadata" registry | |||
<xref target="IANA.OAuth.Parameters"/> established by <xref target="RF | <xref target="IANA.OAuth.Parameters" format="default"/> established by | |||
C8414"/>. | <xref target="RFC8414" format="default"/>. | |||
</t> | ||||
<t> | ||||
<?rfc subcompact="yes"?> | ||||
<list style='symbols'> | ||||
<t>Metadata Name: <spanx style="verb">tls_client_certificate_bound_a | ||||
ccess_tokens</spanx></t> | ||||
<t>Metadata Description: Indicates authorization server support for | ||||
mutual-TLS client certificate-bound | ||||
access tokens.</t> | ||||
<t>Change Controller: IESG</t> | ||||
<t>Specification Document(s): <xref target="server_metadata_at"/> of | ||||
[[ this specification ]]</t> | ||||
</list> | ||||
<?rfc subcompact="no"?> | ||||
</t> | ||||
<t> | ||||
<?rfc subcompact="yes"?> | ||||
<list style='symbols'> | ||||
<t>Metadata Name: <spanx style="verb">mtls_endpoint_aliases</spanx>< | ||||
/t> | ||||
<t>Metadata Description: JSON object containing alternative authoriz | ||||
ation server endpoints, which a client | ||||
intending to do mutual TLS will use in preference to the conventio | ||||
nal endpoints.</t> | ||||
<t>Change Controller: IESG</t> | ||||
<t>Specification Document(s): <xref target="endpointAliases"/> of [[ | ||||
this specification ]]</t> | ||||
</list> | ||||
<?rfc subcompact="no"?> | ||||
</t> | </t> | |||
</section> | ||||
<section title="Token Endpoint Authentication Method Registration"> | <dl spacing="compact"> | |||
<dt>Metadata Name:</dt><dd><tt>tls_client_certificate_bound_access_tok | ||||
ens</tt></dd> | ||||
<dt>Metadata Description:</dt><dd>Indicates authorization server | ||||
support for mutual-TLS client certificate-bound access tokens.</dd> | ||||
<dt>Change Controller:</dt><dd>IESG</dd> | ||||
<dt>Specification Document(s):</dt><dd><xref target="server_metadata_a | ||||
t" | ||||
format="default"/> of RFC 8705</dd> | ||||
</dl> | ||||
<dl spacing="compact"> | ||||
<dt>Metadata Name:</dt><dd><tt>mtls_endpoint_aliases</tt></dd> | ||||
<dt>Metadata Description:</dt><dd>JSON object containing alternative | ||||
authorization server endpoints, which a client | ||||
intending to do mutual TLS will use in preference to the conventio | ||||
nal endpoints.</dd> | ||||
<dt>Change Controller:</dt><dd>IESG</dd> | ||||
<dt>Specification Document(s):</dt><dd><xref target="endpointAliases" | ||||
format="default"/> of RFC 8705</dd> | ||||
</dl> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Token Endpoint Authentication Method Registration</name> | ||||
<t> | <t> | |||
This specification requests registration of the following values | Per this specification, the following values have been registered | |||
in the IANA "OAuth Token Endpoint Authentication Methods" registry | in the IANA "OAuth Token Endpoint Authentication Methods" registry | |||
<xref target="IANA.OAuth.Parameters"/> established by <xref target="RF | <xref target="IANA.OAuth.Parameters" format="default"/> established by | |||
C7591"/>. | <xref target="RFC7591" format="default"/>. | |||
</t> | ||||
<t> | ||||
<?rfc subcompact="yes"?> | ||||
<list style='symbols'> | ||||
<t>Token Endpoint Authentication Method Name: <spanx style="verb">tl | ||||
s_client_auth</spanx></t> | ||||
<t>Change Controller: IESG</t> | ||||
<t>Specification Document(s): <xref target="metadata_auth_value_pki" | ||||
/> of [[ this specification ]]</t> | ||||
</list> | ||||
<?rfc subcompact="no"?> | ||||
</t> | ||||
<t> | ||||
<?rfc subcompact="yes"?> | ||||
<list style='symbols'> | ||||
<t>Token Endpoint Authentication Method Name: <spanx style="verb">se | ||||
lf_signed_tls_client_auth</spanx></t> | ||||
<t>Change Controller: IESG</t> | ||||
<t>Specification Document(s): <xref target="metadata_auth_value_self | ||||
_signed"/> of [[ this specification ]]</t> | ||||
</list> | ||||
<?rfc subcompact="no"?> | ||||
</t> | </t> | |||
</section> | ||||
<section title="Token Introspection Response Registration"> | <dl spacing="compact"> | |||
<dt>Token Endpoint Authentication Method Name:</dt><dd><tt>tls_client_ | ||||
auth</tt></dd> | ||||
<dt>Change Controller:</dt><dd>IESG</dd> | ||||
<dt>Specification Document(s):</dt><dd><xref | ||||
target="metadata_auth_value_pki" format="default"/> of RFC 8705</dd> | ||||
</dl> | ||||
<dl spacing="compact"> | ||||
<dt>Token Endpoint Authentication Method Name:</dt><dd><tt>self_signed | ||||
_tls_client_&zwsp;auth</tt></dd> | ||||
<dt>Change Controller:</dt><dd>IESG</dd> | ||||
<dt>Specification Document(s):</dt><dd><xref | ||||
target="metadata_auth_value_self_signed" format="default"/> of RFC 8705 | ||||
</dd> | ||||
</dl> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Token Introspection Response Registration</name> | ||||
<t> | <t> | |||
<xref target="RFC7800">Proof-of-Possession Key Semantics for JSON Web | "Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)" <xref t | |||
Tokens</xref> defined the | arget="RFC7800" format="default"></xref> defined the | |||
<spanx style="verb">cnf</spanx> (confirmation) claim, which enables | <tt>cnf</tt> (confirmation) claim that enables | |||
confirmation key information to be carried in a JWT. | confirmation key information to be carried in a JWT. | |||
However, the same proof-of-possession semantics are also useful for in trospected access tokens | However, the same proof-of-possession semantics are also useful for in trospected access tokens | |||
whereby the protected resource obtains the confirmation key data as me ta-information | whereby the protected resource obtains the confirmation key data as me tainformation | |||
of a token introspection response and uses that information in verifyi ng proof-of-possession. | of a token introspection response and uses that information in verifyi ng proof-of-possession. | |||
Therefore this specification defines and registers proof-of-possession | Therefore, this specification defines and registers proof-of-possessio | |||
semantics for | n semantics for | |||
<xref target="RFC7662">OAuth 2.0 Token Introspection</xref> using the | OAuth 2.0 Token Introspection <xref target="RFC7662" format="default"> | |||
<spanx style="verb">cnf</spanx> | </xref> using the <tt>cnf</tt> | |||
structure. | structure. | |||
When included as a top-level member of an OAuth token introspection re | When included as a top-level member of an OAuth token introspection re | |||
sponse, <spanx style="verb">cnf</spanx> | sponse, <tt>cnf</tt> | |||
has the same semantics and format as the claim of the same name define | has the same semantics and format as the claim of the same name define | |||
d in <xref target="RFC7800"/>. | d in <xref target="RFC7800" format="default"/>. | |||
While this specification only explicitly uses the <spanx style="verb"> | While this specification only explicitly uses the <tt>x5t#S256</tt> | |||
x5t#S256</spanx> | confirmation method member (see <xref target="introspect" format="defa | |||
confirmation method member (see <xref target="introspect"/>), it needs | ult"/>), it needs to define and register | |||
to define and register | the higher-level <tt>cnf</tt> | |||
the higher level <spanx style="verb">cnf</spanx> | ||||
structure as an introspection response member in order to define and u se the more specific | structure as an introspection response member in order to define and u se the more specific | |||
certificate thumbprint confirmation method. | certificate thumbprint confirmation method. | |||
</t> | </t> | |||
<t> | <t> | |||
As such, this specification requests registration of the following val ue | As such, the following values have been registered | |||
in the IANA "OAuth Token Introspection Response" registry | in the IANA "OAuth Token Introspection Response" registry | |||
<xref target="IANA.OAuth.Parameters"/> | <xref target="IANA.OAuth.Parameters" format="default"/> | |||
established by <xref target="RFC7662"/>. | established by <xref target="RFC7662" format="default"/>. | |||
</t> | ||||
<t> | ||||
<?rfc subcompact="yes"?> | ||||
<list style='symbols'> | ||||
<t>Claim Name: <spanx style="verb">cnf</spanx></t> | ||||
<t>Claim Description: Confirmation</t> | ||||
<t>Change Controller: IESG</t> | ||||
<t>Specification Document(s): <xref target="RFC7800"/> and [[ this s | ||||
pecification ]]</t> | ||||
</list> | ||||
<?rfc subcompact="no"?> | ||||
</t> | </t> | |||
</section> | ||||
<section title="Dynamic Client Registration Metadata Registration"> | <dl spacing="compact"> | |||
<t> | <dt>Claim Name:</dt><dd><tt>cnf</tt></dd> | |||
This specification requests registration of the following client metad | <dt>Claim Description:</dt><dd>Confirmation</dd> | |||
ata definitions | <dt>Change Controller:</dt><dd>IESG</dd> | |||
in the IANA "OAuth Dynamic Client Registration Metadata" registry | <dt>Specification Document(s):</dt><dd><xref target="RFC7800" | |||
<xref target="IANA.OAuth.Parameters"/> | format="default"/> and RFC 8705</dd> | |||
established by <xref target="RFC7591"/>: | </dl> | |||
</t> | ||||
<t> | </section> | |||
<?rfc subcompact="yes"?> | <section numbered="true" toc="default"> | |||
<list style="symbols"> | <name>Dynamic Client Registration Metadata Registration</name> | |||
<t> | ||||
Client Metadata Name: <spanx style="verb">tls_client_certificate_b | ||||
ound_access_tokens</spanx> | ||||
</t> | ||||
<t> | ||||
Client Metadata Description: | ||||
Indicates the client's intention to use mutual-TLS client certific | ||||
ate-bound | ||||
access tokens. | ||||
</t> | ||||
<t> | ||||
Change Controller: IESG | ||||
</t> | ||||
<t> | ||||
Specification Document(s): <xref target="client_metadata_at"/> of | ||||
[[ this specification ]] | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t> | ||||
Client Metadata Name: <spanx style="verb">tls_client_auth_subject_ | ||||
dn</spanx> | ||||
</t> | ||||
<t> | ||||
Client Metadata Description: | ||||
String value specifying the expected subject DN of the client cert | ||||
ificate. | ||||
</t> | ||||
<t> | ||||
Change Controller: IESG | ||||
</t> | ||||
<t> | ||||
Specification Document(s): <xref target="client_metadata_pki"/> of | ||||
[[ this specification ]] | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t> | ||||
Client Metadata Name: <spanx style="verb">tls_client_auth_san_dns< | ||||
/spanx> | ||||
</t> | ||||
<t> | ||||
Client Metadata Description: | ||||
String value specifying the expected dNSName SAN entry in the clie | ||||
nt certificate. | ||||
</t> | ||||
<t> | ||||
Change Controller: IESG | ||||
</t> | ||||
<t> | ||||
Specification Document(s): <xref target="client_metadata_pki"/> of | ||||
[[ this specification ]] | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t> | ||||
Client Metadata Name: <spanx style="verb">tls_client_auth_san_uri< | ||||
/spanx> | ||||
</t> | ||||
<t> | ||||
Client Metadata Description: | ||||
String value specifying the expected uniformResourceIdentifier SAN | ||||
entry in the client certificate. | ||||
</t> | ||||
<t> | ||||
Change Controller: IESG | ||||
</t> | ||||
<t> | ||||
Specification Document(s): <xref target="client_metadata_pki"/> of | ||||
[[ this specification ]] | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t> | ||||
Client Metadata Name: <spanx style="verb">tls_client_auth_san_ip</ | ||||
spanx> | ||||
</t> | ||||
<t> | ||||
Client Metadata Description: | ||||
String value specifying the expected iPAddress SAN entry in the cl | ||||
ient certificate. | ||||
</t> | ||||
<t> | ||||
Change Controller: IESG | ||||
</t> | ||||
<t> | ||||
Specification Document(s): <xref target="client_metadata_pki"/> of | ||||
[[ this specification ]] | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> | <t> | |||
<list style="symbols"> | Per this specification, the following client metadata definitions | |||
<t> | have been registered in the IANA "OAuth Dynamic Client Registration Me | |||
Client Metadata Name: <spanx style="verb">tls_client_auth_san_emai | tadata" registry | |||
l</spanx> | <xref target="IANA.OAuth.Parameters" format="default"/> | |||
</t> | established by <xref target="RFC7591" format="default"/>: | |||
<t> | ||||
Client Metadata Description: | ||||
String value specifying the expected rfc822Name SAN entry in the c | ||||
lient certificate. | ||||
</t> | ||||
<t> | ||||
Change Controller: IESG | ||||
</t> | ||||
<t> | ||||
Specification Document(s): <xref target="client_metadata_pki"/> of | ||||
[[ this specification ]] | ||||
</t> | ||||
</list> | ||||
<?rfc subcompact="no"?> | ||||
</t> | </t> | |||
<dl spacing="compact"> | ||||
<dt> | ||||
Client Metadata Name:</dt><dd><tt>tls_client_certificate_bound_acc | ||||
ess_tokens</tt> | ||||
</dd> | ||||
<dt> | ||||
Client Metadata Description:</dt><dd>Indicates the client's | ||||
intention to use mutual-TLS client certificate-bound access | ||||
tokens. | ||||
</dd> | ||||
<dt> | ||||
Change Controller:</dt><dd>IESG | ||||
</dd> | ||||
<dt> | ||||
Specification Document(s):</dt><dd><xref target="client_metadata_a | ||||
t" | ||||
format="default"/> of RFC 8705 | ||||
</dd> | ||||
</dl> | ||||
<dl spacing="compact"> | ||||
<dt> | ||||
Client Metadata Name:</dt><dd><tt>tls_client_auth_subject_dn</tt> | ||||
</dd> | ||||
<dt> | ||||
Client Metadata Description:</dt><dd>String value specifying | ||||
the expected subject DN of the client certificate. | ||||
</dd> | ||||
<dt> | ||||
Change Controller:</dt><dd>IESG | ||||
</dd> | ||||
<dt> | ||||
Specification Document(s):</dt><dd><xref target="client_metadata_p | ||||
ki" | ||||
format="default"/> of RFC 8705 | ||||
</dd> | ||||
</dl> | ||||
<dl spacing="compact"> | ||||
<dt> | ||||
Client Metadata Name:</dt><dd><tt>tls_client_auth_san_dns</tt> | ||||
</dd> | ||||
<dt> | ||||
Client Metadata Description:</dt><dd>String value specifying | ||||
the expected dNSName SAN entry in the client certificate. | ||||
</dd> | ||||
<dt> | ||||
Change Controller:</dt><dd>IESG | ||||
</dd> | ||||
<dt> | ||||
Specification Document(s):</dt><dd><xref target="client_metadata_p | ||||
ki" | ||||
format="default"/> of RFC 8705 | ||||
</dd> | ||||
</dl> | ||||
<dl spacing="compact"> | ||||
<dt> | ||||
Client Metadata Name:</dt><dd><tt>tls_client_auth_san_uri</tt> | ||||
</dd> | ||||
<dt> | ||||
Client Metadata Description:</dt><dd>String value specifying | ||||
the expected uniformResourceIdentifier SAN entry in the client | ||||
certificate. | ||||
</dd> | ||||
<dt> | ||||
Change Controller:</dt><dd>IESG | ||||
</dd> | ||||
<dt> | ||||
Specification Document(s):</dt><dd><xref target="client_metadata_p | ||||
ki" | ||||
format="default"/> of RFC 8705 | ||||
</dd> | ||||
</dl> | ||||
<dl spacing="compact"> | ||||
<dt> | ||||
Client Metadata Name:</dt><dd><tt>tls_client_auth_san_ip</tt> | ||||
</dd> | ||||
<dt> | ||||
Client Metadata Description:</dt><dd>String value specifying | ||||
the expected iPAddress SAN entry in the client certificate. | ||||
</dd> | ||||
<dt> | ||||
Change Controller:</dt><dd>IESG | ||||
</dd> | ||||
<dt> | ||||
Specification Document(s):</dt><dd><xref target="client_metadata_p | ||||
ki" | ||||
format="default"/> of RFC 8705 | ||||
</dd> | ||||
</dl> | ||||
<dl spacing="compact"> | ||||
<dt> | ||||
Client Metadata Name:</dt><dd><tt>tls_client_auth_san_email</tt> | ||||
</dd> | ||||
<dt> | ||||
Client Metadata Description:</dt><dd>String value specifying | ||||
the expected rfc822Name SAN entry in the client certificate. | ||||
</dd> | ||||
<dt> | ||||
Change Controller:</dt><dd>IESG | ||||
</dd> | ||||
<dt> | ||||
Specification Document(s):</dt><dd><xref target="client_metadata_p | ||||
ki" | ||||
format="default"/> of RFC 8705 | ||||
</dd> | ||||
</dl> | ||||
</section> | </section> | |||
</section> | </section> | |||
</middle> | </middle> | |||
<back> | <back> | |||
<references title="Normative References"> | ||||
<?rfc include='reference.RFC.2119'?> | ||||
<?rfc include='reference.RFC.4514'?> <!-- LDAP: String Representation of D | ||||
istinguished Names --> | ||||
<?rfc include='reference.RFC.4648'?> <!-- base64 --> | ||||
<?rfc include='reference.RFC.5246'?> <!-- TLS 1.2 --> | ||||
<?rfc include='reference.RFC.5280'?> <!-- X.509 Public Key Infrastructure | ||||
Certificate ... --> | ||||
<?rfc include='reference.RFC.6749'?> <!-- OAuth 2.0 Authorization Framewor | ||||
k --> | ||||
<?rfc include='reference.RFC.6750'?> <!-- OAuth 2.0 Authorization Framewor | ||||
k: Bearer Token Usage --> | ||||
<?rfc include='reference.RFC.7517'?> <!-- JWK --> | ||||
<?rfc include='reference.RFC.7519'?> <!-- JWT --> | ||||
<?rfc include='reference.RFC.7591'?> <!-- Dynamic Client Registration --> | ||||
<?rfc include='reference.RFC.7662'?> <!-- introspection --> | ||||
<?rfc include='reference.RFC.7800'?> | ||||
<?rfc include='reference.RFC.8174'?> | ||||
<?rfc include='reference.RFC.8414'?> <!-- OAuth AS metadata --> | ||||
<?rfc include='reference.RFC.8446'?> <!-- TLS 1.3 --> | <displayreference target="I-D.ietf-oauth-token-binding" to="TOKEN"/> | |||
<reference anchor="BCP195" target="http://www.rfc-editor.org/info/bcp195"> | ||||
<front> | ||||
<title>Recommendations for Secure Use of Transport Layer Security (TLS | ||||
) and Datagram Transport Layer Security (DTLS)</title> | ||||
<author initials="Y." surname="Sheffer" fullname="Y. Sheffer"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="R." surname="Holz" fullname="R. Holz"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="P." surname="Saint-Andre" fullname="P. Saint-Andre"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2015" month="May"/> | ||||
<abstract> | ||||
<t>Transport Layer Security (TLS) and Datagram Transport Layer Secur | ||||
ity (DTLS) are widely used to protect data exchanged over application protocols | ||||
such as HTTP, SMTP, IMAP, POP, SIP, and XMPP. Over the last | ||||
few years, several serious attacks on TLS have emerged, including | ||||
attacks on its most commonly used cipher suites and their modes of operation. Th | ||||
is document provides recommendations for improving the | ||||
security of deployed services that use TLS and DTLS. The recommend | ||||
ations are applicable to the majority of use cases. | ||||
</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="195"/> | ||||
<seriesInfo name="RFC" value="7525"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7525"/> | ||||
</reference> | ||||
<reference anchor="SHS" target="http://csrc.nist.gov/publications/fips/fip | <references> | |||
s180-4/fips-180-4.pdf"> | <name>References</name> | |||
<front> | <references> | |||
<title>Secure Hash Standard (SHS)</title> | <name>Normative References</name> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.2119.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4514.xml"/> | ||||
<!-- LDAP: String Representation of Distinguished Names --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4648.xml"/> | ||||
<!-- base64 --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5246.xml"/> | ||||
<!-- TLS 1.2 --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5280.xml"/> | ||||
<!-- X.509 Public Key Infrastructure Certificate ... --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6749.xml"/> | ||||
<!-- OAuth 2.0 Authorization Framework --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6750.xml"/> | ||||
<!-- OAuth 2.0 Authorization Framework: Bearer Token Usage --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7517.xml"/> | ||||
<!-- JWK --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7519.xml"/> | ||||
<!-- JWT --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7591.xml"/> | ||||
<!-- Dynamic Client Registration --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7662.xml"/> | ||||
<!-- introspection --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7800.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8174.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8414.xml"/> | ||||
<!-- OAuth AS metadata --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8446.xml"/> | ||||
<!-- TLS 1.3 --> | ||||
<author> | <reference anchor='BCP195' target='https://www.rfc-editor.org/info/bcp195'> | |||
<organization>National Institute of Standards and | <front> | |||
Technology</organization> | <title>Recommendations for Secure Use of Transport Layer Security (TLS) and Data | |||
</author> | gram Transport Layer Security (DTLS)</title> | |||
<author initials='Y.' surname='Sheffer' fullname='Y. Sheffer'><organization /></ | ||||
author> | ||||
<author initials='R.' surname='Holz' fullname='R. Holz'><organization /></author | ||||
> | ||||
<author initials='P.' surname='Saint-Andre' fullname='P. Saint-Andre'><organizat | ||||
ion /></author> | ||||
<date year='2015' month='May' /> | ||||
</front> | ||||
<seriesInfo name='BCP' value='195'/> | ||||
<seriesInfo name='RFC' value='7525'/> | ||||
</reference> | ||||
<date month="March" year="2012" /> | <reference anchor="SHS" target="https://nvlpubs.nist.gov/nistpubs/FIPS/N | |||
</front> | IST.FIPS.180-4.pdf"> | |||
<seriesInfo name="FIPS" value="PUB 180-4" /> | <front> | |||
<format target="http://csrc.nist.gov/publications/fips/fips180-4/fips-18 | <title>Secure Hash Standard (SHS)</title> | |||
0-4.pdf" type="PDF" /> | <author> | |||
</reference> | <organization>National Institute of Standards and | |||
Technology (NIST)</organization> | ||||
</author> | ||||
<date month="August" year="2015"/> | ||||
</front> | ||||
<seriesInfo name="FIPS" value="PUB 180-4"/> | ||||
<seriesInfo name="DOI" value="10.6028/NIST.FIPS.180-4" /> | ||||
</reference> | ||||
<reference anchor="X690"> | <reference anchor="X690"> | |||
<front> | <front> | |||
<title> | <title> | |||
ASN.1 encoding rules: Specification of basic encoding Rules (BER | Information Technology - ASN.1 encoding rules: | |||
), | Specification of Basic Encoding Rules (BER), Canonical | |||
Canonical encoding rules (CER) and Distinguished encoding rules | Encoding Rules (CER) and Distinguished Encoding Rules (DER) | |||
(DER) | ||||
</title> | </title> | |||
<seriesInfo name="ITU-T" value="Recommendation X.690"/> | ||||
<author> | <author> | |||
<organization> | <organization>ITU-T</organization> | |||
International Telephone and Telegraph Consultative Committee | ||||
</organization> | ||||
</author> | </author> | |||
<date month="July" year="2015"/> | <date month="August" year="2015"/> | |||
</front> | </front> | |||
<seriesInfo name="CCITT" value="Recommendation X.690"/> | </reference> | |||
</reference> | ||||
</references> | ||||
<references title="Informative References"> | </references> | |||
<reference anchor="IANA.OAuth.Parameters" target="http://www.iana.org/assi | ||||
gnments/oauth-parameters"> | ||||
<front> | ||||
<title>OAuth Parameters</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
<date/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="IANA.JWT.Claims" target="http://www.iana.org/assignment | ||||
s/jwt"> | ||||
<front> | ||||
<title>JSON Web Token Claims</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
<date/> | ||||
</front> | ||||
</reference> | ||||
<?rfc include='reference.RFC.4517'?> | <references> | |||
<?rfc include='reference.RFC.5952'?> <!-- IPv6 text rep --> | <name>Informative References</name> | |||
<?rfc include='reference.RFC.6066'?> | <reference anchor="IANA.OAuth.Parameters" target="https://www.iana.org/a | |||
<?rfc include='reference.RFC.7009'?> <!-- revocation --> | ssignments/oauth-parameters"> | |||
<?rfc include='reference.RFC.7518'?> <!-- JWA --> | <front> | |||
<title>OAuth Parameters</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="IANA.JWT.Claims" target="https://www.iana.org/assignm | ||||
ents/jwt"> | ||||
<front> | ||||
<title>JSON Web Token Claims</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
<?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference. | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
I-D.draft-ietf-oauth-token-binding-06.xml'?> | FC.4517.xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5952.xml"/> | ||||
<!-- IPv6 text rep --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6066.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7009.xml"/> | ||||
<!-- revocation --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7518.xml"/> | ||||
<!-- JWA --> | ||||
<reference anchor="CX5P" target="https://www.cryptologie.net/article/374/c | <!-- ietf-oauth-token-binding Expired --> | |||
ommon-x509-certificate-validationcreation-pitfalls"> | ||||
<front> | ||||
<title>Common x509 certificate validation/creation pitfalls</title> | ||||
<author fullname="David Wong" initials="D." surname="Wong"><organizati | ||||
on/></author> | ||||
<date month="September" year="2016"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="DCW" target="http://www.cs.utexas.edu/~shmat/shmat_ccs1 | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference. | |||
2.pdf"> | I-D.ietf-oauth-token-binding.xml"/> | |||
<front> | <reference anchor="CX5P" target="https://www.cryptologie.net/article/374 | |||
<title>The Most Dangerous Code in the World: Validating SSL Certificat | /common-x509-certificate-validationcreation-pitfalls"> | |||
es in Non-Browser Software</title> | <front> | |||
<author fullname="Martin Georgiev" initials="M." surname="Georgiev"><o | <title>Common x509 certificate validation/creation pitfalls</title> | |||
rganization/></author> | <author fullname="David Wong" initials="D." surname="Wong"> | |||
<author fullname="Subodh Iyengar" initials="S." surname="Iyengar"><org | <organization/> | |||
anization/></author> | </author> | |||
<author fullname="Suman Jana" initials="S." surname="Jana"><organizati | <date month="September" year="2016"/> | |||
on/></author> | </front> | |||
<author fullname="Rishita Anubhai" initials="R." surname="Anubhai"><or | </reference> | |||
ganization/></author> | ||||
<author fullname="Dan Boneh" initials="D." surname="Boneh"><organizati | ||||
on/></author> | ||||
<author fullname="Vitaly Shmatikov" initials="V." surname="Shmatikov"> | ||||
<organization/></author> | ||||
<date/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="OpenID.CIBA" | <reference anchor="DCW" target="http://www.cs.utexas.edu/~shmat/shmat_cc | |||
target="https://openid.net/specs/openid-client-initiated-backchannel- | s12.pdf"> | |||
authentication-core-1_0.html"> | <front> | |||
<front> | <title>The Most Dangerous Code in the World: Validating SSL Certific | |||
<title abbrev="CIBA">OpenID Connect Client Initiated Backchannel Authe | ates in Non-Browser Software</title> | |||
ntication Flow - Core 1.0</title> | <author fullname="Martin Georgiev" initials="M." surname="Georgiev"> | |||
<author fullname="Gonzalo Fernandez Rodriguez" initials="G." surname=" | <organization/> | |||
Fernandez"> | </author> | |||
<organization abbrev="Telefonica">Telefonica I+D</organization> | <author fullname="Subodh Iyengar" initials="S." surname="Iyengar"> | |||
<address> | <organization/> | |||
<email>gonzalo.fernandezrodriguez@telefonica.com</email> | </author> | |||
</address> | <author fullname="Suman Jana" initials="S." surname="Jana"> | |||
</author> | <organization/> | |||
<author fullname="Florian Walter" initials="F." surname="Walter"> | </author> | |||
<organization abbrev="">Deutsche Telekom AG</organization> | <author fullname="Rishita Anubhai" initials="R." surname="Anubhai"> | |||
<address> | <organization/> | |||
<email>F.Walter@telekom.de</email> | </author> | |||
</address> | <author fullname="Dan Boneh" initials="D." surname="Boneh"> | |||
</author> | <organization/> | |||
<author fullname="Axel Nennker" initials="A." surname="Nennker"> | </author> | |||
<organization abbrev="">Deutsche Telekom AG</organization> | <author fullname="Vitaly Shmatikov" initials="V." surname="Shmatikov | |||
<address> | "> | |||
<email>axel.nennker@telekom.de</email> | <organization/> | |||
</address> | </author> | |||
</author> | <date month="October" year="2012"/> | |||
<author fullname="Dave Tonge" initials="D." surname="Tonge"> | </front> | |||
<organization abbrev="Moneyhub">Moneyhub</organization> | <seriesInfo name="DOI" value="10.1145/2382196.2382204"/> | |||
<address> | </reference> | |||
<email>dave.tonge@moneyhub.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Brian Campbell" initials="B." surname="Campbell"> | ||||
<organization abbrev="Ping Identity">Ping Identity</organization> | ||||
<address> | ||||
<email>bcampbell@pingidentity.com</email> | ||||
</address> | ||||
</author> | ||||
<date day="16" month="January" year="2019"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="OpenID.CIBA" target="https://openid.net/specs/openid- | ||||
client-initiated-backchannel-authentication-core-1_0.html"> | ||||
<front> | ||||
<title abbrev="CIBA">OpenID Connect Client Initiated Backchannel Aut | ||||
hentication Flow - Core 1.0</title> | ||||
<author fullname="Gonzalo Fernandez Rodriguez" initials="G." surname | ||||
="Fernandez"> | ||||
<organization abbrev="Telefonica">Telefonica I+D</organization> | ||||
<address> | ||||
<email>gonzalo.fernandezrodriguez@telefonica.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Florian Walter" initials="F." surname="Walter"> | ||||
<organization abbrev="">Deutsche Telekom AG</organization> | ||||
<address> | ||||
<email>F.Walter@telekom.de</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Axel Nennker" initials="A." surname="Nennker"> | ||||
<organization abbrev="">Deutsche Telekom AG</organization> | ||||
<address> | ||||
<email>axel.nennker@telekom.de</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Dave Tonge" initials="D." surname="Tonge"> | ||||
<organization abbrev="Moneyhub">Moneyhub</organization> | ||||
<address> | ||||
<email>dave.tonge@moneyhub.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Brian Campbell" initials="B." surname="Campbell"> | ||||
<organization abbrev="Ping Identity">Ping Identity</organization> | ||||
<address> | ||||
<email>bcampbell@pingidentity.com</email> | ||||
</address> | ||||
</author> | ||||
<date day="16" month="January" year="2019"/> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
</references> | </references> | |||
<section title='Example "cnf" Claim, Certificate and JWK' anchor="example"> | <section anchor="example" numbered="true" toc="default"> | |||
<name>Example "cnf" Claim, Certificate, and JWK</name> | ||||
<t> | <t> | |||
For reference, an <spanx style="verb">x5t#S256</spanx> value and the X.5 | For reference, an <tt>x5t#S256</tt> value and the X.509 certificate | |||
09 Certificate from which it was | from which it was calculated are provided in the following examples, | |||
calculated are provided in the following examples, <xref target="cnf"/> | Figures <xref target="cnf" format="counter"/> and <xref target="pem" | |||
and <xref target="pem"/> respectively. | format="counter"/>, respectively. A JWK representation of the | |||
A JWK representation of the certificate's public | certificate's public key along with the <tt>x5c</tt> member is also | |||
key along with the <spanx style="verb">x5c</spanx> member is also provid | provided in <xref target="jwk" format="default"/>. | |||
ed in <xref target="jwk"/>. | ||||
<figure title="x5t#S256 Confirmation Claim" anchor="cnf"> | </t> | |||
<artwork><![CDATA["cnf":{"x5t#S256":"A4DtL2JmUMhAsvJj5tKyn64SqzmuXbMrJ | <figure anchor="cnf"> | |||
a0n761y5v0"} | <name>x5t#S256 Confirmation Claim</name> | |||
]]></artwork> | <sourcecode type="json"><![CDATA[ | |||
</figure> | "cnf":{"x5t#S256":"A4DtL2JmUMhAsvJj5tKyn64SqzmuXbMrJa0n761y5v0"} | |||
]]></sourcecode> | ||||
</figure> | ||||
<figure title="PEM Encoded Self-Signed Certificate" anchor="pem"> | <figure anchor="pem"> | |||
<artwork><![CDATA[-----BEGIN CERTIFICATE----- | <name>PEM Encoded Self-Signed Certificate</name> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
-----BEGIN CERTIFICATE----- | ||||
MIIBBjCBrAIBAjAKBggqhkjOPQQDAjAPMQ0wCwYDVQQDDARtdGxzMB4XDTE4MTAx | MIIBBjCBrAIBAjAKBggqhkjOPQQDAjAPMQ0wCwYDVQQDDARtdGxzMB4XDTE4MTAx | |||
ODEyMzcwOVoXDTIyMDUwMjEyMzcwOVowDzENMAsGA1UEAwwEbXRsczBZMBMGByqG | ODEyMzcwOVoXDTIyMDUwMjEyMzcwOVowDzENMAsGA1UEAwwEbXRsczBZMBMGByqG | |||
SM49AgEGCCqGSM49AwEHA0IABNcnyxwqV6hY8QnhxxzFQ03C7HKW9OylMbnQZjjJ | SM49AgEGCCqGSM49AwEHA0IABNcnyxwqV6hY8QnhxxzFQ03C7HKW9OylMbnQZjjJ | |||
/Au08/coZwxS7LfA4vOLS9WuneIXhbGGWvsDSb0tH6IxLm8wCgYIKoZIzj0EAwID | /Au08/coZwxS7LfA4vOLS9WuneIXhbGGWvsDSb0tH6IxLm8wCgYIKoZIzj0EAwID | |||
SQAwRgIhAP0RC1E+vwJD/D1AGHGzuri+hlV/PpQEKTWUVeORWz83AiEA5x2eXZOV | SQAwRgIhAP0RC1E+vwJD/D1AGHGzuri+hlV/PpQEKTWUVeORWz83AiEA5x2eXZOV | |||
bUlJSGQgjwD5vaUaKlLR50Q2DmFfQj1L+SY= | bUlJSGQgjwD5vaUaKlLR50Q2DmFfQj1L+SY= | |||
-----END CERTIFICATE-----]]></artwork> | -----END CERTIFICATE-----]]></artwork> | |||
</figure> | </figure> | |||
<figure title="JSON Web Key" anchor="jwk"> | <figure anchor="jwk"> | |||
<artwork><![CDATA[ | <name>JSON Web Key</name> | |||
<sourcecode type="json"><![CDATA[ | ||||
{ | { | |||
"kty":"EC", | "kty":"EC", | |||
"x":"1yfLHCpXqFjxCeHHHMVDTcLscpb07KUxudBmOMn8C7Q", | "x":"1yfLHCpXqFjxCeHHHMVDTcLscpb07KUxudBmOMn8C7Q", | |||
"y":"8_coZwxS7LfA4vOLS9WuneIXhbGGWvsDSb0tH6IxLm8", | "y":"8_coZwxS7LfA4vOLS9WuneIXhbGGWvsDSb0tH6IxLm8", | |||
"crv":"P-256", | "crv":"P-256", | |||
"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=" | |||
] | ] | |||
}]]></artwork> | }]]></sourcecode> | |||
</figure> | </figure> | |||
</t> | ||||
</section> | </section> | |||
<section anchor="relation" numbered="true" toc="default"> | ||||
<section anchor="relation" title="Relationship to Token Binding"> | <name>Relationship to Token Binding</name> | |||
<t> | <t> | |||
<xref target="I-D.ietf-oauth-token-binding">OAuth 2.0 Token Binding</xre f> | OAuth 2.0 Token Binding <xref target="I-D.ietf-oauth-token-binding" form at="default"></xref> | |||
enables the application of Token Binding to the various artifacts and to kens employed throughout OAuth. | enables the application of Token Binding to the various artifacts and to kens employed throughout OAuth. | |||
That includes binding of an access token to a Token Binding key, which b ears some similarities in motivation | That includes binding of an access token to a Token Binding key, which b ears some similarities in motivation | |||
and design to the mutual-TLS client certificate-bound access tokens defi ned in this document. | and design to the mutual-TLS client certificate-bound access tokens defi ned in this document. | |||
Both documents define what is often called a proof-of-possession securit y mechanism | Both documents define what is often called a proof-of-possession securit y mechanism | |||
for access tokens, whereby a client must demonstrate possession of crypt ographic keying | for access tokens, whereby a client must demonstrate possession of crypt ographic keying | |||
material when accessing a protected resource. The details differ somewha t between the two documents but both | material when accessing a protected resource. The details differ somewha t between the two documents but both | |||
have the authorization server bind the access token that it issues to an asymmetric key pair | have the authorization server bind 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 that pair | held by the client. The client then proves possession of the private key from that pair | |||
with respect to the TLS connection over which the protected resource is accessed. | with respect to the TLS connection over which the protected resource is accessed. | |||
</t> | </t> | |||
<t> | <t> | |||
Token Binding uses bare keys that are generated on the client, | Token Binding uses bare keys that are generated on the client, | |||
which avoids many of the difficulties of creating, distributing, and man aging certificates | which avoids many of the difficulties of creating, distributing, and man aging certificates | |||
used in this specification. However, at the time of | used in this specification. However, at the time of | |||
writing, Token Binding is fairly new and there is relatively little supp ort for it in available | writing, Token Binding is fairly new, and there is relatively little sup port for it in available | |||
application development platforms and tooling. Until better support for the underlying | application development platforms and tooling. Until better support for the underlying | |||
core Token Binding specifications exists, practical implementations of O Auth 2.0 Token Binding | core Token Binding specifications exists, practical implementations of O Auth 2.0 Token Binding | |||
are infeasible. | are infeasible. | |||
Mutual TLS, on the other hand, has been around for some time and enjoys | Mutual TLS, on the other hand, has been around for some time and enjoys | |||
widespread support in web servers and development platforms. As a conse quence, OAuth 2.0 Mutual-TLS | widespread support in web servers and development platforms. As a conseq uence, OAuth 2.0 Mutual-TLS | |||
Client Authentication and Certificate-Bound Access Tokens can be | Client Authentication and Certificate-Bound Access Tokens can be | |||
built and deployed now using existing platforms and tools. | built and deployed now using existing platforms and tools. | |||
In the future, the two specifications are likely to be | In the future, the two specifications are likely to be | |||
deployed in parallel for solving similar problems in different environme nts. | deployed in parallel for solving similar problems in different environme nts. | |||
Authorization servers may even support both specifications simultaneousl y using different | Authorization servers may even support both specifications simultaneousl y using different | |||
proof-of-possession mechanisms for tokens issued to different clients. | proof-of-possession mechanisms for tokens issued to different clients. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="Acknowledgements" numbered="false" toc="default"> | ||||
<section anchor="Acknowledgements" title="Acknowledgements"> | <name>Acknowledgements</name> | |||
<t> | <t> | |||
Scott "not Tomlinson" Tomilson and Matt Peterson were involved in | Scott "not Tomlinson" Tomilson and <contact fullname="Matt Peterson"/> w ere involved in | |||
design and development work on a mutual-TLS OAuth client authentication | design and development work on a mutual-TLS OAuth client authentication | |||
implementation, which predates this document. Experience and learning fr om that work | implementation that predates this document. Experience and learning from that work | |||
informed some of the content of this document. | informed some of the content of this document. | |||
</t> | </t> | |||
<t> | <t> | |||
This specification was developed within the OAuth Working Group | This specification was developed within the OAuth Working Group | |||
under the chairmanship of Hannes Tschofenig | under the chairmanship of <contact fullname="Hannes Tschofenig"/> | |||
and Rifaat Shekh-Yusef with Eric Rescorla, Benjamin Kaduk, and Roman Dan | and <contact fullname="Rifaat Shekh-Yusef"/> with <contact fullname="Eri | |||
yliw | c Rescorla"/>, | |||
serving as Security Area Directors. Additionally, the following | <contact fullname="Benjamin Kaduk"/>, and | |||
<contact fullname="Roman Danyliw"/> | ||||
serving as Security Area Directors. Additionally, the following | ||||
individuals contributed ideas, feedback, and wording | individuals contributed ideas, feedback, and wording | |||
that helped shape this specification: | that helped shape this specification: | |||
Vittorio Bertocci, | ||||
Sergey Beryozkin, | ||||
Ralph Bragg, | ||||
Sophie Bremer, | ||||
Roman Danyliw, | ||||
Vladimir Dzhuvinov, | ||||
Samuel Erdtman, | ||||
Evan Gilman, | ||||
Leif Johansson, | ||||
Michael Jones, | ||||
Phil Hunt, | ||||
Benjamin Kaduk, | ||||
Takahiko Kawasaki, | ||||
Sean Leonard, | ||||
Kepeng Li, | ||||
Neil Madden, | ||||
James Manger, | ||||
Jim Manico, | ||||
Nov Matake, | ||||
Sascha Preibisch, | ||||
Eric Rescorla, | ||||
Justin Richer, | ||||
Vincent Roca, | ||||
Filip Skokan, | ||||
Dave Tonge, | ||||
and | ||||
Hannes Tschofenig. | ||||
</t> | ||||
</section> | ||||
<section anchor="History" title="Document(s) History"> | <contact fullname="Vittorio Bertocci"/>, | |||
<?rfc subcompact="yes"?> | <contact fullname="Sergey Beryozkin"/>, | |||
<t> | <contact fullname="Ralph Bragg"/>, | |||
[[ to be removed by the RFC Editor before publication as an RFC ]] | <contact fullname="Sophie Bremer"/>, | |||
</t> | <contact fullname="Roman Danyliw"/>, | |||
<t> | <contact fullname="Vladimir Dzhuvinov"/>, | |||
draft-ietf-oauth-mtls-17 | <contact fullname="Samuel Erdtman"/>, | |||
<list style='symbols'> | <contact fullname="Evan Gilman"/>, | |||
<t>Updates from IESG ballot position comments.</t> | <contact fullname="Leif Johansson"/>, | |||
</list> | <contact fullname="Michael Jones"/>, | |||
</t> | <contact fullname="Phil Hunt"/>, | |||
<t> | <contact fullname="Benjamin Kaduk"/>, | |||
draft-ietf-oauth-mtls-16 | <contact fullname="Takahiko Kawasaki"/>, | |||
<list style='symbols'> | <contact fullname="Sean Leonard"/>, | |||
<t>Editorial updates from last call review.</t> | <contact fullname="Kepeng Li"/>, | |||
</list> | <contact fullname="Neil Madden"/>, | |||
</t> | <contact fullname="James Manger"/>, | |||
<t> | <contact fullname="Jim Manico"/>, | |||
draft-ietf-oauth-mtls-15 | <contact fullname="Nov Matake"/>, | |||
<list style='symbols'> | <contact fullname="Sascha Preibisch"/>, | |||
<t>Editorial updates from second AD review.</t> | <contact fullname="Eric Rescorla"/>, | |||
</list> | <contact fullname="Justin Richer"/>, | |||
</t> | <contact fullname="Vincent Roca"/>, | |||
<t> | <contact fullname="Filip Skokan"/>, | |||
draft-ietf-oauth-mtls-14 | <contact fullname="Dave Tonge"/>, | |||
<list style='symbols'> | and | |||
<t>Editorial clarifications around there being only a single subject r | <contact fullname="Hannes Tschofenig"/>. | |||
egistered/configured per client | ||||
for the tls_client_auth method.</t> | ||||
<t>Add a brief explanation about how, with tls_client_auth and self_si | ||||
gned_tls_client_auth, | ||||
refresh tokens are certificate-bound indirectly via the client authe | ||||
ntication.</t> | ||||
<t>Add mention of refresh tokens in the abstract.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-ietf-oauth-mtls-13 | ||||
<list style='symbols'> | ||||
<t>Add an abstract protocol flow and diagram to serve as an overview o | ||||
f OAuth in general and | ||||
baseline to describe the various ways | ||||
in which the mechanisms defined herein are intended to be used.</t> | ||||
<t>A little bit less of that German influence.</t> | ||||
<t>Rework the TLS references a bit and, in the Terminology section, cl | ||||
ean up the description | ||||
of what messages are sent and verified in the handshake to do 'mutua | ||||
l TLS'.</t> | ||||
<t>Move the explanation about "cnf" introspection registration | ||||
into the IANA Considerations.</t> | ||||
<t>Add CIBA as an informational reference and additional example of an | ||||
OAuth extension that | ||||
defines an endpoint that utilizes client authentication.</t> | ||||
<t>Shorten a few of the section titles.</t> | ||||
<t>Add new client metadata values to allow for the use of a SAN in the | ||||
PKI MTLS client authentication method.</t> | ||||
<t>Add privacy considerations attempting to discuss the implications o | ||||
f the client cert being sent in | ||||
the clear in TLS 1.2.</t> | ||||
<t>Changed the 'Certificate Bound Access Tokens Without Client Authent | ||||
ication' 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 | ||||
.</t> | ||||
<t>Reword/restructure the main PKI method section somewhat to (hopeful | ||||
ly) improve readability.</t> | ||||
<t>Reword/restructure the Self-Signed method section a bit to (hopeful | ||||
ly) make it more comprehensible.</t> | ||||
<t>Reword the AS and RS Implementation Considerations somewhat to (hop | ||||
efully) improve readability.</t> | ||||
<t>Clarify that the protected resource obtains the client certificate | ||||
used for mutual TLS from its TLS implementation layer.</t> | ||||
<t>Add Security Considerations section about the certificate thumbprin | ||||
t binding that includes the hash algorithm agility recommendation.</t> | ||||
<t>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.</t> | ||||
<t>Minor editorial updates.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-ietf-oauth-mtls-12 | ||||
<list style='symbols'> | ||||
<t>Add an example certificate, JWK, and confirmation method claim.</t> | ||||
<t>Minor editorial updates based on implementer feedback.</t> | ||||
<t>Additional Acknowledgements.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-ietf-oauth-mtls-11 | ||||
<list style='symbols'> | ||||
<t>Editorial updates.</t> | ||||
<t>Mention/reference TLS 1.3 RFC8446 in the TLS Versions and Best Prac | ||||
tices section.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-ietf-oauth-mtls-10 | ||||
<list style='symbols'> | ||||
<t>Update draft-ietf-oauth-discovery reference to RFC8414</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-ietf-oauth-mtls-09 | ||||
<list style='symbols'> | ||||
<t>Change "single certificates" to "self-signed certificates" in the A | ||||
bstract</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-ietf-oauth-mtls-08 | ||||
<list style='symbols'> | ||||
<t>Incorporate clarifications and editorial improvements from Justin R | ||||
icher's WGLC review</t> | ||||
<t>Drop the use of the "sender constrained" terminology per WGLC feedb | ||||
ack from Neil Madden (including changing | ||||
the metadata parameters from mutual_tls_sender_constrained_access_toke | ||||
ns | ||||
to tls_client_certificate_bound_access_tokens)</t> | ||||
<t>Add a new security considerations section on X.509 parsing and vali | ||||
dation | ||||
per WGLC feedback from Neil Madden and Benjamin Kaduk</t> | ||||
<t>Note that a server can terminate TLS at a load balancer, reverse pr | ||||
oxy, etc. but how the | ||||
client certificate metadata is securely communicated to the backend | ||||
is out of scope per WGLC feedback</t> | ||||
<t>Note that revocation checking is at the discretion of the AS per WG | ||||
LC feedback</t> | ||||
<t>Editorial updates and clarifications</t> | ||||
<t>Update draft-ietf-oauth-discovery reference to -10 and draft-ietf-o | ||||
auth-token-binding to -06</t> | ||||
<t>Add folks involved in WGLC feedback to the acknowledgements list</t | ||||
> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-ietf-oauth-mtls-07 | ||||
<list style='symbols'> | ||||
<t>Update to use the boilerplate from RFC 8174</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-ietf-oauth-mtls-06 | ||||
<list style='symbols'> | ||||
<t>Add an appendix section describing the relationship of this documen | ||||
t to OAuth Token Binding as | ||||
requested during the Singapore meeting | ||||
https://datatracker.ietf.org/doc/minutes-100-oauth/</t> | ||||
<t>Add an explicit note that the implicit flow is not supported for ob | ||||
taining certificate | ||||
bound access tokens as discussed at the Singapore meeting | ||||
https://datatracker.ietf.org/doc/minutes-100-oauth/</t> | ||||
<t>Add/incorporate text to the Security Considerations on Certificate | ||||
Spoofing as | ||||
suggested https://mailarchive.ietf.org/arch/msg/oauth/V26070X-6OtbVS | ||||
eUz_7W2k94vCo</t> | ||||
<t>Changed the title to be more descriptive</t> | ||||
<t>Move the Security Considerations section to before the IANA Conside | ||||
rations</t> | ||||
<t>Elaborated on certificate-bound access tokens a bit more in the Abs | ||||
tract</t> | ||||
<t>Update draft-ietf-oauth-discovery reference to -08</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-ietf-oauth-mtls-05 | ||||
<list style='symbols'> | ||||
<t>Editorial fixes</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-ietf-oauth-mtls-04 | ||||
<list style='symbols'> | ||||
<t>Change the name of the 'Public Key method' to the more accurate 'Se | ||||
lf-Signed Certificate method' and | ||||
also change the associated authentication method metadata value to " | ||||
self_signed_tls_client_auth".</t> | ||||
<t>Removed the "tls_client_auth_root_dn" client metadata field as disc | ||||
ussed in | ||||
https://mailarchive.ietf.org/arch/msg/oauth/swDV2y0be6o8czGKQi1eJV-g | ||||
8qc</t> | ||||
<t>Update draft-ietf-oauth-discovery reference to -07</t> | ||||
<t>Clarify that MTLS client authentication isn't exclusive to the toke | ||||
n endpoint | ||||
and can be used with other endpoints, e.g. RFC 7009 revocation and 7 | ||||
662 introspection, | ||||
that utilize client authentication as discussed in | ||||
https://mailarchive.ietf.org/arch/msg/oauth/bZ6mft0G7D3ccebhOxnEYUv4 | ||||
puI</t> | ||||
<t>Reorganize the document somewhat in an attempt to more clearly make | ||||
a distinction between | ||||
mTLS client authentication and certificate-bound access tokens as we | ||||
ll as a more clear | ||||
delineation between the two (PKI/Public key) methods for client auth | ||||
entication</t> | ||||
<t>Editorial fixes and clarifications</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-ietf-oauth-mtls-03 | ||||
<list style='symbols'> | ||||
<t>Introduced metadata and client registration parameter to publish an | ||||
d request | ||||
support for mutual TLS sender constrained access tokens</t> | ||||
<t>Added description of two methods of binding the cert and client, PK | ||||
I and Public Key.</t> | ||||
<t>Indicated that the "tls_client_auth" authentication method is for t | ||||
he PKI method and | ||||
introduced "pub_key_tls_client_auth" for the Public Key method</t> | ||||
<t>Added implementation considerations, mainly regarding TLS stack con | ||||
figuration | ||||
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</t> | ||||
<t>Added new section to security considerations on cert spoofing</t> | ||||
<t>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 certifica | ||||
te thumbprints</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-ietf-oauth-mtls-02 | ||||
<list style='symbols'> | ||||
<t>Fixed editorial issue https://mailarchive.ietf.org/arch/msg/oauth/U | ||||
46UMEh8XIOQnvXY9pHFq1MKPns</t> | ||||
<t>Changed the title (hopefully "Mutual TLS Profile for OAuth 2.0" is | ||||
better than "Mutual TLS Profiles for OAuth Clients").</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-ietf-oauth-mtls-01 | ||||
<list style='symbols'> | ||||
<t>Added more explicit details of using RFC 7662 token introspection w | ||||
ith mutual TLS sender constrained access tokens.</t> | ||||
<t>Added an IANA OAuth Token Introspection Response Registration reque | ||||
st for "cnf".</t> | ||||
<t>Specify that tls_client_auth_subject_dn and tls_client_auth_root_dn | ||||
are RFC 4514 String Representation of Distinguished Names.</t> | ||||
<t>Changed tls_client_auth_issuer_dn to tls_client_auth_root_dn.</t> | ||||
<t>Changed the text in the <xref target="CertificateBoundAccessTokens" | ||||
/> to not be specific about using a hash of the cert.</t> | ||||
<t>Changed the abbreviated title to 'OAuth Mutual TLS' (previously was | ||||
the acronym MTLSPOC).</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-ietf-oauth-mtls-00 | ||||
<list style='symbols'> | ||||
<t>Created the initial working group version from draft-campbell-oauth | ||||
-mtls</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-campbell-oauth-mtls-01 | ||||
<list style='symbols'> | ||||
<t>Fix some typos.</t> | ||||
<t>Add to the acknowledgements list.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-campbell-oauth-mtls-00 | ||||
<list style='symbols'> | ||||
<t> | ||||
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). | ||||
</t> | ||||
<t> | ||||
Fixed "token_endpoint_auth_methods_supported" to "token_endpoint_aut | ||||
h_method" for client metadata. | ||||
</t> | ||||
<t> | ||||
Add "tls_client_auth_subject_dn" and "tls_client_auth_issuer_dn" cli | ||||
ent metadata parameters and | ||||
mention using "jwks_uri" or "jwks". | ||||
</t> | ||||
<t> | ||||
Say that the authentication method is determined by client policy re | ||||
gardless of whether the client | ||||
was dynamically registered or statically configured. | ||||
</t> | ||||
<t>Expand acknowledgements to those that participated in discussions a | ||||
round | ||||
draft-campbell-oauth-tls-client-auth-00</t> | ||||
<t> | ||||
Add Nat Sakimura and Torsten Lodderstedt to the author list. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
draft-campbell-oauth-tls-client-auth-00 | ||||
<list style='symbols'> | ||||
<t> | ||||
Initial draft. | ||||
</t> | ||||
</list> | ||||
</t> | </t> | |||
<?rfc subcompact="no"?> | ||||
</section> | </section> | |||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 222 change blocks. | ||||
1339 lines changed or deleted | 1006 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |