[转载]腾讯微博oauth的原理与认证流程

news/2024/6/17 7:24:49 标签: java, json

腾讯微博oauth的原理与认证流程

原文链接地址为http://www.w82.org/archives/915

 

腾讯微博API通过以下四个步骤来完成认证授权并访问或修改受限资源的流程

1 1.获取未授权的Request Token(temporary credentials)

2 2.请求用户授权Request Token

3 3.使用授权后的Request Token换取Access Token(token credentials)

4 4.使用 Access Token 访问或修改受保护资源

其中1~3步使用https方式, 第4步使用http方式。

请求签名说明

所有TOKEN请求和受保护的资源请求必须被签名,微博开放平台会根据签名来判断请求的合法性。签名算法使用Signature Base String和密钥(Secret)生成签名,参数oauth_signature用于指定签名。

 

说明:

Signature Base String由以下三部分组成,各项之间使用&符号分隔。

1Http Method
请求方法,GET/POST

2URL Encode之后的请求URLURL要小写)
例如:
请求URLhttps://open.t.qq.com/cgi-bin/request_token
URL Encode之后的请求URL为:
https%3A%2F%2Fopen.t.qq.com%2Fcgi-bin%2Frequest_token

3URL Encode并排序之后的请求参数
例如: URL请求参数为:
oauth_callback=www.qq.com&oauth_consumer_key=49b0bes7352943a1a5609f9e30346201&oauth_nonce=90523669&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1298513816&oauth_version=1.0
URL Encode并排序之后的请求参数格式如下(参数间使用%26(&符号)分隔):
oauth_callback%3Dwww.qq.com%26oauth_consumer_key%5D49b0bes7352943a1a5609f9e30346201%26oauth_nonce%3D90523669%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1298513816%26oauth_version%3D1.0

算法伪码:

httpMethod + "&" + url_encode( base_uri ) + "&" + sorted_query_params.each { | k, v | url_encode ( k ) + "%3D" + url_encode ( v ) }.join("%26")

密钥由App SecretToken Secret组成(中间使用&符号分隔)
签名算法目前只支持HMAC-SHA1

获取未授权的Request Token

通过访问以下 URL 获取未授权的 Request Token

https://open.t.qq.com/cgi-bin/request_token

请求参数

参数

意义

oauth_consumer_key

App Key(应用信息中的App Key)

oauth_signature_method

签名方法,暂只支持HMAC-SHA1

oauth_signature

签名值,密钥为:App Secret。计算说明。

oauth_timestamp

时间戳其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数

oauth_nonce

单次值,随机生成的32位字符串,防止重放攻击(每次请求必须不同)

oauth_callback

认证成功后浏览器会被重定向到这个url

oauth_version(可选)

版本号,如果有必须为1.0

返回参数

参数

意义

oauth_token

未授权的Request Token

oauth_token_secret

对应的Request Token Secret

oauth_callback_confirmed

oauth_callback的确认信号

说明:

① 用户授权后web应用将会重定向到oauth_callback。当应用为pc客户端或手机客户端应用时,没有回调url(oauth_callback)的概念,此时设置为字符串null即可。字符串null必须是小写。

② 时间戳与标准时间偏差不得大于8分钟。

示例:

request_token

https://open.t.qq.com/cgi-bin/request_token?oauth_callback=null&oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=yQDMuXvdcEfQs2Mzf3XcT1r36WTULJls&oauth_signature=exxzU/tTbpdicmYHcyYh5kqgYgo=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569145&oauth_version=1.0

参数名

参数值

oauth_consumer_key

aca77d2eb96f46e1b3353bc6743e8bfc

oauth_signature_method

HMAC-SHA1

oauth_signature

exxzU/tTbpdicmYHcyYh5kqgYgo=

oauth_timestamp

1299569145

oauth_nonce

yQDMuXvdcEfQs2Mzf3XcT1r36WTULJls

oauth_callback

null

oauth_version

1.0

返回结果:

oauth_token=hdk48Djdsa&oauth_token_secret=xyz4992k83j47x0b&oauth_callback_confirmed=true

参数名

参数值

oauth_token

hdk48Djdsa

