以前在做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等等很多很多参数(很恶心)
参考:
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参数即可
参考:
The OAuth 2.0 Authorization Framework
facebook OAuth
QQ OAuth
baidu OAuth
微博 OAuth
其他一些的作者的日志:
Oauth1.0与oauth2.0的区别
OAuth的改变
新浪微博OAuth2.0 VS OAuth1.0 主要区别
OAuth初探
发表于2014年4月28日 03:36:07 更新于2014年4月28日 04:05:57
评论
暂无评论添加评论
分类
琐碎文字 As3&Flex RIA UG English CodingArt C++ PHP Webserver E音乐盒 Unity3d C# JS&Html5 Tools mobile golang 最近发表
- golang学习之函数/方法/接口(2022年1月6日 17:50:24)
- golang学习之零值(2022年1月6日 16:38:10)
- hello, 2018(2018年1月15日 22:47:25)
- 字体类型名词解释(2015年1月18日 11:29:14)
- 获取mysql表注释以及列注释(2014年11月13日 15:56:32)
- php连接ms sql数据库的一些问题(2014年9月15日 20:32:14)
- virtualbox虚拟网络:NAT&bridge桥接网络(2014年8月25日 22:51:35)
- php图片加水印(2014年8月15日 22:50:42)
- windows查看端口占用情况(2014年7月31日 21:19:30)
- android安卓activity生命周期(2014年7月12日 10:31:47)
最近回复