由于OAuth 1.0协议体系本身存在一些问题,现已被各大开发平台逐渐废弃。现推荐各开发者将接口升级到OAuth 2.0,以保证更安全,高效的访问。
QQ互联开放平台新增API都只提供OAuth2.0的版本,建议开发者进行升级以享受更多的功能。
OAuth1.0停止服务时间
1. 2012年11月30日,所有OAuth1.0的“未审核应用”不予审核通过;
2. 2012年12月31日,禁止所有“QQ登录次数>10,000”的OAuth1.0网站和移动应用使用QQ登录;
3. 2013年3月初,禁止所有OAuth1.0网站和移动应用使用QQ登录,具体时间请关注QQ互联官网和官方微博; 2. 如何升级到OAuth2.0协议第一步:实现OAuth2.0协议的授权流程 第二步:升级OAuth1.0的用户为OAuth2.0的用户
1. 在数据库中同时记录OAuth1.0与OAuth2.0的Token信息
实现OAuth2.0协议后,由于通过OAuth2.0获得的Access Token与通过OAuth 1.0获得的OAuth Token互不兼容,两者不能混用。因此建议开发者将OAuth1.0与OAuth2.0的Token信息分别存储。例如可采用如下的数据库表格存储用户信息:
2. 升级OAuth1.0的用户
由于以后QQ互联开放平台新增API都只提供OAuth2.0的版本。因此建议开发者将所有OAuth1.0用户升级到OAuth2.0用户。 升级方法很简单,只需要将用户的OAuth Token更换为Access Token即可。 腾讯提供了Access Token的更换接口,接口调用方法如下:
请求方法:
GET
请求参数:
请求参数请包含如下内容:
返回说明:
请求示例:
http://openapi.qzone.qq.com/user/get_oauth2_token? oauth_consumer_key=100085&oauth_token=DKJFDKHNKVHHKDNX&oauth_nonce=34887553&
oauth_timestamp=1354181193&oauth_version=1.0&oauth_signature_method=HMAC-SHA1&oauth_signature=D890CA0909909C0888& openid=HXMDKKKIKKNNVKKDXXiDVV&format=json
正确返回示例:
{
"ret":0 "openid":"1704************************878C", "token":"88VD*************KHHH", "expire":"7776000" }
错误返回示例:
{
ret: 41002, msg: "请求包错误" } 3. 常见问题3.1 OAuth 2.0需要申请吗?
OAuth 2.0不需要申请,所有注册的应用都可以正常调用。
3.2 在实现OAuth2.0协议时应该注意什么?
建议使用QQ互联提供的
SDK。如果没有合适的语言版本,请注意
server-side模式的Step1中的state参数的处理:
3.3 升级到OAuth 2.0后原有的API还可以使用吗?
1.在发起授权流程生成state参数时,要保证随机生成,并且尽量避免重复。例如:state= MD5(时间戳+当前帐号)。 2.生成后要和当前登录的用户进行绑定。这里建议两种实现方式: 1)把state放在用户的cookie中; 2)把state放在该用户在服务端的session里。 3.在Step1请求Authorization Code时必须传递state参数。 4.腾讯服务器在响应Step1的请求后,将重定向到开发者的服务器。此时开发者的服务器应检测state参数是否一致(即cookie或session里的state)。如果不一致,开发者的服务器应该拒绝此请求,并且不再发起换取access_token的请求。如果一致,则流程正常运行。 强烈建议开发者实现以上过程,以防止CSRF攻击。
所有接口依然可以调用,但OAuth 相关的参数需要按照OAuth 2.0协议传递。并且所有接口必须以https的方式调用。具体请参考
调用说明。
3.4 access_token过期后怎么处理?
access_token过期调用接口时,平台会返回错误码为100014的错误,此时需要引导用户重新进行授权。建议在每次获得用户授权时保存过期时间,在每次调用接口前判断用户access_token是否过期。
token过期时间为3个月。如果存储的access token过期,请重新走登录流程, 使用Authentication_Code 获取新的access token值。 |