Comments in-line:

> On 14 Mar 2019, at 18:50, Brian Campbell <bcampb...@pingidentity.com> wrote:
> 
> Certificate-binding refresh tokens issued to *public clients* (those that 
> don't have authentication credentials established with the AS, a.k.a. clients 
> configured or registered with the "none" authentication method, which will 
> typically be native apps on a phone or similar) adds protections against 
> malicious use or reuse of those refresh tokens where no protections would 
> otherwise exist.

Refresh tokens have a different threat model to access tokens as they are only 
communicated directly between the client and the AS over a secure channel.. The 
main risk is of them being compromised on the client [*], but then a private 
key is at the same risk. Even if you generate the private key in a TPM on the 
device (eg mobile device with secure hardware), any malicious actor that is 
able to extract the refresh token from the client is also presumably in a 
position to either proxy requests through an existing TLS connection on that 
client or else interact with the TPM to create a new one. 

[*] Or by a compromise of TLS, but that breaks everything. 

> It's true that certificate rotation in that situation would invalidate the 
> refresh token. But not being able to rotate a strong asymmetric credential 
> without invaliding the refresh token seems a very reasonable trade off vs. 
> not having a credential bound to the token at all. 

I would not make that trade-off. If you are at OSW next week, I am presenting 
some cases for OAuth mTLS in a kubernetes environment that have public clients 
with long-lived grants that use refresh tokens to periodically rotate certs. 

> I guess I would say that what is returned when introspecting such a refresh 
> token is an implementation detail that is at the discretion of said 
> implementation. That seems consistent with the level of guidance in 
> introspection for refresh tokens currently. And there's not really an 
> interoperability angle that I can see. So that seems fine. Also, some form of 
> authorization is required to access the introspection endpoint so I'm not 
> sure how a refresh token issued to a public client would realistically get 
> introspected. I guess, if I'm being honest, I don't really get refresh token 
> introspection in general so probably better that I stop opining on the 
> subject. 

Ok, I’m happy to just ignore that aspect for refresh tokens then. 

— Neil

