OAuth1.0升级到OAuth2.0指引

目录

1. 为什么要升级到OAuth2.0协议

由于OAuth 1.0协议体系本身存在一些问题,现已被各大开发平台逐渐废弃。现推荐各开发者将接口升级到OAuth 2.0,以保证更安全,高效的访问。

QQ互联开放平台新增API都只提供OAuth2.0的版本,建议开发者进行升级以享受更多的功能。

2. 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互联官网官方微博

3. 如何升级到OAuth2.0协议

第一步:实现OAuth2.0协议的处理流程

请参考文档OAuth2.0的处理流程。强烈建议使用server-side模式调用。

第二步:升级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信息分别存储。例如可采用如下的数据库表格存储用户信息:

UserID TX_OpenID TX_OAuth_Token TX_Access_Token
Tom1998 1704************************878C OAuth1.0的Token OAuth2.0的Token


2. 升级OAuth1.0的用户
由于以后QQ互联开放平台新增API都只提供OAuth2.0的版本。因此建议开发者将所有OAuth1.0用户升级到OAuth2.0用户。
升级方法很简单,只需要将用户的OAuth Token更换为Access Token即可。
腾讯提供了Access Token的更换接口,接口调用方法如下:

请求地址
http://openapi.qzone.qq.com/user/get_oauth2_token

请求方法
GET

请求参数

请求参数请包含如下内容:

参数 是否必须 含义
oauth_consumer_key 必须 申请QQ登录成功后,分配给网站的appid。
oauth_token 必须 具有用户数据访问权限的OAuth 1.0的OAuth Token。
oauth_nonce 必须 随机字符串,int型。
oauth_timestamp 必须 unix时间戳(UTC时间从1970年1月1日00:00:00到当前时刻的秒数)。注意开发者的服务器时间与腾讯服务器时间相差不能超过5分钟
oauth_version 必须 版本号,请固定使用1.0。
oauth_signature_method 必须 签名方法,请固定使用HMAC-SHA1。
oauth_signature 必须 签名值,用来提高传输过程参数的防篡改性。签名值的生成详见签名参数oauth_signature的说明
openid 必须 与用户的QQ号一一对应的openid。
oauth_client_ip 可选 用户的IP地址。
format 可选 定义API返回的数据格式。取值说明:为xml时表示返回的格式是xml;为json时表示返回的格式是json。注意:json、xml为小写,否则将不识别。format不传或非xml,则返回json格式数据。。


返回说明

参数 说明
ret 错误码
msg 错误信息
openid 用户对应的openid
token 生成的oauth 2.0的access_token
expire access_token的过期时长,以秒为单位


请求示例

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: "请求包错误"
}


错误码说明
请参考公共返回码说明

以上信息是否解决您的问题?

Copyright © 1998 - 2017 Tencent. All Rights Reserved.

腾讯公司 版权所有

有问必答 返回顶部