最近老板有意与淘宝合作,网站需要支持淘宝登陆验证与授权,所以研究了下淘宝的第三方登陆,基于OAuth2.0(其实也没啥好说的,原理都一样,主要是一些细节)。写blog的原因是当时研究这玩意是发现文档只有两个版本,一个是官网提供的(http://open.taobao.com/doc2/detail.htm?articleId=118&docType=1&treeId=null),一个是写了一半的技术文档(http://blog.chinaunix.net/uid-25528943-id-3127111.html),却被无数人转载,本人实在看不下去了,功能走通上线后,有时间就把这文档写了,让更多的人可以学习。
1)申请app ID 和 app secret (http://my.open.taobao.com/),然后注册应用,这里应该有让你填个回调地址,即redirect_uri(如果没填,也还可以在控制台-应用设置-基本信息,勾选需要商家授权,这时填你的回调地址:www.xxx.com)
2) 开发者通过 https://oauth.taobao.com/authorize 获取用户授权码,即code。参数:
参数 | 参数值 | 说明 |
---|---|---|
* client_id | 即开发者的APPKEY | |
* response_type | code | 相应类型,填code,即授权码 |
* redirect_uri | 回调地址。此地址是开发者注册应用时填写的回调地址(如果不一致,将返回错误)。 | |
scope | 访问区域。 | |
state | 用于维持应用状态,淘宝服务器将回填这个值。 | |
view | 可选值:web(默认)、tmall、wap。 |
以下是一个请求授权码的示例:
https://oauth.taobao.com/authorize?response_type=code&client_id=12539988&redirect_uri=http://www.xxx.com/taobao/auth&state=1
收到请求后,淘宝服务器返回值:
参数说明
code授权码 正常结果。
error错误码 异常时返回
error_description错误描述 异常时返回。
如果淘宝服务器返回的值有code,恭喜你,已经完成第二步,如果错误请在http://open.taobao.com/doc2/detail.htm?articleId=118&docType=1&treeId=null的最后错误排查中排查自己的错误。
3)拿到授权码code后,就可以换取用户基本信息。
用post请求
https://oauth.taobao.com/token?grant_type=authorization_code&response_type=code&client_id=23294542&client_secret=27552d4ac86de9603cd4fe0d125e6062&redirect_uri=http%3A%2F%2Fwww.xxx.com%2F&code=X9XPfI9JVHiTgKME6JyAXDAD315945(填写淘宝服务器返回给你code)
这样你就可以得到类似的数据:
{
"taobao_user_nick": "taobaonick",
"re_expires_in": 0,
"expires_in": 7776000,
"expire_time": 1459911894299,
"r1_expires_in": 1800,
"w2_valid": 1452135894299,
"w2_expires_in": 0,
"w1_expires_in": 1800,
"r1_valid": 1452137694299,
"r2_valid": 1452135894299,
"w1_valid": 1452137694299,
"r2_expires_in": 0,
"token_type": "Bearer",
"refresh_token": "620251524f72a26b6c8ecd1ZZe29bbbxxx",
"open_uid": "AAENArTTACOmNcx4Z-_D0qU2",
"refresh_token_valid_time": 1452135894299,
"access_token": "620141595ca09af54aa5918ZZeafd0c0fe770bb07xxx"
}
这样整个认证过程就结束了,你接下来要做的是就是创建两个url,一个是login,一个是auth,然后数据库存从淘宝服务器上得到的这些信息(或者再你的user表中创建等等)
.......