See below...
Phil

@independentid
www.independentid.com
phil.h...@oracle.com





On 2011-09-07, at 4:57 PM, Dave Rochwerger wrote:

> Hi Phil,
> 
> >> The client is then forced to periodically reauthenticate (without the 
> >> user) before getting a new access token. 
> What benefit does that have?

The user does not have to be present.  
> 
> >> Refresh also gives the authzn server a chance to revoke access. Hence it 
> >> is better to use shorter lived access tokens with long lived refresh 
> >> tokens. 
> That doesn't follow - we can just as easily revoke the single long-lived 
> access token.

As Eran points out, you'd have to have do a DB lookup to have true revocation. 
But, by having a short expiration time on the access token (say 1 hour or 
less), you get quasi-revocation which has to be re-validated after the access 
token expires and the client has to re-authenticate and provide a valid refresh 
token.  In this sense you get the best of a long-lived credential, combined 
with good key rotation and authorization re-verification without having to 
re-involve the end-user.

> 
> Dave.
> 
> On Wed, Sep 7, 2011 at 4:24 PM, Phillip Hunt <phil.h...@oracle.com> wrote:
> You can also use a long lived refresh token in combination with a short 
> access token. The client is then forced to periodically reauthenticate 
> (without the user) before getting a new access token. 
> 
> Refresh also gives the authzn server a chance to revoke access. Hence it is 
> better to use shorter lived access tokens with long lived refresh tokens. 
> 
> Phil
> 
> On 2011-09-07, at 15:27, William Mills <wmi...@yahoo-inc.com> wrote:
> 
>> I'll talk to the refresh token question:  they give you a hook for 
>> extensibility and key rotation.  If you want to rotate your encryption keys 
>> or extend the data carried in the token in any way then you want to be able 
>> to cleanly refresh your tokens.  Note that the refresh flow allows you to 
>> issue a new refresh token at the same time.  It also allows a clean path to 
>> convert tokens in a new client if you decide you want SAML tokens instead of 
>> MAC for example.
>> 
>> If you want those things you want to use refresh tokens.  You can have long 
>> lived access tokens too, and just use the refresh tokens when you want to do 
>> something new with the access tokens.
>> 
>> -bill
>> 
>> From: Dave Rochwerger <da...@quizlet.com>
>> To: oauth@ietf.org
>> Cc: Quizlet Dev Team <devt...@quizlet.com>
>> Sent: Wednesday, September 7, 2011 2:15 PM
>> Subject: [OAUTH-WG] OAuth2 Implementation questions (client secret and 
>> refresh tokens)
>> 
>> Hi all,
>> 
>> I have been implementing OAuth2 based on the various drafts for our new API. 
>> Initially, I implemented everything as per the spec, but due to our 
>> particular scenario and restrictions we have in place, there are some 
>> fundamental questions that I am unable to defend.
>> 
>> I am hoping this group could help answer them for me.
>> 
>> Our scenario:
>> ==========
>> * We are implementing an API to allow 3rd party developers to access users' 
>> protected resources via their applications. The applications will mostly be 
>> native phone apps, but some will have web server backends (javascript-only 
>> applications are not a concern at the moment).
>> * We want to provide very long-lived (forever) tokens.
>> * We are implementing the "authorization code" flow as that seems best 
>> suited to us (we don't want the implicit flow because end-users would have 
>> to re-authorize every hour).
>> 
>> Our architecture:
>> ============
>> * We control both the API server and the authorization server.
>> * All requests to protected resources (ie: to the API server) are always 
>> done over SSL.
>> * All requests to the authz server (token and authorize endpoints) are 
>> always done over SSL.
>> * We enforce that every client must supply the state parameter (and our 
>> guidelines say they must verify the state for CSRF mitigation).
>> * We enforce that every client must register a redirect URI.
>> * We validate the redirect_uri used to request an access token is the same 
>> that was used to obtain the auth code.
>> * The only time a request is not made over SSL is the redirect with the 
>> auth_code which is very short-lived (30 seconds) and is tied to a verified 
>> redirect URI.
>> * We enforce that access tokens must be provided using the Authorization 
>> header only (and of course, over SSL).
>> * We have guidelines saying that all mobile apps must use the native browser 
>> (and not an embedded web UI).
>> 
>> Questions:
>> ========
>> 1. Given the above scenario, what use are refresh tokens?
>>   - Access tokens can not leak because every request (to resource and authz 
>> server) containing an access token is done over SSL. We control both the 
>> authz and resource servers, so tokens in logs (and other suggested reasons 
>> in the archives) are not an issue.
>>   - Long-lived refresh tokens and short-lived access tokens are supposed to 
>> provide security due to possible access token leakage... but in our 100% SSL 
>> scenario, if access tokens are able to leak, then so would the client id, 
>> secret and refresh token.
>>   - Having a long-lived refresh token that can be exchanged for another 
>> access token adds a level of complexity (a second HTTPS request every so 
>> often) and seems to provide no benefit for our case.
>> 
>> 
>> 2. What is the point of the client secret (in our scenario)? 
>> - We originally were treating the clients as confidential, but after 
>> re-reading the native-application section, it seems we really should treat 
>> them as public (phone apps can be decompiled and the secret discovered).
>> - The spec says that the authz server should authenticate confidential 
>> clients, but public clients are allowed to just send their public client id 
>> (and no secret).
>> - The only verification then, is to enforce redirect URI registration and to 
>> validate the redirect URI between authorization and token steps.
>> 
>> So, the question is, assuming that we, one: "enforce redirect-URI 
>> registration" and two: "validate that URI" - why can't we treat all clients 
>> as public and not worry about a secret?
>> What is the benefit of having confidential clients (and a secret) at all? 
>> 
>> 
>> Our API source is not available, but the oauth2 server implementation can be 
>> seen here: https://github.com/quizlet/oauth2-php
>> 
>> Regards,
>> Dave
>> 
>> 
>> _______________________________________________
>> 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
> 

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

Reply via email to