[Opensim-dev] Authentication and oAuth

Diva Canto diva at metaverseink.com
Sun Mar 1 18:02:01 UTC 2009


Tommil,

Thanks for the pointers about OAuth. I think this is really important. 
We need to figure out what security scheme works best for open Virtual 
Worlds. I don't necessarily think that we need to tie OpenSim to one 
specific scheme, but we really need to figure out what the user 
experience will be with the different schemes. My belief is that Virtual 
Worlds are [should be] slightly different than plain Web because of the 
focus on identity preservation, which the Web has sucked at big time, 
and things that work well for [these annoyingly identity-unaware] Web 
apps may not work so well for VWs. Or, put in another way, we can make 
VWs work better than the Web -- that's my goal, at least :-)

Being a researcher, I am naturally unimpressed by credentials on paper / 
standards, etc; we always need to think through the details and find out 
the real consequences of applying one thing vs. the other in the 
concrete context we have here.

All this is relatively new to me, so I may not have the complete 
picture, but let me make that much needed attempt at comparing 
Capabilities and OAuth in the context of something very concrete in 
OpenSim: inventory access. I'm going to be using a mix of OAuth terms 
and caps terms.

Let's assume that in both cases the untrusted regions are not given 
a-priori the authorization to access the user's inventory service (this 
is policy, not mechanism). Instead, the client that the user is directly 
using will be given that capability/authorization. So assets will flow 
directly from the Service provider to the User's client, without the 
region ever being involved.

The interesting thing is what happens when the user Rezzes something 
from her inventory onto the region. Let's walk through the details in 
each case.

*** Capabilities ***

That POST will be guarded by two capabilities:

(1) The first Capability is the one granted (or not) by the region to 
the user's agent for the function of posting something to it. This cap 
is obtained in the initial negotiation that happens when the user's 
agent connects to the region. This would precede or replace or build 
upon the existing "permissions" -- we would basically move the existing 
authorization logic to capability exchanges. Then posting something is 
just a matter of invoking a secret CAP URL on the region.

(2) The second Capability is the one granted by the user to the region 
for the function of accessing that specific item in her inventory 
service provider. So the user's client would do two things, under the hood:
(a) Instruct the inventory service to place a service handle at a 
specific secret URL, for example:
http://osgrid.org:8004/d65bdadd-781f-41f8-ae68-d1791e7e3af4/<ItemUUID>
(b) Send that secret Cap URL to the region

Note that this would all happen without explicit user intervention; the 
simple fact that the user has issued the "order" to rez an object from 
her inventory in that region would trigger all these capability 
exchanges automatically.

*** OAuth+OpenID ***

The Rez scenario is as follows:

(1) The user's agent posts the order to rez the object to the consumer 
region. There needs to be logic on the region side dictating whether 
that user has the authorization to do such a thing. This logic defies 
OAuth as it is designed, because it would require the region admin (a 
person) to explicitly give the authorization. OAuth assumes that there 
is a *person* involved in the authorization step. So this "person" needs 
to be coded in the regions, more or less like what it is now -- 
ACL-style. The mechanics can be the same, i.e. OAuth protocol, but the 
authorization step is ACL-style, which means that the region needs to 
authenticate the user in another separate/prior step, before the ACL 
logic is run. That authentication would use OpenID - that is, the user's 
request would send her OpenID information; the region would then ask the 
OpenID provider if it has that user there.

After all that, the user's agent finally acquires the authorized token 
to post something to that region.

(2) This second step is the most clean for the typical OAuth use case. 
The region contacts the user's inventory server in order to request a 
token for authorization to access the item. The inventory service 
provider proceeds with the normal OAuth protocol, prompting the user for 
explicit authorization. This is a redundant step from the User's point 
of view, given that the user has, indeed, initiated the process. But 
this redundant step is necessary, because the region might very well try 
to grab an item from the user's inventory without the user having 
started that. So the inventory service really needs to prompt the user 
for authorization. The best we can do is to keep state and logic in the 
client, so that when that prompt comes from the inventory server, it can 
be replied to automatically.

*** Discussion ***

My impression is that the OAuth style of authorization will end up being 
a lot more complicated to implement in the context of VWs than the 
Capabilities style. This is sort of expected, in a way. If you look at 
OAuth, it is designed with very clear roles in mind: there's (a) 
consumers, (b) service providers and (c) users. The users are logged in 
to a specific service (google, flickr, Linden Lab, etc), and OAuth helps 
in giving an eager 3rd party (the consumer) a limited entry in the 
interactions between the user and that service provider.

This works well for the Web.

However, in our case the lines between consumers and service providers 
(and even users) are a lot more blurred. The regions are both consumers 
of the users' assets and service providers -- they allow users to place 
things there, as a service. Mutual authentication and mutual 
authorization is required.

But, those of you who know OpenID+OAuth better than me, please point out 
the mistakes I have done on my walking through the details.


Tommi Laukkanen wrote:
> Hello
>  
> Everyone who is interested in authentication should check this out:
>  
> http://oauth.net/core/1.0/
>  
> Looks well established standard which does OpenId+Tokens and is 
> getting adopted in web industry. What do you think?
>  
> regards,
> Tommi
> ------------------------------------------------------------------------
>
> _______________________________________________
> Opensim-dev mailing list
> Opensim-dev at lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/opensim-dev
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://opensimulator.org/pipermail/opensim-dev/attachments/20090301/e97fcde3/attachment-0001.html>


More information about the Opensim-dev mailing list