oauth_token_secret

xyz4992k83j47x0b

oauth_callback_confirmed

true

请求用户授权Request Token

此步骤的目的是请求用户授权Request Token,请求URL

https://open.t.qq.com/cgi-bin/authorize

请求参数:

参数

意义

oauth_token

上一步中获得的未授权的Request Token

返回参数:

参数

意义

oauth_token

用户授权之后的Token值,与未授权Token值相同。

oauth_verifier

验证码

说明:

此页面中会要求用户登陆,然后选择同意或者拒绝对应用授权。

授权成功后:

· A: web应用会重定向到oauth_callback所指定的URL(含返回参数)。

· B: 客户端应用(oauth_callback=null)会在网页中给出授权码,用户需要手工将验证码输入到应用中才能完成授权流程。

示例:

参数

意义

oauth_token

hdk48Djdsa

oauth_verifier

473f82d3

oauth_token=hdk48Djdsa&oauth_verifier=473f82d3

使用授权后的Request Token换取Access Token

用户完成授权后,第三方应用可以通过访问如下url,将已授权的Request Token换取Access TokenAccess Token将被用于访问或修改受限资源。

https://open.t.qq.com/cgi-bin/access_token

请求参数:

参数

意义

oauth_consumer_key

AppKey

oauth_token

第一步中获得的Request Token

oauth_signature_method

签名方法,暂只支持HMAC-SHA1

oauth_signature

签名值,密钥为:App Secret&Request Token Secret。计算说明。

oauth_timestamp

时间戳其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数

oauth_nonce

单次值,随机生成的32位字符串,防止重放攻击(每次请求必须不同)

oauth_verifier

上一步请求授权request token时返回的验证码

oauth_version(可选)

版本号,有的话必须为1.0

返回参数:

参数

意义

oauth_token

Access Token

oauth_token_secreate

Access Token Secret

说明:

· ①本步骤用于签名的密钥为App SecretRequest Token Secret(中间使用&分隔)

· ②获得返回值后就可以使用Access Token来访问资源了。

· ③Access TokenAccess Token Secret永远不会过期,直到用户撤销应用授权或腾讯回收您的app访问权限才会失效。用于签名的Signature Base String格式如下: 

示例:access_token:

https://open.t.qq.com/cgi-bin/access_token?oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=y2FrX7Muouma5vxWTKngEb7uHkRu4P5u&oauth_signature=209vcEaHkmb/QwHqsRU3HRPvlqw=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569210&oauth_token=6b99583b7bc8446bb57e86128158994f&oauth_verifier=877973&oauth_version=1.0

参数

意义

oauth_consumer_key

aca77d2eb96f46e1b3353bc6743e8bfc

oauth_token

6b99583b7bc8446bb57e86128158994f

oauth_signature_method

HMAC-SHA1

oauth_signature

209vcEaHkmb/QwHqsRU3HRPvlqw=

oauth_timestamp

1299569210

oauth_nonce

y2FrX7Muouma5vxWTKngEb7uHkRu4P5u

oauth_verifier

877973

oauth_version(可选)

1.0

返回结果:

oauth_token=nnch734d00ls2jdk&oauth_token_secreate=pdkkdhi9sl3r4s00

参数

意义

oauth_token

oauth_token_secreate

nnch734d00ls2jdk

pdkkdhi9sl3r4s00

至此,您的应用就取得了用户的授权,请妥善保管获得的Access TokenAccess Token Secret

此后,您的应用就可以使用该Access Token访问腾讯微博了。

使用Access Token访问腾讯微博

获得Access Token之后,您的应用就可以使用该Access Token访问腾讯微博。

在每次调用接口API时,请求都必须包含以下参数:

参数

意义

oauth_consumer_key

AppKey

oauth_token

Access Token

oauth_signature_method

签名方法,暂只支持HMAC-SHA1

oauth_signature

签名值,密钥为:App Secret&Access Token Secret。计算说明。

oauth_timestamp

时间戳

oauth_nonce

单次值

示例:

调用APIhttp://open.t.qq.com/api/t/add 发布一条微博:

参数包括:
1)接口参数:contentformat
2OAuth协议参数

