OAuth初探
sshong 发表于2014年4月28日 03:36:07 更新于2014年4月28日 04:05:57
以前在做lishiju社交账号登录时,已经初步研究过国内的sina、qq、baidu OAuth登录,不过那时也是对着文档一步步走下来,倒也没有觉得有什么可以记录的。

最近在项目中遇到facebook、twitter、fitbit的集成,又用到了OAuth,却有了很大的困惑,究其原因是twitter、fitbit用的是OAuth1,而facebook用的是2.0,相比较而言,2.0的使用会简单很多。这里简单的做一点自己理解的记录。

1、OAuth 1.0(1.0a)

1.1 用户访问网站某个url,这个url可能是用于读取第三方如facebook等的资源或者是绑定第三方账号。
1.2 网站检测本地数据库该用户是否有授权绑定过第三方账号(有就直接1.6)。
1.3 网站向第三方请求一个临时令牌(request token),请求时需要开发者申请的app id和app secret。第三方认证后,返回一个临时令牌。
1.4 网站收到临时令牌跳转到第三方的授权页面(需要传递临时令牌以及回调url),用户会在这个页面输入用户名密码登录并决定是否授权。(authorize)
1.5 授权成功后第三方会跳转到本地网站的回调url(会以get方式把临时令牌、授权信息oauth_verifier),此时网站就可以根据临时令牌以及返回的授权信息调用第三方接口转换为最终的访问令牌(access token)
1.6 此后就可以访问api了,当然需要在http调用api的头部加入access token以及token secret等等很多很多参数(很恶心)
oauth1

参考:
OAuth维基百科
twitter oauth流程
fitbit流程

2、OAuth2
OAuth2.0的最大改变就是不需要临时token了,直接authorize生成授权code,用code就可以换取access token了,同时access token加入过期,刷新机制,为了安全,要求第三方的授权接口必须是https的。

2.1 用户访问网站某个url,这个url可能是用于读取第三方如facebook等的资源或者是绑定第三方账号。
2.2 网站检测本地数据库该用户是否有授权绑定过第三方账号(有就直接2.5)。
2.3 网站向第三方申请授权(authorize),请求时需要开发者申请的app id以及回调url,用户会在这个页面输入用户名密码登录并决定是否授权。(authorize)
2.4 授权成功后第三方会跳转到本地网站的回调url(会以get方式返回授权信息Authorization Code),网站根据code以及app id、appi secret换取最终的访问令牌(access token)
2.5 此后就可以访问api了,只需在http调用的url里以get方式传递access_token参数即可
oauth2

参考:
The OAuth 2.0 Authorization Framework
facebook OAuth
QQ OAuth
baidu OAuth
微博 OAuth

其他一些的作者的日志:
Oauth1.0与oauth2.0的区别
OAuth的改变
新浪微博OAuth2.0 VS OAuth1.0 主要区别
标签:无分类:Webserver阅读:4837
评论
暂无评论
添加评论
您的大名,限长10汉字,20英文(*)
电子信箱(*)
您的网站
正文,限长500汉字,1000英文(*)
验证码(*) 单击刷新验证码
联系我
博客订阅