> 
> 
> 
> 
> 
> 
>> On Thu, Mar 14, 2019 at 7:13 AM Neil Madden <neil.mad...@forgerock.com> 
>> wrote:
>> It’s not clear to me how this works or what problem it is solving.. If a 
>> refresh token is bound to the certificate, does that mean that a call to the 
>> introspection endpoint with that refresh token should also return a “cnf” 
>> claim as per 
>> https://tools.ietf.org/html/draft-ietf-oauth-mtls-13#section-3.2 ? 
>> 
>> It also seems problematic to implement this for refresh tokens. As mentioned 
>> by Filip, rotation of the certificate is out of the question. Currently in 
>> our implementation a client could present a new certificate when using the 
>> refresh token and this would result in the newly issued access token being 
>> bound to the new certificate. If the refresh token is bound to the original 
>> certificate, then this would be ruled out (the new certificate would be 
>> rejected) and certificate rotation becomes impossible in all cases. Am I 
>> missing something?
>> 
>> — Neil
>> 
>> > On 14 Mar 2019, at 12:28, Brian Campbell <bcampb...@pingidentity.com> 
>> > wrote:
>> > 
>> > Yeah, so regular old RFC 6749 OAuth requires that a refresh token be bound 
>> > to the client to whom it was issued. And that confidential clients (those 
>> > having established authn credentials) authenticate to the AS when 
>> > presenting a refresh token. Thus, for both MTLS methods of OAuth client 
>> > authentication, refresh tokens are indirectly certificate-bound through 
>> > their binding to a client and its credentials (and the client rotating its 
>> > cert doesn't invalidate the refresh token).
>> > 
>> > What was added in the -13 revision of the draft (in a new section 
>> > https://tools.ietf.org/html/draft-ietf-oauth-mtls-13#section-4) was a 
>> > brief description of certificate binding refresh tokens for public clients.
>> > 
>> > The ask from Vittorio was a mention of refresh tokens in abstract. Which 
>> > seems reasonable. But the proper wording to succinctly and accurately 
>> > convey the aforementioned subtleties is proving difficult for me.
>> > 
>> > 
>> > 
>> > 
>> > 
>> > On Thu, Mar 14, 2019 at 2:26 AM Neil Madden <neil.mad...@forgerock.com> 
>> > wrote:
>> > Right - this is what we have implemented. No support for certificate-bound 
>> > refresh tokens, the client can be configured to require TLS cert client 
>> > authentication instead. 
>> > 
>> > Neil
>> > 
>> > On 14 Mar 2019, at 08:09, Filip Skokan <panva...@gmail.com> wrote:
>> > 
>> >> Point being that since the refresh token is only usable on the IdP then 
>> >> mtls client auth already covers this, and since RTs are long-lasting, it 
>> >> does this better because cert rotation is possible for both mtls methods.
>> >> 
>> >> S pozdravem,
>> >> Filip Skokan
>> >> 
>> >> 
>> >> On Thu, 14 Mar 2019 at 08:07, Filip Skokan <panva....@gmail.com> wrote:
>> >> Even before refresh tokens were mentioned in draft 13 i was about to 
>> >> implement this binding in nodejs oidc-provider,
>> >> 
>> >> the thing i struggled with and ultimately didn't do this was
>> >> 
>> >> 1) if the refresh token is bound to a specific cert then this cert 
>> >> rotation is out of the question
>> >> 2) if having the RT somehow covered is needed, isn't MTLS client auth 
>> >> already the right thing to do? Especially given it supports cert rotation
>> >> 
>> >> Now the normative language is SHOULD therefore disallowing cert rotation. 
>> >> Or am I missing something?
>> >> 
>> >> S pozdravem,
>> >> Filip Skokan
>> >> 
>> >> 
>> >> On Thu, 14 Mar 2019 at 00:21, Brian Campbell 
>> >> <bcampbell=40pingidentity....@dmarc.ietf.org> wrote:
>> >> As I kinda said on that call, I understand the ask and I do think it'd be 
>> >> reasonable to mention refresh tokens in the abstract now that the 
>> >> document does describe binding refresh tokens to the client certificate 
>> >> with public clients. 
>> >> 
>> >> I'm struggling to see the fix as pretty easy, however, given the text of 
>> >> the abstract (copied below for ease of reference) and the content and 
>> >> scope of the document. 
>> >> 
>> >> Do you think changing the first sentence to have "certificate-bound 
>> >> access and refresh tokens" is sufficient (and accurate)? 
>> >> 
>> >> Or something more or different? In which case proposed text is always 
>> >> welcome.
>> >> 
>> >> Abstract
>> >> 
>> >>    This document describes OAuth client authentication and certificate-
>> >>    bound access tokens using mutual Transport Layer Security (TLS)
>> >>    authentication with X.509 certificates.  OAuth clients are provided a
>> >>    mechanism for authentication to the authorization server using mutual
>> >>    TLS, based on either self-signed certificates or public key
>> >>    infrastructure (PKI).  OAuth authorization servers are provided a
>> >>    mechanism for binding access tokens to a client's mutual TLS
>> >>    certificate, and OAuth protected resources are provided a method for
>> >>    ensuring that such an access token presented to it was issued to the
>> >>    client presenting the token.
>> >> 
>> >> 
>> >> On Mon, Mar 11, 2019 at 4:06 PM Vittorio Bertocci 
>> >> <vittorio.bertocci=40auth0....@dmarc.ietf.org> wrote:
>> >> Hi all,
>> >> during today's office hours call I pointed out that oauth-mtls-13's 
>> >> abstract only mentions access token, although the spec does provide 
>> >> (some) guidance on  refresh token binding as well.. 
>> >> Although in the end implementers would do the right thing, given that 
>> >> they have to read the spec in its entirety, having a mention of refresh 
>> >> tokens in the abstract as well would make it easier for superficial 
>> >> readers to learn that the spec does address RTs as well. Refresh tokens 
>> >> leakage is one of the top concerns of the customers I deal with, and 
>> >> those people rarely read specs from cover to cover: having language in 
>> >> the abstract explicitly calling out RTs might make some conversations 
>> >> easier.
>> >> 
>> >> This is admittedly very minor, but the fix would also be pretty easy, 
>> >> _______________________________________________
>> >> OAuth mailing list
>> >> OAuth@ietf.org
>> >> https://www.ietf.org/mailman/listinfo/oauth
>> >> 
>> >> 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
>> >> _______________________________________________
>> >> OAuth mailing list
>> >> OAuth@ietf.org
>> >> https://www.ietf.org/mailman/listinfo/oauth
>> > 
>> > 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.
>> 
> 
> 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