Hi,

I just wanted to follow up and see if I could solicit a bit more feedback on this request, since it sounds like the end of the OAuth 2 spec is growing near and I would like to see something added to resolve this problem if at all feasible (or suggestions on how else to deal with it; maybe OIDC is the solution but it’s only half a solution if it’s optional/supplementary).

Thanks,


-- original message follows --

On 25/06/2010 02:30, Colin Snover wrote:
On 24/06/2010 23:30, Luke Shepard wrote:
You're right; this can be an interesting issue. It's very tied up in identity - if you are talking about connecting accounts (like you would with Facebook) then there's a layer missing from OAuth that provides the identity on top of it. At the moment, there are a few proposals (for instance, OpenID Connect) which distinguish between an immediate request (which returns immediately) vs a regular request (which does not).

For now, I think the right behavior is for the client to give the user a chance to switch accounts. That means the identity layer needs to offer a way to log out as well as authorize ( see http://www.sociallipstick.com/?p=189 for more thoughts on this). If you are using Facebook, we offer a custom way to log the user out (http://developers.facebook.com/docs/reference/javascript/FB.logout ).

In any case, Facebook will likely add this layer on top of OAuth once it becomes a little more settled. There has been a lot of discussion on this list lately about exactly what form that should take.

Does that answer the question?

Hi Luke,

Thanks for writing. I’m obviously flying a little blind in regards to what’s already been proposed, so I appreciate the links.

I took a brief look at OpenID Connect. If I am reading this correctly, it would resolve our issue since the client would collect and pass the desired user_id to the authorization server, right? I guess the biggest problem I see here is that unless OIDC support is mandated in the OAuth spec, implicit authorisation will probably continue to happen with providers that don’t want to support it—and I’m guessing there would be a fair amount of opposition to any sort of strong coupling between OAuth and OIDC?

I also did a little more digging through the mailing list while investigating what you said and saw that there was a suggestion earlier for an “immediate” parameter, which appears to address the opposite of the situation I’ve raised and was added in draft 2 (but removed in draft 7). Notes on draft 7 don’t seem to mention its removal, so I’m not entirely sure why it is gone now (because it would mean that OAuth would need to become an identity layer?), but it sounds like there is a desire for /three/ different modes of OAuth operation: an “immediate” mode, a “default” or “hybrid” mode (like OAuth 1.0a), and an “always-reauthenticate” mode. Is that accurate?

Unless I’m misinterpreting what is being suggested, I don’t think that an option to provide a “Log out” link to end-users from within clients is the right way to solve this problem. The ability to authorise multiple accounts from one provider at the same time is essential to what we are trying to do; switching only makes sense if the client can only handle one account at a time. Beyond that, there are a few other issues I can think of with this proposal, which I hope have been raised before:

1. Logging a user-agent out of a provider’s site isn’t really what we want to do here; we just want to provide the end-user an opportunity to authorise an account that happens to /not/ be the account their user-agent is already logged into. Maybe the provider decides that this needs to cause a log out, but OAuth ideally shouldn’t /require/ the interruption of another existing session just because we happen to be using the same user-agent for authorisation.

2. If a programmatic method for logging out was required to solve this problem, it would be wide open to abuse by people that want to be annoying and force people to get logged out of their providers’ sites. (This isn’t terribly uncommon, of course, since most log-outs are simple GET requests, but it seems like something that would be good to avoid perpetuating. I don’t know how Facebook deals with this.)

3. It also seems like a fairly bad idea from a privacy standpoint to provide a mechanism that allows an unauthorised client to determine whether or not a visitor is already logged in on a particular provider’s site, since it opens up a new avenue for history sniffing, etc. In order to resolve the issue I have raised through the use of a “log out” button in the client, this would seem to be necessary without compromising look-and-feel through the use of an iframe. (I seem to have inadvertently neglected to mention in my original message what happens when an end-user’s UA is already logged in to a provider, but the client is /not/ yet authorised: if they want to pick a different account to authorise instead of the already logged-in account, they have to log out of the provider, optionally log in with the correct credentials, then go back to the client and restart the OAuth request from the beginning. That sucks too!)

Anyway, TL;DR: Being able to pre-provide information as to which account is being requested, à la OpenID Connect, is one potential solution, but unless it’s mandated along with OAuth 2, the implicit authorisation problem will still exist for providers that opt out of OIDC. Without turning OAuth into an identity layer, it would seem that a flag to force reauthentication à la my original proposal would be necessary. Of course, this would not solve the “immediate” problem, but it sounds like that’s not safely solvable without identity anyway. Maybe there is another option, but I’m not able to think of one.

Regards,



--
Colin Snover
http://zetafleet.com

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

Reply via email to