参数

参数值

content

%E6%9D%A5%E8%87%AA%23weibo_SDK%23%E7%9A%84%E6%B5%8B%E8%AF%95%E6%B6%88%E6%81%AF%EF%BC%81

format

json

oauth_consumer_key

aca77d2eb96f46e1b3353bc6743e8bfc

oauth_nonce

Tld5QvrtTlRJvaSWPlCC7DIXxnTBeumD

oauth_signature

JuPSe7ibf0uPECp4HcX4Fu9y3l0=

oauth_signature_method

HMAC-SHA1

oauth_timestamp

1299569293

oauth_token

b8c8f1a888ea4f2887eac88787b6e895

oauth_version

1.0

post:

http://open.t.qq.com/api/t/add?content=%E6%9D%A5%E8%87%AA%23weibo_SDK%23%E7%9A%84%E6%B5%8B%E8%AF%95%E6%B6%88%E6%81%AF%EF%BC%81&format=json&oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=Tld5QvrtTlRJvaSWPlCC7DIXxnTBeumD&oauth_signature=JuPSe7ibf0uPECp4HcX4Fu9y3l0=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569293&oauth_token=b8c8f1a888ea4f2887ea

 

转载于:https://www.cnblogs.com/franksunny/archive/2012/05/09/2492151.html


http://www.niftyadmin.cn/n/1160700.html

相关文章

强制类型转换之数值溢出

强制类型转换之数值溢出前言案例一、有符号整型转无符号整型(初级)案例二、无符号整型转有符号整型(初级)案例三、FreeBSD 开源项目漏洞(进阶)解析前言 C语言允许在各种不同的数据类型之间做强制类型转换。…

visio 教程-绘图技巧、快捷键大全

visio 绘图技巧、快捷键大全,一键对齐前言一、常用快捷键二、使用技巧对象移动对象复制绘制直线一键对齐 自动排列(非常好用)辅助线对齐图像边缘空白消除word中visio图编辑技巧去掉直线交叉点增加连接点前言 Visio 是Office软件系列中的负责…

协变与逆变

协变让一个粗粒度接口或委托能够接收更加具体的接口或委托作为参数或返回值;逆变让一个接口或委托的参数(或返回值)更加明确,具体,也就是参数类型更加强。 转载于:https://www.cnblogs.com/manyiString/archive/2012/05/10/covariant_contravariant.html…

数制转换技巧(十进制 to 二进制)

数制转换技巧——十进制转二进制在十进制转二进制时,常使用 除二倒取余法,例如: 但当数值过大时,这个方法将非常繁琐。假定要将60031转换成二进制(16位),用 除二倒取余则要做16次除法&#xff1…

更新密码,判断旧密码存储过程

SQL部分 ALTER PROCEDURE [dbo].[sp_ChangePassword]( CustID VARCHAR(10), OldPassword VARCHAR(10), NewPassword VARCHAR(10) )ASIF EXISTS(SELECT * FROM dbo.A_User WHERE CustIDCustID and [Password]OldPassword)BEGIN UPDATE dbo.A_user S…

共享文件夹下编译问题 CMake Error: cmake_symlink_library: System Error: Operation not supported

共享文件夹下编译问题 CMake Error: cmake_symlink_library: System Error: Operation not supported原因解决方法一解决方法二原因 创建链接不成功,要确认当前帐户下是否有权限在编译的目录中有创建链接的权限; 比如,你如果是在一个WINDOWS…

Jersey的使用——Post数据读取

web.xml添加适配器&#xff0c;截取请求 <servlet><servlet-name>ServletAdaptor</servlet-name><servlet-class>com.sun.jersey.server.impl.container.servlet.ServletAdaptor</servlet-class><load-on-startup>1</load-on-startup&g…

Linux 驱动是什么

Linux驱动前言什么是驱动&#xff1f;无操作系统情况下的设备驱动有操作系统情况下的设备驱动总结前言 计算机软硬件相辅相成&#xff0c;合作完成相应功能。但一个共识是软件和硬件不应该相互渗透到对方的领域。 驱动使得应用软件开发人员不需要去关心硬件相关知识&#…