腾讯微博开放平台授权教程(1)
看到坛子里众多开发者问了很多授权问题,官方又没有及时解答,主要是他的API文档有些细节不够明确,经过几天的摸索,我将摸索到的经验以图文及代码的形式写出来,希望能抛砖引玉。
一、前言
腾讯微博开放平台授权目前采用的是Oauth1.0,关于Oauth1.0的授权流程,见腾讯微博开放平台官方说明,
地址http://wiki.open.t.qq.com/index.php/OAuth%E6%8E%88%E6%9D%83%E8%AF%B4%E6%98%8E
Oauth1.0的官方OAuth官网地址:http://www.oauth.net/
Oauth1.0的授权过程比较繁琐,最新的的授权方式是Oauth2,OAuth官方也有淘汰Oauth1.0的意思,腾讯目前也应该在升级,在API接口上已经全面支持Oauth2,但在授权阶段还是先要通过Oauth1.0,拿1.0的oauth_token来换2.0的oauth_token,注意,腾讯官方对oauth_token 和access_token在说法上有时候指一个东西,有时候又不是,注意分辨。在1.0中,request_token(未授权的token)经用户授权后就是oauth_token,再拿oauth_token去换access_token,在2.0的概念, oauth_token应是未授权的token,而access_token则是授权过的token。
说说Oauth1.0授权的过程,分三大步
1.发起一个授权请求,腾讯根据你的appkey,给你一个临时牌照,也就是request_token,这一步通常不用显示出来。
2.用户输入在腾讯的账户密码登录腾讯,并授权的你的应用可以访问他的账户,你就获得了oauth_token和一个验证码,注意这里的oauth_token和上一步的request_token值是一样的,就是临时牌照换成了正式牌照
3.你拿oauth_token和验证码再去换access_token,正式牌照换成了通行证。
注意,腾讯官方的写法
第2点,个人觉得改为oauth_token比较好
说Oauth1.0繁琐,其中重要的一点是每次都要计算一个签名signature,这东西的原理就是将你请求网页的方式、网址、网址的参数、时间等加密,计算出一个值,提交的网址中再带上这个值,服务器端读出你提交的网址参数(去掉signature本身),它也来算一遍,看跟你提交的signature是否一致,不一致就是invalid了,有效防止了篡改参数,坛子里很多人都卡这里了。本文稍后详解。
为了规范本文的语法概念,先定义一些概念及参数,入门语言VB6,可以放到ini文件里,如
[腾讯微博] baseUrl=http://open.t.qq.com/api/{0}’腾讯API的基地址 request_tokenUrl=https://open.t.qq.com/cgi-bin/request_token’请求未授权token地址 authorizeUrl=https://open.t.qq.com/cgi-bin/authorize’用户输入用户名和密码的授权地址 tokenUrl=https://open.t.qq.com/cgi-bin/access_token’换取access_token地址 redirect_uri=null’回调地址callbackurl App_Key = *****’应用KEY App_Secret = ******’应用密码 oauth_token=******’用户授权的token oauth_token_secret=******’用户授权的token密码 access_Token=******’1.0最终的通行证了 access_token_secret=******’1.0最终的通行证密码 accesstoken2_0=******’2.0最终的通行证 refreshtoken2_0=******’2.0最终的通行证密码 expiretime2_0=******’2.0最终的通行证过期时间
二、腾讯oauth1.0授权的实现
这里,我尽量使用简洁的逻辑和代码实现上面所说的oauth1.0授权步骤,注意我这里采用桌面应用, oauth_callback=null
1.获取未授权的Request_Token。
我们来看看如何获得request_token,先来看看官方的说明
http://wiki.open.t.qq.com/index.php/OAuth%E6%8E%88%E6%9D%83/%E8%8E%B7%E5%8F%96request_token
请求说明
url https://open.t.qq.com/cgi-bin/request_token
格式 xml,json
http请求方式 get
是否需要鉴权 true
请求数限制 true
参数说明
请求参数:oauth或openid&openkey标准参数,并带上以下参数
format 返回数据的格式是(json或xml)
oauth_callback 回调URL 如果是桌面应用或手机应用没有回调URL,采用pin码方式,请填上 oauth_callback=null
oauth_consumer_key 你申请的appkey
oauth_nonce 随机串(32个字符长度)随机生成,只能使一次,与时间戳一起 防重放
oauth_signature oauth请求签名 oauth请求的签名,根据oauth协议中算法生成basestring 后,用appsecret 对basestring 经hmac_sha1生成的签名串
oauth_signature_method 签名方法(HMAC-SHA1)
oauth_timestamp 时间戳 你的请求当前时间戳 (你的服务器时间你定要准确,不然请求会被拒绝掉)
oauth_version oauth版本号(填1.0)
返回结果
oauth_token=a63f4a0e1242462fb8c11e53159ba294&oauth_token_secret=40ece707e064128e4fec692e3c09c692&oauth_callback_confirmed=true
返回结果说明
oauth_token:返回的request_token
oauth_token_secret:返回的request_secret
oauth_callback_confirmed:回调确认
官方说得很明确,就是要构造一个网址,然后get,获得结果,注意,这个结果并不是官方所说标准的json数据(json一般以{}[]和逗号分隔)!
这一步并不需要让用户知道,也是说这步在用户输入用户名和密码之前实现,为了演示方便,我这里添加了一个获取access_token按钮,用VB代码实现
添加一个Form1,一个获取requestToken的按钮,以及一个用于返回结果的文本框text1
添加一些变量定义
Dim baseUrl As String Dim request_tokenUrl As String Dim authorizeUrl As String Dim tokenUrl As String Dim App_Key As String Dim App_Secret As String Dim redirect_uri As String Dim oauth_token As String Dim oauth_token_secret As String Dim oauth_verifier As String Dim access_token As String Dim access_token_secret As String Dim accesstoken2_0 As String 'oauth2 Dim refreshtoken2_0 As String Dim expiretime2_0 As String Dim objtqq As New clsTQQ ‘定义类了 Private Sub Form_Load() '程序期待读取初始值 appProfileName = App.Path & "/setting.ini"'加载ini文件 baseUrl = GetIniS("腾讯微博", "baseUrl", "") '读ini值的函数不再给出,网上到处都是 request_tokenUrl = GetIniS("腾讯微博", "request_tokenUrl", "") authorizeUrl = GetIniS("腾讯微博", "authorizeUrl", "") tokenUrl = GetIniS("腾讯微博", "tokenUrl", "") App_Key = GetIniS("腾讯微博", "App_Key", "") App_Secret = GetIniS("腾讯微博", "App_Secret", "") redirect_uri = GetIniS("腾讯微博", "redirect_uri", "") With objtqq .c_baseUrl = baseUrl .c_request_tokenUrl = request_tokenUrl .c_authorizeUrl = authorizeUrl .c_tokenUrl = tokenUrl .c_App_Key = App_Key .c_App_Secret = App_Secret .c_redirect_uri = redirect_uri ….. End With End Sub Private Sub Cmd_GetRequest_token_Click() Text1.Text = objtqq.Get_oauth_token '这里演示获得返回request_token End Sub 我们来看看clsTQQ类, 'Class clsTQQ Public c_baseUrl As String Public c_request_tokenUrl As String Public c_authorizeUrl As String Public c_tokenUrl As String Public c_App_Key As String Public c_App_Secret As String Public c_redirect_uri As String Public c_oauth_token As String '未授权token Public c_oauth_token_secret As String Public c_oauth_verifier As String Public c_access_token As String '授权后的token Public c_access_token_secret As String Public c_accesstoken2_0 As String 'oauth2 Public c_refreshtoken2_0 As String Public c_expiretime2_0 As String
Public Function Get_oauth_token() Dim codeUrl As String, baseString As String, paraUrl As String Dim codeUrlTempalte As String Dim paraUrlTempalte As String Dim baseStringTemplate As String Dim tempstr As String codeUrlTempalte = "{0}?oauth_callback={3}&oauth_consumer_key={1}&oauth_nonce={2}&oauth_signature={5}&oauth_signature_method=HMAC-SHA1&oauth_timestamp={4}&oauth_version=1.0" paraUrlTempalte = "oauth_callback={3}&oauth_consumer_key={1}&oauth_nonce={2}&oauth_signature_method=HMAC-SHA1&oauth_timestamp={4}&oauth_version=1.0"’注意了,参与计算signature的参数,排列顺序必须按字母排序 baseStringTemplate = "{method}&{encode_request_tokenUrl}&{encode_paraUrl}" '用于生成signature,由三部分组成{method}是GET 或POST 两个值中的一个,要大写。 oauth_nonce = makePassword(10) '随机数,官方说是32位,其实多少位都可以 oauth_timestamp = DateDiff("s", "01/01/1970 08:00:00", Now()) '邮戳 paraUrl = Replace(paraUrlTempalte, "{1}", Me.c_App_Key) '参数串 paraUrl = Replace(paraUrl, "{2}", oauth_nonce) paraUrl = Replace(paraUrl, "{3}", Me.c_redirect_uri) paraUrl = Replace(paraUrl, "{4}", oauth_timestamp) baseString = Replace(baseStringTemplate, "{method}", "GET") baseString = Replace(baseString, "{encode_request_tokenUrl}", strUrlEnCode(Me.c_request_tokenUrl)) baseString = Replace(baseString, "{encode_paraUrl}", strUrlEnCode(paraUrl)) ' Debug.Print baseString oauth_signature = HAMC_SHA1(Me.c_App_Secret + "&"+me.c_oauth_token_secret, baseString)’计算signature了,HAMC_SHA1的key官方说法有两部分组成App_Secret 和oauth_token_secret,中间用&分隔,这一步还没产生oauth_token_secret,因此值是空的 '对于HAMC_SHA1算法,这里采用调用一段javascript代码的方式获得,不再赘述
codeUrl = Replace(codeUrlTempalte, "{0}", Me.c_request_tokenUrl) codeUrl = Replace(codeUrl, "{1}", Me.c_App_Key) codeUrl = Replace(codeUrl, "{2}", oauth_nonce) codeUrl = Replace(codeUrl, "{3}", Me.c_redirect_uri) codeUrl = Replace(codeUrl, "{4}", oauth_timestamp) codeUrl = Replace(codeUrl, "{5}", oauth_signature) tempstr = httpGet(codeUrl) Me.c_oauth_token = 解析tempstr'这里代码没有给出 Me.c_oauth_token_secret =解析tempstr'这里代码没有给出
Get_oauth_token = tempstr End Function
'随机串 Function makePassword(ByVal maxLen) Dim strNewPass Dim whatsNext, upper, lower, intCounter Randomize For intCounter = 1 To maxLen whatsNext = Int((1 - 0 + 1) * Rnd + 0) If whatsNext = 0 Then upper = 122 lower = 100 Else upper = 57 lower = 48 End If strNewPass = strNewPass & Chr(Int((upper - lower + 1) * Rnd + lower)) Next makePassword = strNewPass End Function ‘计算signature时网址及参数特殊符号编码 Function strUrlEnCode(ByVal strUrl) strUrlEnCode = Replace(strUrl, "=", "%3D") strUrlEnCode = Replace(strUrlEnCode, "&", "%26") strUrlEnCode = Replace(strUrlEnCode, ":", "%3A") strUrlEnCode = Replace(strUrlEnCode, "/", "%2F") End Function
相关推荐
在移动开发领域,腾讯微博开放平台为开发者提供了一个强大的工具,允许他们集成微博功能到自己的Android应用程序中。这个平台提供了丰富的API,使得开发者可以轻松实现用户登录、微博发布、信息获取等一系列操作。...
腾讯微博开放平台Java开发SDK是一款专为Java开发者设计的工具包,它允许开发者方便地集成腾讯微博服务到自己的应用程序中,实现与微博平台的数据交互和功能扩展。这个SDK提供了丰富的API接口,涵盖了用户授权、消息...
腾讯微博开放平台PHP SDK2.1.2是一个用于与腾讯微博接口交互的开发工具包,主要服务于PHP开发者,便于他们在自己的应用中集成腾讯微博的功能。本文将深入解析这个SDK的关键知识点,包括其基本架构、主要功能、使用...
腾讯微博开放平台API是腾讯公司为了促进互联网社区的互动与活跃度而推出的一项服务。它允许第三方开发者通过一系列预定义的接口,与腾讯微博进行数据交互,创建丰富的应用和服务,以此来增强用户在网站上的体验,...
OAuth授权是腾讯微博开放平台的核心部分。OAuth允许应用在不获取用户密码的情况下,获取用户的授权来访问其微博账户。这个过程包括获取请求令牌、获取访问令牌以及用这些令牌进行API调用。开发者需要在应用中实现...
首先,我们需要理解OAuth协议,这是腾讯微博和新浪微博等第三方平台用于授权的应用程序接口。OAuth允许用户授权第三方应用访问其在这些社交平台上的部分信息,而无需提供用户名和密码。开发者需要在腾讯微博和新浪...
腾讯微博作为中国知名的社交媒体平台,也提供了类似的开放平台,允许开发者利用Oauth2.0授权协议来实现用户身份验证和数据获取。本文将深入讲解腾讯微博Oauth2.0授权认证的原理及其在易语言中的实现。 OAuth2.0是一...
腾讯微博抓取是针对社交媒体平台腾讯微博的数据采集过程,主要涉及网络爬虫技术和Java编程语言。...然而,随着社交媒体平台政策的变化,开发者应持续关注腾讯微博开放平台的更新,确保代码的兼容性和合法性。
在腾讯微博开放平台中,这些API允许开发者获取用户的授权,进而访问微博数据和执行相关操作。 调用腾讯微博API的关键步骤包括: 1. **注册开发者账号**:在腾讯微博开放平台官网注册成为开发者,并创建应用,获取...
本示例代码关注的是如何使用Java语言结合腾讯微博的OAuth2.0授权机制来发送文本微博。OAuth2.0是一种广泛采用的开放标准,用于授权第三方应用访问用户的数据,而无需获取用户的用户名和密码。下面我们将深入探讨这个...
首先,我们需要了解腾讯微博开放平台提供的SDK(Software Development Kit)。SDK包含了必要的库文件和API接口,用于在Android应用中实现登录、发布内容、分享等功能。在"android腾讯微博分享demo"中,开发者可能...
本教程将深入讲解如何使用新浪和腾讯微博的OAuth2.0实现用户登录授权以及内容的转发功能。 1. OAuth2.0基础概念 OAuth2.0的核心是授权流程,涉及四个角色:资源所有者(User)、资源服务器(Resource Server)、...
SDK中实现了OAuth2.0授权协议,这是腾讯微博开放平台的安全机制,用于保护用户数据不被滥用。开发者需要先申请应用的AppID和AppKey,然后引导用户授权,获得Access Token,再用Token进行API调用。 3. **微博发布**...
1. **授权流程**:在分享到新浪或腾讯微博之前,应用需要获取用户的授权。这通常通过OAuth协议完成,用户在授权页面上登录微博账号并同意应用访问权限,然后返回一个访问令牌用于后续的API调用。 2. **API调用**:...
iWeibo系统是基于腾讯微博开放平台API开发的一套免费微博系统,拥有腾讯微博的全部功能,且为各垂直领域做专业化的组件设计与开发;同时与腾讯微博平台互通,开发者可获得海量的腾讯用户与信息资源,并在此版本基础...
腾讯微博开放平台为开发者提供了API接口,允许第三方应用与微博进行数据交互,包括用户的登录验证、信息获取以及内容发布等。要实现这个功能,你需要在腾讯微博开放平台注册并创建一个应用,获取到App Key(应用ID)...
总结来说,实现新浪、腾讯微博和微信的分享功能,开发者需要了解并集成各平台的SDK,处理好授权流程,然后调用对应的分享接口。使用统一的分享库可以简化这一过程,而导入debug签名文件是为了在Android设备上运行和...
在移动应用开发中,将应用与社交媒体平台如新浪和腾讯微博进行绑定,是提升用户体验、增加用户参与度和分享功能的重要手段。本文将详细介绍如何在你的应用中实现新浪及腾讯微博的绑定,并讨论相关的技术要点。 一、...
腾讯微博是中国互联网巨头腾讯公司推出的一款社交媒体服务,其API(应用程序接口)允许开发者通过编程方式与腾讯微博平台进行交互,实现各种自定义功能。在本文中,我们将深入探讨腾讯微博API的相关知识点,以及如何...