OAuth in OpenSocial 序篇
OAuth的基本概念
这个不是本文重点,不过我在学习OAuth中也总结了一些有用的资料:
- OAuth官方网站 : http://oauth.net/
- OAuth教程Blog : http://hueniverse.com/oauth/
- Google OAuth : http://code.google.com/apis/accounts/docs/OAuth.html
- 附件是我最初学习OAuth做的PPT,里面把一些经典的例子都涉及到了,有兴趣的可以看一下。
- Demo OAuth的好地方,OAuth Playground : http://googlecodesamples.com/oauth_playground/
- 另一个OAuth Demo : http://oauthexample.appspot.com/Welcome
重点还是关注OpenSocial中的OAuth应用:
主要参考文章:http://wiki.opensocial.org/index.php?title=OAuth_Use_Cases
OpenSocial中OAuth的需求
OpenSocial需要OAuth,是很容易理解的,因为OpenSocial的API基本都是取私人数据的,比如如下图的Gadget,是获取Google的联系人,这是非常隐私的私人数据,此处虽然是在Google的ig中取Google的联系人,并且用户在登录状态,但是仍可使用或者某些场景需要OAuth来取私人数据,为什么?
虽然都在Google内,但是我们得分开考虑:
- ig是个gadget容器,实际上可以理解为Gadget的App Server,在OAuth中为Consumer.
- 我们要取的联系人是Google的一项服务,实现了Open Social的API,在OAuth中为SP Provider
OAuth 签名用到的key
Consumer Key 和 Secret
对于需要用到OAuth的Gadget,他们都有一对自己使用的Consumer Key和Secret.
这对Key保存在两个地方:
①Social Network:上例就是联系人服务的server,如果通过OAuth的方式取联系人,要在此Server上注册一对Consumer Key和Secret.
②Gadget容器所属的App server:这里也要保存的原因是,Gadget本身不具备发起OAuth Request的能力,OAuth签名等操作实际是在App Server中进行的,因此App Server需要保存这对Key。
保存方式是建立关系映射,例如 mygadget:key&secret,这样gadget发起OAuth请求(此请求非实际请求,而是请求App server作为代理代发OAuth请求的请求+_+),Gadget容器就知道应该使用哪对Key&Secret签名。
这也就建立了Gadget与App Server的联系。
还拿上面的例子(并非真相,只是做例子解说),简而言之,Gadget的作者写完取google联系人的gadget后,在google联系人server的OAuth注册处注册了一对key&secret,随后,在gadget容器,也将此key&secret保存(我现在很后悔用ig和google联系人做例子,因为Google可能不需要这么麻烦的= =#,如果是两个不相干的App Server和social network,则这个流程是必须的..,实际上Google注册key&secret时按Domain来的,不过我没domain%>_<%,所以也不清楚真相,有domain的可以到下面的link尝试一下https://www.google.com/accounts/ManageDomains)
用来验证Gadget所用key&secret的link : https://www.google.com/gadgets/directory/verify
public/private Key
有些Gadget容器不但支持Consumer Key和Secret的方式签名。
还支持非对称加密,这个很好理解:
Gadget容器保存自己的keystore,即私钥,用来对OAuth签名,然后将证书发布出去。
Social Site保存证书,以便取得公钥,用来验签名
下面这个link可以得到各大Gadget容器的证书:https://opensocialresources.appspot.com/certificates/
OpenSocial and 3-legged OAuth
>点我链接至< :OAuth in OpenSocial-第一篇:3-legged OAuth实例分析
OpenSocial and 2-legged OAuth
>点我链接至< : OAuth in OpenSocial-第二篇:2-legged OAuth