OAuth基本原理

来源:互联网 发布:网络推广部门管理制度 编辑:程序博客网 时间:2024/05/07 15:35

准备用JSON+API的方式来做游味,以减少前后端的耦合。这个思路受启发于douban的API。douban API中讲到了OAuth,于是顺便研究了下,看是不是有必要也支持。

 

OAuth的产生背景

如果校内希望去提取用户的MSN好友列表,有一种方法是(的确曾经用过,还记得吗?):要求用户在校内的一个导入页面输入用户名密码,然后以用户的角色去访问MSN,获得列表。该方法存在很大的安全隐患:校内能够保证不保存我们的MSN密码么?鬼才信!

 

为了解决这个问题,OAuth诞生了。

 

 

 

我愿意将OAuth理解成一种协议,它的思路是:


校内可以用一个特殊的ID号去访问MSN好友列表,并且MSN承认这个ID号。


如何获得这个ID号呢?首先校内请求MSN的一个开放地址:

msn.com/oauth/input_password?key=key_xiaonei&callback=xiaonei.com/wait


现在控制权转移到了msn。msn在input_password页面中让用户输入用户名密码以登陆msn(这是安全的,因为input_password页面位于msn站点内,校内无法控制)

 

成功登陆msn后(如果不成功呢?说明非法呗!),msn会对key校内进行签名得到一个key_public_msn,然后把这个key_public_msn传给xiaonei:

xiaonei.com/wait?key=key_public_msn


从此以后,校内用key_public_msn来访问msn即可,msn肯定会承认key_public_msn。

 

 

 

以上只是一个最简单的思路,真正的OAuth认证要略微复杂一些,主要是为了防止攻击。防攻击的方式有两种:

1、附加随机数。增加猜解难度

2、timestamp。就算猜到,稍后也会过期。

 

 

OAUTH标准提出到现在不到两年,但取得了很大成功。不仅提供了各种语言的版本库,甚至Google,Yahoo,Microsoft等等互联网大头都实现了OAUTH协议。由于OAUTH的client包有很多,所以我们就没有必要在去自己写,避免重复造轮子,直接拿过来用就行了。[2]

 

 

暂时我并没有打算让第三方来访问游味的数据,所以OAuth的支持则不是十分必要了。不过,倒是可以利用OAuth来获得其它网站的数据。例如,校内或豆瓣用户注册游味的时候,可以通过OAuth来获取该用户已有的注册信息,直接导入到游味即可,免去了用户注册的烦恼。

 

 

参考文献:

 

[1] http://kejibo.com/oauth/


[2] http://blog.csdn.net/hereweare2009/archive/2009/03/08/3968582.aspx

 

 

原创粉丝点击