Print

Print


Well, if you want to distribute an application to users that will enable 
them to log in to _their own personal information_, without them ever 
having to enter credentials in a workflow started by that application, 
that's not going to happen, cause it's kind of impossible.

But if you just want to "publish an OAuth-using client that's not easy 
to impersonate" -- well, it depends on what you mean. Do you mean you 
want the server to know that the client application, that is distributed 
to end-users,  is "The Twitterific Client", in a crypto-secure way?  You 
indeed can not do that. This is not OAuth's fault, it's the universe's 
fault.  There is no way to do this absolutely reliably, although the DRM 
people sure try, and Facebook tried, causing the problems that blogger 
was complaining about. There's no other solution that will do that 
either, it's not a unique failing of OAuth, and it's not the problem 
domain OAuth was trying to solve, mainly.

Do you not care about authenticating that the client software is "The 
Twitterific Client", but you just care about knowing that Joe Smith has 
authorized it (whatever it is) to access Joe Smith's twitter account?  
Ah, now THAT is indeed the use case of OAuth. The first one was not the 
use case of OAuth, and Facebook trying to use OAuth anyway to accomplish 
it is what causes the problems.

How do you do this?  By, as mentioned in the blog post you cited, 
following the OAuth specs recommendations, unlike Twitter:

"In many applications, the Consumer application will be under the 
control of potentially untrusted parties. For example, if the Consumer 
is a freely available desktop application, an attacker may be able to 
download a copy for analysis. In such cases, attackers will be able to 
recover the Consumer Secret used to authenticate the Consumer to the 
Service Provider. Accordingly, Service Providers should not use the 
Consumer Secret alone to verify the identity of the Consumer." [right 
from the OAuth spec; that Twitter may have ignored this is not OAuth's 
fault].


Yes, to do this, OAuth requires one of two workflows, neither ideal:
1) Redirect to Twitter where the user logs in, and is then redirected 
back (Ie, similar to Shibboleth or other SSO flows we may be familiar 
with). Problems -- A) this may be hard to do in a non-web applications.  
B)  Succeptible to fishing.  [Note Shibboleth, OpenID,  and most other 
SSO login systems have the exact same issues].

2) Have the user enter their twitter login/password directly in client 
application, which then sends it on to twitter. Problem: Giving your 
twitter credentials to someone else.   It's a _little_ bit better than 
it seems because the OAuth framework allows the client app to 
immediately discard those credentials after using them to get a token 
from Twitter, so the client doesn't have to be responsible for ongoing 
protection of sensitive information.

Not ideal, true. But no other solution is going to do better, because 
that's just how the universe works, unless some genius can come up with 
something nobody's thought of yet. 

Your arguments are against implementing OAuth poorly, and a useful 
reminder that doing anything security related requires thinking 
carefully, and OAuth doesn't get us out of that with an automatic 
solution that will Just Work without thinking.  But your arguments are 
not against OAuth. Maybe they're against trying to do remote 
authentication between two servers AT ALL because of the inherent 
problems with such, heh.

Jonathan




MJ Ray wrote:
> Jonathan Rochkind wrote:
>   
>> Can you give some details (or references) to justify the belief that 
>> OAuth isn't ready yet?  (The fact that Twitter implemented it poorly 
>> does not seem apropos to me, that's just a critique of Twitter, right?).
>>
>> I don't agree or disagree, just trying to take this from fud-ish rumor 
>> to facts to help me and others understand and make decisions.
>>     
>
> The problems with Twitter's poor implementation have been compounded
> by bad management decisions like switching off HTTP authentication and
> an amazing policy on key invalidation, but I agree that's not the
> fault of OAuth.
>
> The key point is in the http://bit.ly/c88aa7 that Joe posted: how can
> one publish an OAuth-using client that's not easy to impersonate?
>
> Requiring every user to fill out registration forms and cut-and-paste
> key strings into a client is not going to fly, so it seems like it
> can't be done except on a very locked-down platform, because the
> consumer secret is distributed to users' systems in the app.  So you
> either ignore the key parts of the 1.0a version (which means that the
> standard needs revision IMO, so is not ready yet), or you jump ahead
> to the 2.0 draft, which is not ready yet because it's still a draft.
>
> Personally, I think the right answer would have been to keep HTTP
> authentication over HTTPS and have some slick way of creating
> subsidiary usernames with limited privileges for apps, but there's
> probably some better solution that I'm missing.
>
> Aside 1: will 2.0 ever work and be ready?  Its editor Eran
> Hammer-Lahav criticises its current state at
> http://hueniverse.com/2010/09/oauth-2-0-without-signatures-is-bad-for-the-web/
>
> Aside 2: to be fair, I'll point out that Eran Hammer-Lahav criticises
> the ars.technica article at
> http://hueniverse.com/2010/09/all-this-twitter-oauth-security-nonsense/
> but does mention that "there is no solution [...] for a distributed
> application" - does that mean OAuth isn't fit for FOSS?
>
> Hope that helps,
>