That is, to take another tack at this that might make it more clear:
The fact that Software Instance A is authorized to do something on
Server B is _not_ baked in at compile time to Software A. That is not
OAuth's security model, in part because it is not a feasible security
model, nobody has yet figured out a way to do that.
Instead, the fact that Software Instance A is authorized to do something
on Server B is, neccesarily, in OAuth's model, determined at run time
with the interaction of a user. Once the user does this interaction,
Software Instance A can keep a security token around that will let it
keep doing that Something on Server B for a Very Long Time, until the
token expires. But that initial authorization requires user interaction
at run-time. That is OAuth's security model.
OAuth's security model does not require each piece of client software to
have a baked-in key of any kind. OAuth does require that there be a
user who has a secret (ie, a login/password) on the foreign server, and
that the user be asked for that secret and enter it (usually directly on
the foreign server, Shibboleth-style) before the first time the software
instance accesses the protected functionality.
Jonathan
Jonathan Rochkind wrote:
MJ Ray wrote:
What is the use case? http://oauth.net/core/1.0a/ claimed "OAuth
creates a freely-implementable and generic methodology for API
authentication." Shouldn't we expect generic authentication to
include authenticating both peers?
OAuth, as I understand it, is about confirming that (eg) Jonathan
Rochkind has given authorization to Software A, to access API services
that read and write to confidential information associated with Jonathan
Rochkind's account on Server B. Server B can be sure that Jonathan
Rochkind authorized Software A to do that. (Or someone that knew
Jonathan Rochkind's secret password did, anyway). And additionally can
let Jonathan Rochkind specify to Server B exactly _which_ services he'd
like to authorize Software A to use, not just all or nothing. Which
happens to be the problem case that ILS api stuff finds itself dealing
with.
I am fairly certain there is _no_ protocol that will allow you to
securely prove that a piece of software on the network is really a
trusted _copy_ of software, when copies of that software are distributed
to untrusted users. It is not a solvable problem. I guess if OAuth
documentation implies they solve it, you can fault them for implying it,
but you can't fault them for not doing it. I am positive you will be
able to find no protocol anywhere that does that. If you need that,
then OAuth will work as well as anything else you can find -- that is,
it won't work, and neither will anything else.
Jonathan