马上就要春节放假.年底活动安排的比较多.庸庸碌碌了一阵,忙中偷闲 这篇博文已经在LiveWriter躺了三天.下午回来一打开就看见标题.继续来完善Windows phone 7上Tencent微博客户端.上一篇中Windows Phone 7应用之Tencent微博——OAuth认证 提到以OAuth协议验证的原理流程,本篇来关注一下Tencent微博OAuth协议API封装. 目前Tencent 微博采用Google OAuth开放协议. 这是Google OAuth认证服务中提供的一个开源项目.其中提供多种语言Java/C#/Ruby等实现OAuth协议底层代码.版本是1.0的. 目前OAuth 2.0协议可能在年后[2011]推出. 不过在Google一个小项目中Play Ground With OAuth中已经推出OAuth2.0认证服务. 据我所知Oauth1.0 在访问安全上存在漏洞.才衍生出2.0 版本.但这个说法没有得到权威机构的证实. 如果对OAuth协议底层实现感兴趣的同学可以研究一下.
在进入封装Tencent OAuth协议API前,需要一些准备工作. 注册一个微博开放平台开发者账号.也就是我上节提到Appkey. 在这里想发一下牢骚.注册Sina微博需要身份证号绑定. 原因不解释.各位体会. 表示反感. 另外就是进入Sina 微博开放平台.你会发现 东西太多了. 作为一个第三方应用开发者你该干什么?从那下手呢? 你需要持续看完几大篇介绍平台文章才看到自己关心重点. 这也是我说Sina API是一个"巨无霸"绝非是空穴来风. 另外一个就是针对申请开发者账号, 采用一个独立微博 类似发一条消息 等候验证. 这种方式不仅在某种程度上暴露了开发者个人信息同时也是自己应用信息在未审核通过之前被他人浏览了, Sina在主观上暴露了开发者意图隐私上没有做保护. 太没安全感.开发人员的IDea很容易在未审核前提就被他人给剽窃了. 审核时间令人不敢恭维. 而Tencent在我发出第一次请求后就受理 通过,. 短短两天时间.并且是在审核之后才对外公开相应应用信息.
首先是Sina绑定身份证方式就让我觉得没有安全感.网络上没有自由性. 这仿佛也注定自己对Sina Mini Blog 始终没有信心. 当然常玩推特同学就不用担心这个问题了. 墙内和墙外是另个世界. 如上纯属于个人看法.Sina没有赢得我的好感,.转入正题 来说申请Appkey开发者账号.
Tencent Mini Blog PlatFrom[开发平台]:http://open.t.qq.com/ 点击大概看一下开发微博引用流程 你是否觉得这种方式比Sina那大篇幅文字要直观呢?:
审核通过后就看到从属于开发者和对应应用唯一标识AppKey:
有了开发应用AppKey剩下问题就来关注一下不同等级Appkey访问Tencent 微博的权限问题:
在第三方应用中关键是具有写请求权限. 这样我们才可以通过第三方向Tencent 微博平台写入数据. 这就意味至少要从Tencent那里拿到中级授权. 对于开发而言单个AppKey 具有75W次访问频率 已经足够使用. 其他相关素材以说明请参考Tencent Mini Blog PlatFrom[开发平台]:http://open.t.qq.com/ 如下重点来说一下Tencent 微博对第三方访问时API封装.
一般在微博的应用中.涉及到开放平台都具有两个核心特点. 第一个就是对外公开具备安全机制的数据访问协议[上篇讲到的Google OAuth] 另外一个因素就是开放平台数据流的流入和流出. 即开放平台本身的意义 开放数据读取. 和写入. 那磨对外公开的统一的API无非制定一个统一方式. 另外一个目前Sina和Tencent 都采用的是Google OAuth协议方式. 现在我们都能看到各自推出官方的支持不同语言的API.当然也包括一些第三方定义API. 如果你对Google OAuth协议有兴趣.也可以完全根据开放Sina或是Tencent等开放平台协议.可以写出一套自己的访问API. 这里来详细解析一下Tencent微博开放平台Google OAuth协议时如何工作的; 这也是封装API的前提.
ok.在开放平台中提供不同语言的SDK下载 这里拿C#作为标准语言. 官方也提供C#的比较简单的SDK.如果你觉得没有必要重复制造轮子.就拿官方提供版本来具体看一下Google OAuth如何工作的: C#版本的SDK下载地址 打开解决方案:
在Google OAuth协议中我们首先需要获得Request Token的授权 在通过Request Token授权信息获取Access_Token即最终开放平台身份认证才可实现第三方的数据读写.如上SDK中Oauth.cs即定义Google Oauth的源码 你可以可以在 Google OAuth开源项目中看到. 实现请求的方式有两种同步SyncHttp和异步AsyncHttp. QWeiboRequest则封装这两种请求的方式.来看看如何首先拿到RequstToken的授权: 在APi中可以看到Tencent给出请求说明: 需要参数:
request_token-URL地址:https://open.t.qq.com/cgi-bin/request_token. 发起一个Requst_token:
1: private bool GetRequestToken(string customKey, string customSecret)
2: {
3: string url = "https://open.t.qq.com/cgi-bin/request_token";
4: List<Parameter> parameters = new List<Parameter>();
5: OauthKey oauthKey = new OauthKey();
6: oauthKey.customKey = customKey;
7: oauthKey.customSecrect = customSecret;
8: oauthKey.callbackUrl = "http://www.qq.com";
9:
10: QWeiboRequest request = new QWeiboRequest();
11: return ParseToken(request.SyncRequest(url, "GET", oauthKey, parameters, null));
12: }
在对应参数中需要指定Appkey的键值对. 和回调路径[也可以不指定 这里为了演示]. 就可以发起指定Get请求.来看一下带有完整参数获取Request_Token URL:
1: //Request _Token 完整的URL地址 可以详细看到每个参数配置
2: https://open.t.qq.com/cgi-bin/request_token
3: ?oauth_callback=http%3A%2F%2Fqunmgr.qq.com%2Foauthapi%2Fcallback.php
4: &oauth_consumer_key=0aae7ba5c10d4b939694b0b3b9ffe8ac
5: &oauth_nonce=b788149731e0ed75daa03a6e1e30427c
6: &oauth_signature=zO5%2FgT%2FP6tbhBBZVuoyfjPwjdxY%3D
7: &oauth_signature_method=HMAC-SHA1
8: &oauth_timestamp=1288932298
9: &oauth_version=1.0
ok.用Fiddler监视一下请求的参数和数据:
看一下返回值和对应参数:-返回值:
1: //从tencent 获取到请求返回值
2: oauth_token=a63f4a0e1242462fb8c11e53159ba294
3: &oauth_token_secret=40ece707e064128e4fec692e3c09c692
4: &oauth_callback_confirmed=true
参数说明:
You See!这就是一个Request _Token从请求参数发出到返回值的整个过程, 获取Request_Token最为关键参数就是Oauth_token我们可以通过它获得AccessToken. 依次类推可以根据Tencent给出官方说明 获得AccessToken 具体实现:
1: //获取一个人已经认证的Access Token
2: private bool GetAccessToken(string customKey, string customSecret, string requestToken,
3: string requestTokenSecrect, string verify)
4: {
5: string url = "https://open.t.qq.com/cgi-bin/access_token";
6: List<Parameter> parameters = new List<Parameter>();
7: OauthKey oauthKey = new OauthKey();
8: oauthKey.customKey = customKey;
9: oauthKey.customSecrect = customSecret;
10: oauthKey.tokenKey = requestToken;
11: oauthKey.tokenSecrect = requestTokenSecrect;
12: oauthKey.verify = verify;
13:
14: QWeiboRequest request = new QWeiboRequest();
15: return ParseToken(request.SyncRequest(url, "GET", oauthKey, parameters, null));
16: }
通过Requst_token 获得认证后就成功获取Access_Token前提条件Oauth_token参数. 通过OAuth_Token从Tencent服务器端交换过来一个Access_token. 从Tencent请求需要参数:
ok.在来通过IEWatch或是Fiddle看一下请求的整个URL参数配置:
1: //对应的Access_Token请求的完整URL 注意Oauth_token对应从REquest_token获取返回值Oauthtoken
2: https://open.t.qq.com/cgi-bin/access_token
3: ?oauth_consumer_key=0aae7ba5c10d4b939694b0b3b9ffe8ac
4: &oauth_nonce=35885b07fe7dc53942d405e552d086fe
5: &oauth_signature=TXBihj%2FH4avLJaWmjYARDVVCu8M%3D
6: &oauth_signature_method=HMAC-SHA1
7: &oauth_timestamp=1288933101
8: &oauth_token=66ae88faecd14a1f8e826d35d5e857a7
9: &oauth_verifier=1154e3657d5542338eece2767172da02
10: &oauth_version=1.0
在来查看对应的返回值:
1: //Access_token对应的返回值
2: oauth_token=ffc37464473e48a2b22226350dc98210
3: &oauth_token_secret=3fe92ec42e936672ceca549d432c237d
4: &name=chenkai
返回值参数说明:
注意在请求的参数中. 上一次通过Request_token返回一个OauthToken返回值用来作为AccessToken请求的Oauth_Token参数的值从服务器端交换出一个AccessToken.从返回值参数name我们就可以看到自己微薄的账户名以及即将获取的Oauth_token和Secret键值对.
如上从上篇的Google Oauth协议概念转换成与Tencent平台交互. 转换成整个流程API的封装. 由此我们可以通过这个Google OAuth在Tencent平台上运用我们可以轻松知道整个获取数据整个流程.
整理好Oauth认证协议.注意官方给出C#SDK针对普通类库类型. 相对在Windows phone 7开发必须继承Windows phone 7 Class laibry类库.APi我们可以重新设计:
OAuth协议目录下.OAuthBase作为Google OAuth协议基类. 在此基础上TencentOAuthBase类继承与它,并实现对Tencent基础请求进行处理. 当然如此定义好数据输入和输出通道 剩下就是大量关于Windows phone 7Tencent微博应用定义和实现了. 这就是一个量的问题.API初步定义结构分为三层:
如上也是我对Windows phone 7 API封装结构整个设想,.现在已经走到第二步. 关于红色框系.即在完整移植Tencent微博到Windows phone 7客户端后.加上不同于Web终端 移动终端特有的运用. 正在考虑把微博人物之间关系建立人际圈. 加入Bing Map Control相关小细节.
本篇初步拟定API封装整个层次思路. 实现对Google Oauth协议通信的实现. 有了这些 就不愁数据的交互操作了. 下一篇中我会采用编译好的API实现在Windows phone 7上推送出第一条微博. 如有任何疑问请在留言中提出.