2019独角兽企业重金招聘Python工程师标准>>>

http://wiki.open.t.qq.com/index.php/OAuth%E6%8E%88%E6%9D%83%E8%AF%B4%E6%98%8E

目录

  • 1 腾讯微博 API OAuth认证介绍
  • 2 OAuth是什么?
  • 3 OAuth的原理认证流程及访问资源流程
    • 3.1 请求签名说明
    • 3.2 获取未授权的Request Token
      • 3.2.1 请求参数
      • 3.2.2 返回参数
        • 3.2.2.1 示例:
      • 3.2.3 返回结果
    • 3.3 请求用户授权Request Token
    • 3.4 使用授权后的Request Token换取Access Token
    • 3.5 使用包含Access Token的OAuth标准参数访问腾讯微博
    • 3.6 示例

腾讯微博 API OAuth认证介绍

腾讯微博开放平台,是基于腾讯微博系统,为广大开发者和用户提供的开放数据分享与传播平台。

广大开发者和用户登录平台后,就可以使用平台提供的开放API接口,创建应用从微博系统获取信息,或将新的信息传播到整个微博系统中,丰富多样的API接口和应用,加上您的智慧,将创造出无穷的应用和乐趣。

腾讯微博API采用OAuth协议为第三方提供接入服务,遵循[RFC-5849]规范。有关OAuth认证的详细说明,请阅读官方OAuth规范。各种语言的OAuth 客户端可以在Google-OAuth项目里找到。

腾讯微博API使用OAuth 1.0a版本。

OAuth官网地址:http://www.oauth.net/

OAuth是什么?

OAuth协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以使用OAuth认证服务,任何服务提供商都可以实现 自身的OAuth认证服务,因而OAuth是开放的。业界提供了OAuth的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发 包,大大节约了程序员的时间,因而OAuth是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAuth认证服务,这些都足以说明OAuth标准逐渐成为开放资源授权 的标准。

在官方网站的首页,可以看到下面这段简介:

An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.

大概意思是说OAuth是一种开放的协议,为桌面程序或者基于BS的web应用提供了一种简单的,标准的方式去访问需要用户授权的API服务。OAuth类似于Flickr Auth、Google's AuthSub[1]、Yahoo's BBAuth、 Facebook Auth等。

OAuth认证授权具有以下特点:

  1. 简单:不管是OAuth服务提供者还是应用开发者,都很容易于理解与使用;
  2. 安全:没有涉及到用户密钥等信息,更安全更灵活;
  3. 开放:任何服务提供商都可以实现OAuth,任何软件开发商都可以使用OAuth; 

OAuth的原理认证流程及访问资源流程

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

  1. 获取未授权的Request Token(temporary credentials)
  2. 请求用户授权Request Token
  3. 使用授权后的Request Token换取Access Token(token credentials)
  4. 使用 Access Token 访问或修改受保护资源

其中1~3步使用httpshttp方式, 第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

http://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的确认信号

说明:

  1. 用户授权后web应用将会重定向到oauth_callback。当应用为pc客户端或手机客户端应用时,没有回调url(oauth_callback)的概念,此时设置为字符串null即可。字符串“null”必须是小写。
  2. 时间戳与标准时间偏差不得大于8分钟。
示例:

request_token

http://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:

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

请求参数:

参数 意义
oauth_token 上一步中获得的未授权的Request Token
wap
(可选参数)
主要用于指定手机授权页的版本
wap=1时,跳转到wap1.0的授权页
wap=2时,跳转到wap2.0的授权页
不带本参数时,手机访问默认跳到wap2.0的授权页

返回参数:

参数 意义
oauth_token 用户授权之后的Token值,与未授权Token值相同。
oauth_verifier 验证码
openid 可以唯一标识一个用户(wap=1或wap=2时不返回该参数)
openkey 与openid对应的用户key,是验证openid身份的验证密钥(wap=1或wap=2时不返回该参数)

说明:

  1. 此页面中会要求用户登陆,然后选择同意或者拒绝对应用授权。
  2. 授权成功后:
# web应用会重定向到oauth_callback所指定的URL(含返回参数)。
# 客户端应用(oauth_callback=null)会在网页中给出授权码,用户需要手工将验证码输入到应用中才能完成授权流程。

示例:

参数 意义
oauth_token hdk48Djdsa
oauth_verifier 473f82d3
openid 2D4263AB08EE337C3F3F26106BF881DA
openkey 543403C5AA99BDCB6F87DFBB14240E04
oauth_token=hdk48Djdsa&oauth_verifier=473f82d3

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

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

http://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_secrete Access Token Secret

说明:

  1. 本步骤用于签名的密钥为App Secret和Request Token Secret(中间使用&分隔)
  2. 获得返回值后就可以使用Access Token来访问资源了。
  3. Access Token和Access Token Secret永远不会过期,直到用户撤销应用授权或腾讯回收您的app访问权限才会失效。

用于签名的Signature Base String格式如下:

示例:access_token:

http://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 nnch734d00ls2jdk
oauth_token_secrete pdkkdhi9sl3r4s00

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

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

使用包含Access Token的OAuth标准参数访问腾讯微博

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

在每次调用接口API时,请求都必须包含如下所示OAuth标准参数:

