`
isiqi
  • 浏览: 16033376 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

OAuth基本原理

 
阅读更多

准备用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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics