On Wed, Jul 14, 2010 at 2:32 PM, Torsten Lodderstedt
<tors...@lodderstedt.net> wrote:
> We expected the clients to discard the old refresh token and to use the
> newly issued refresh token instead. The old refresh tokens is revoked
> instantly. Any attempt to use it afterwards is interpreted as a potential
> misuse because the assumption would be that an adversary has copied the
> token or cloned the device. The client should notify the user of the problem
> and recommend him/her to check its application authorizations (refresh
> tokens) in our user self care portal. There, the user will have acces to
> information on when the token has been used the last time and therewith
> detect any odd behavior. The user could then revoke the token and/or alarm
> its providers helpdesk.

My use cases for this are a little different.

1) I'm interested in the two-legged flows as well as three-legged flows.
    For example, imagine an autonomous client that is registered once,
and then after that maintains its own key material.  Regular rotation
of the key material is good cryptographic hygiene.

2) I'm interested in distributed scenarios.
    For example, imagine a geographically distributed client
application, or a client application that is extremely busy.  In both
these cases, you run into race conditions where refresh tokens are
changed even as they are being used.

3) I'm interested in authentication besides bearer tokens, in
particular public keys used to verify assertions.

4) I'm less interested in installed applications.
    I understand your use case for rotating refresh tokens, but it's
somewhat less important for me.

That said, maybe we could arrive at a set of protocol flows that we
would both implement the same way, and would meet all of those use
cases?  For example, would a protocol where the client secret for
installed applications changed regularly work for you?

Maybe something like this:

- when a client contacts the authorization server, it would provide a
hint that it supports key rotation
- the authorization server may return an error code that says "key
rotation needed"
- the client would then generate a new secret key (this could be
either a machine-generated password, or an HMAC key, or a
public/private key pair.)
- the client would then contact the authorization server again,
signing the message with the old key, and providing the verification
material for the new key.
- the authorization server would then store the new key, and mark the
old key for expiration.
- subsequent requests from the client would be signed with the new key

Note that in the case of installed applications using the
user-approval flows, you would associate the new key material with the
client-id and refresh token together, rather than the client-id alone.
 Otherwise it's impossible to look up the verification material for
requests, since you would quickly run into problems with a single
client-id mapping to zillions of secrets.

Cheers,
Brian
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to