OAuth的原理认证流程及访问资源流程
腾讯微博API通过以下四个步骤来完成认证授权并访问或修改受限资源的流程
-
1.获取未授权的Request Token(temporary credentials)
-
2.请求用户授权Request Token
-
3.使用授权后的Request Token换取Access Token(token credentials)
-
4.使用 Access Token 访问或修改受保护资源
其中1~3步使用https方式, 第4步使用http方式。
请求签名说明
所有TOKEN请求和受保护的资源请求必须被签名,微博开放平台会根据签名来判断请求的合法性。签名算法使用Signature Base String和密钥(Secret)生成签名,参数oauth_signature用于指定签名。
说明:
Signature Base String由以下三部分组成,各项之间使用&符号分隔。
1、Http Method
请求方法,GET/POST
2、URL Encode之后的请求URL(URL要小写)
例如:
请求URL:https://open.t.qq.com/cgi-bin/request_token
经URL Encode之后的请求URL为:
https%3A%2F%2Fopen.t.qq.com%2Fcgi-bin%2Frequest_token
3、URL 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 Secret和Token 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 Token。Access 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 Secret和Request Token Secret(中间使用&分隔)
-
②获得返回值后就可以使用Access Token来访问资源了。
-
③Access Token和Access 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 Token和Access Token Secret。
此后,您的应用就可以使用该Access Token访问腾讯微博了。
使用Access Token访问腾讯微博
获得Access Token之后,您的应用就可以使用该Access Token访问腾讯微博。
在每次调用接口API时,请求都必须包含以下参数:
参数
意义
oauth_consumer_key |
AppKey |
oauth_token |
AccessToken |
oauth_signature_method |
签名方法,暂只支持HMAC-SHA1 |
oauth_signature |
签名值,密钥为:App Secret&Access Token Secret。计算说明。
|
oauth_timestamp |
时间戳 |
oauth_nonce |
单次值 |
示例:
调用API:http://open.t.qq.com/api/t/add发布一条微博:
参数包括:
1)接口参数:content和format;
2)OAuth协议参数
参数
参数值
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=b8c8f1a888ea4f2887eac88787b6e895&oauth_version=1.0
分享到:
相关推荐
OAuth认证协议原理及使用方法 OAuth认证协议原理及使用方法
oauth2.0协议的认证原理,适合初学者使用
OAuth2.0协议原理与实现
OAuth 认证流程。 为了介绍腾讯微博项目,这里要用一些实验来了解Oauth认证
Oauth2 授权流程,包括流程图,JWT授权流程,等等。发起授权请求
详细讲解OAuth2.0的基本原理及其应用,希望与大家一起交流,共同进步。
http://write.blog.csdn.net/postedit/13510891使用源码
OAUTH认证授权的流程进行初步认识。其实,简单的来说,OAUTH认证授权就三个步骤,三句话可以概括: 1. 获取未授权的Request Token 2. 获取用户授权的Request Token 3. 用授权的Request Token换取Access Token
独立的授权服务器,资源服务器,客户端单点登录系统。 采用Oauth2进行token认证,模拟用户信息进行登录。
Spring boot+Spring Security Oauth2.0,Sprint cloud+Spring Security Oauth2集成。四种认证方式。附带有代码,和案例,案例,还有视频链接。我保证看完就回,如果视频链接失效,评论回复我,我单独再给你一份。
Oauth 原理大揭露,OAuth开发文档
OAuth2认证资源 实现微博的
适合初学者,注释很详细,而且很轻松学习oauth的认证过程!
通过PostMan验证Oauth2认证过程
第九章 SpringCloud Oauth2认证中心-Zuul网关上添加认证.pdf
一个基于spring cloud组件zuul搭建的包括oauth2认证功能和网关gateway路由功能。
目前线上资源较少关于jmeter实现oauth1.0请求的方法,系统接口通过Oauth1.0方式授权登录,通过jmeter自带beanshell插件解决认证授权问题 资源附带了脚本代码和实现步骤
OAuth2.0授权机制我在这里就不浪费口舌了,有很多大牛都发表过相关的文章解释OAuth2.0认证的流程。这个demo很简单,很容易给初学者理解,给一些初学者参考学习学习。
该资源参考博客:http://blog.csdn.net/eastmount/article/details/26872793主要介绍豆瓣API开发过程中如何通过OAuth2.0认证授权访问用户自己信息的.豆瓣API的资源较少,有的基本是php和java的,所以想通过该资源讲述C#...
网络开放是一个不变的趋势,那么不可避免的会有各种网络...OAuth就是为了解决这个问题而诞生的,用户访问第三方资源,不再需要网站提交你的用户名,密码。这样好处自己是安全,而且不会泄露你的隐私给不信任的一方。