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的处理流程。
第二步:升级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: "请求包错误"
}
错误码说明:
请参考公共返回码说明。
以上信息是否解决您的问题?