参数 意义
oauth_consumer_key AppKey
oauth_token Access Token
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 helloworld
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=helloworld&clientip=121.14.96.121&longitude=113.421234&latitude=22.354231&syncflag=0&format=xml&oauth_token=d8b0965f24a14575a84863a5e19a8705&oauth_nonce=709da91378181caec8e709085a757764&oauth_consumer_key=801058005&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_timestamp=1350653166&oauth_signature=unC%2FaR5N6hoXUsrabBgKHYjKcdg%3D

转载于:https://my.oschina.net/zhongwenhao/blog/142899

腾讯微博Android客户端开发 - OAuth1.0认证介绍相关推荐

  1. android 腾讯微博授权,5腾讯微博Android客户端开发获取请求用户授权Request Token.pdf...

    腾讯微博Android客户端开发 博客:/coolszy Android Android 腾讯微博AAnnddrrooiidd客户端开发 RequestToken RequestToken --获取请 ...

  2. 8.腾讯微博Android客户端开发——自动获取验证码(2)

    上一节给大家讲解通过调用android系统自带的浏览器进行授权认证的,使用该种方式能很容易的完成认证,但是该种方式有个弊端,也就是如果使用第三方的浏览器如UC.天天等,输入完QQ账号信息点击" ...

  3. 腾讯微博Android客户端开发——OAuth认证介绍

    腾讯微博是一个由腾讯推出,提供微型博客服务的类Twitter网站.在腾讯官方 的软件或网站中发布微博我们需要输入QQ号和密码,同样如果我们自己开发客户端给用户使用,我们也需要用户提供QQ号和密码,这就 ...

  4. 腾讯微博Android客户端开发——自动获取验证码

    上一节给大家讲解通过调用android系统自带的浏览器进行授权认证的,使用该种方式能很容易的完成认证,但是该种方式有个弊端,也就是如果使用第三方的浏览器如UC.天天等,输入完QQ账号信息点击" ...

  5. 7.腾讯微博Android客户端开发——自动获取验证码(1)

    通过前面的介绍,我们成功获取了Access Token,但是在该过程中有个不好的地方:用户输入完QQ信息后,需要记录验证码,然后返回至Activity手动输入验证码,这将会使我们的程序显得非常不友好. ...

  6. 腾讯微博android版本,腾讯微博 Android版

    腾讯微博这是专为Android用户打造的腾讯微博手机客户端,让您随时随地与亿万微博用户分享生活和资讯.腾讯微博Android客户端,专为Android用户打造,让您随时随地与亿万微博用户分享生活和资讯 ...

  7. 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一)

    上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 上篇文章中给大家简单介绍了一些业务,上门洗车APP --- Android客户端开发 前言及业务简介,本篇文章给大家介绍下 ...

  8. 行代码入门python_新浪微博Android客户端开发视频教程(36讲)

    教程名称:新浪微博Android客户端开发视频教程(36讲) 课程目录: [IT教程网]新浪微博Android客户端介绍 [IT教程网]新浪微博Android客户端相关资料 [IT教程网]新浪微博An ...

  9. 腾讯微博android版本,腾讯微博下载2017手机版下载-腾讯微博 安卓版v6.1.2-PC6安卓网...

    微博这东西小编就这么喜欢而已.不管是sina还是qq,丢不掉,逃不了.腾讯家的还不错.关联的朋友很多,总能在这里面找到熟悉的东西,QQ牵连的很强大 功能介绍 专为Android用户打造的腾讯微博手机客 ...

最新文章

  1. 1043 输出PATest
  2. MySQL内部执行流程
  3. WiFi Deauthenticated Reason Codes
  4. 云计算将为移动医疗带来哪些新机遇?
  5. 基本概念—监督与非监督
  6. 节后大礼包!XSql 源码开放,插件源码开放,Sofire v1.6 源码开放(已上传)
  7. 指数型组织形成的 9 大驱动因素
  8. Unity3D_(游戏)2D坦克大战 像素版
  9. ubuntu11.04中nautilus(文件管理器)查看FTP乱码的解决办法
  10. dorado基本事件样例
  11. 茅台少女踩曲玄机何在?
  12. SpringBoot 日志配置
  13. VRay材质练习(一):水、玻璃、牛奶
  14. Java面试题大全(part_4)
  15. 1867最短路径问题(SPFA)
  16. CDH6.3.3 paywall版之前自定义http服务器放置parcels安装数据
  17. Project2 分段切割路面,只取一个种子点
  18. 初识mapbox GL
  19. UPC 6617 Finite Encyclopedia of Integer Sequences(找规律)
  20. 微型计算机接口与技术答案,《微机原理与接口技术》课后习题答案

热门文章

  1. 双十一,美团为何静悄悄?
  2. 如何调用腾讯的IP库?
  3. 网易历届笔试面试题整理大全
  4. 模拟城市我是市长服务器维护多久,《模拟城市我是市长》你所走过的弯路 新手常见问题...
  5. 企业微信群发消息提醒
  6. SQL-按日期不间断统计
  7. 怎么用matlab画心形曲线方程,matlab画心形曲线
  8. Android静态壁纸和动态壁纸的使用和理解
  9. VScode 无法保存,文件内容较新
  10. python爬虫实战-如何批量爬取唯品会商品信息>>>