While there's been some disagreement about the specific wording etc., there
does seem to be general consensus coming out of this WG to, in one form or
another, recommend against the use of the implicit grant in favor of
authorization code. In order to follow that recommendation, in-browser
JavaScript clients will need to use XHR/fetch (and likely CORS) to make
requests directly to the token endpoint.

Meanwhile there is the MTLS document
<https://tools.ietf.org/html/draft-ietf-oauth-mtls-12> utilizes TLS client
certificates at the token endpoint for client authentication and/or
certificate bound access tokens. The security BCP draft even recommends
sender/key constrained access tokens and MTLS is close to the only viable
way to do that at this time.

Unfortunately, however, these two things don't play very nice together.
When a browser makes a TLS connection where a client cert is requested by
the server in the handshake, even when client certificates are optional and
even when it's fetch/XHR, most/many/all browsers will throw up some kind of
certificate selection interface to the user.  Which is typically a very
very bad user experience. From a practical standpoint, this means that a
single deployment cannot really support the MTLS draft and have in-browser
JavaScript clients using authorization code at the same time.

In order to address the conflict here, I'd propose that the MTLS draft
introduce a new optional AS metadata parameter that is an MTLS enabled
token endpoint alias. Clients that are doing MTLS client authentication
and/or certificate bound access tokens would/should/must use the
alternative token endpoint when present in the AS's metadata. While all
other clients continue to use the standard token endpoint as they always
have. This would allow for an AS to deploy an alternative token endpoint
alias on a distinct host or port where it will request client certs in the
TLS handshake for OAuth clients that use it while keeping the regular token
endpoint as it normally is for other clients, especially in-browser
JavaScript clients.

Thoughts, objections, agreements, etc., on this proposal?

PS Bikeshedding on a name for the metadata parameter is also welcome. Some
ideas to start:
token_endpoint_mtls_alias
token_endpoint_mtls
mtls_token_endpoint_alias
mtls_token_endpoint
alt_token_endpoint_mtls
mtls_token_endpoint_alt
a_token_endpoint_that_a_client_wanting_to_do_mtls_stuff_a_la_RFC_[TBD]_should_use
equally_poor_idea_here

-- 
_CONFIDENTIALITY NOTICE: This email may contain confidential and privileged 
material for the sole use of the intended recipient(s). Any review, use, 
distribution or disclosure by others is strictly prohibited.  If you have 
received this communication in error, please notify the sender immediately 
by e-mail and delete the message and any file attachments from your 
computer. Thank you._
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to