Windows Phone 7应用之Tencent微博——OAuth认证
2011-01-13 09:16 chenkai 阅读(4216) 评论(34) 编辑 收藏 举报前段时间写一篇关于Windows Phone 7应用之sina微博——UI设计 针对的是把Sina的微博.移植到WP7客户端上. 期间园子有几位园友提出共同开发这个应用.可是年底比较忙.时间比较紧张,断断续续的利用业余时间在更新这个Sina Mini Blog. 相对原来我对Sina Mini Blog在WP7客户端上设想. 功能性缩水很多. UI我在参考NetEasy,Tencent,FaceBook,Twitter后做了重新做了第二次设计, 总体主题和元素搭配做了更改,一方面出于对美观度考虑 另外一个更重要是就是Windows phone 7用户操作习惯.重现. 我在不断封装Sina API时也感觉到Sina 微博在功能上细节偏多, 很多需要控制的因素是需要在设计阶段就要考虑到. 如果你要完整移植过来 则不断修改自己的设计. 有些在Web功能并不适合在移动客户端上体现. 或是体现形式会发生改变. 特别Web端和移动客户端用户操作习惯不同, 这也会导致我们设计WP7客户端输入元素选择不同,这也是我在设计Sina Mini Blog Wp7 Client中才令我感到比较困惑的地方.
我相信很多使用过Sina 微博或了解Sina API人应该知道. 新浪微博09年3月上线后一年,相继不断完善. 我们可以简单比对一下API开发平台就能感到 Sina API相对Tencent API 简直就是一个"巨无霸". 这也是我在封装Sina API 为了设计结构上合理 不断发生API代码重构这种情况下 很痛苦一件事. 另外一个就是大量应用细节化, 时间一推移,这让我觉得想要把Sina Mini Blog以完整高质量的版本移植Windows phone 7上成为一件遥遥无期的事情. ”Sina的高大全让人活的很累. 要么你学会功能上”大块”取舍, 要么就要在设计和功能迭代中做好十足耐心准备.k抗战到底,. 当然这也是我在微博WP7客户端转移到Tencent 微博一个很重要原因之一. 在这点上Tencent让我很轻松.
ok.anyway.稍后我抽时间把这个简化版本的Sina mini blog 在WP7客户端整理一篇博文发出来. 转入本文主题.来说说现在微博的应用中涉及到Google的OAuth认证.
<1>什么是OAuth?
在目前微博应用 如果设计一个对外开放的API平台. 使用最多的应该就是OAuth对用户身份的认证上. 国内微博mini blog门户类似Sina.Tecent国外的Twitter、FaceBook都在使用这种OAuth协议.
OAuth协议:为用户资源的授权提供了一个安全的、开放而又简易的标准,与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息[用户名与密码],即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的. 也许你还太不太明白. 那就简单那Sina 中队用户身份验证OAuth机制如何处理 作图如下:
弄清楚OAUTH流程之前,我们先了解下OAUTH的一些术语的定义:
- OAUTH相关的三个URL:
- Request Token URL: 获取未授权的Request Token服务地址
- User Authorization URL: 获取用户授权的Request Token服务地址
- Access Token URL: 用授权的Request Token换取Access Token的服务地址
如上三个地址一般情况在开放API平台都是相对固定.类似我们在调用Request Token URL获得一个Request Token以及一个密钥,.三个步骤就是对应OAUTH的三个URL服务地址,上面的步骤中,每个步骤分别请求一个URL,并且收到相关信息,并且拿到上步的相关信息去请求接下来的URL直到拿到Access Token,当我们有了Access Token就可以有权访问用户授权的资源了.
在执行第一个请求时 为了验证用户身份是否合法.一般都会在开发的API平台公开一个APPKey和APPSecret .类似新浪微博平台要建立应用需要申请这样的一个开发者应用APPKey, Tencent也是如此:类似我申请Tencent开发APPKey
可能你还不是太清楚关于OAuth这种验证机制过程,在官方找到一个特殊应用流程来参考 新蓝OAuth认证来详细解释.
标号中ABCDEFG分别表示不同操作: 具体进行一下拆分
A. 使用者(第三方软件)向OAUTH服务提供商请求未授权的Request Token。向Request Token URL发起请求,请求需要带上的参数
B. OAUTH服务提供商同意使用者的请求,并向其颁发未经用户授权的oauth_token与对应的oauth_token_secret,并返回给使用者。
C. 使用者向OAUTH服务提供商请求用户授权的Request Token。向User Authorization URL发起请求,请求带上上步拿到的未授权的token与其密钥。
D. OAUTH服务提供商将引导用户授权。该过程可能会提示用户,你想将哪些受保护的资源授权给该应用。此步可能会返回授权的Request Token也可能不返回。如Yahoo OAUTH就不会返回任何信息给使用者。
E. Request Token 授权后,使用者将向Access Token URL发起请求,将上步授权的Request Token换取成Access Token。请求的参数见上图,这个比第一步A多了一个参数就是Request Token。
F. OAUTH服务提供商同意使用者的请求,并向其颁发Access Token与对应的密钥,并返回给使用者。
G. 使用者以后就可以使用上步返回的Access Token访问用户授权的资源,这时我们就可以访问类似微博对应授权访问的资源.
这样一来就能看到OAuth协议验证整个过程. 由此相对以往传统通过直接暴露敏感的用户名和登录密码等信息,这种方式不仅简单而且安全.保障用户在不用传输自己铭感信息同时享受到自己需要的服务.
OAUTH认证授权具有以下特点:
1. 简单:不管是OAUTH服务提供者还是应用开发者,都很容易于理解与使用;
2. 安全:没有涉及到用户密钥等信息,更安全更灵活;
3. 开放:任何服务提供商都可以实现OAUTH,任何软件开发商都可以使用OAUTH;
这也是为何在SNS社交即时类站点中经常.涉及到提供OAuth方式来对外开放资源. 这样不仅有效保证资源安全性同时是开放的.
<2>Play Ground With OAuth
目前Sina 和Tencent 微博都采用OAuth方式来验证对外开放用户身份同时也作为资源访问协议.OAuth开始于2006年11月,当时布莱恩·库克(Blaine Cook)正在开发 Twitter的OpenID实现,2007年4月,成立了OAuth讨论组, 2007年10月3日, OAuth核心 1.0最后的草案发布了.2010年4月,OAuth 1.0协议发表为RFC 5849,一个非正式RFC.
目前已经开始下一个版本OAuth 2.0但不向后兼容OAuth 1.0。 OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机.Google,Yahoo,Microsoft等都提供了OAUTH认证服务.
如果你觉得还是不好理解这个OAuth协议. Google推出一个Play Ground With OAuth 提供整个OAuth整个流程界面操作:
首先我们找到指定提供OAuth认证服务的链接地址. 一般作为对外开放的平台这个地址一般情况下都是固定的:
选择Google提供的Book Search,在找到认证地址后 则来配置相关OAuth协议需要相关参数:
第3 4 5步则分别根据OAuth协议具体参数配置获取Request Token,服务提供商同意用户请求则提供oauth_token与对应的oauth_token_secret.即第5步使用者向OAUTH服务提供商请求用户授权的Request Token.OAUTH服务提供商将引导用户授权,
授权成功后则返回给用户一个Access_token以及对应的密钥,访问对应授权的资源. 明白了把 其实核心在如何获取Access_token授权.对象,
最后一步:获得指定服务提供商提供的Access Token,访问平台资源和指定授权的数据.并可以指定数据返回的格式,已经对应OAuth对应处理的版本1.0/2.0. 以及Access Token发送请求的方式 get/Post等:
执行URL以及结果上面执行整个URL 参数, 下面则对应回应执行从平台请求的数据结果:
很多人在自定义Sina或Tencent进行封装API 时对OAuth的参数都是一知半解 很苦恼,这里详细介绍介绍在发钱Requst_Token请求前OAuth参数设置:
OAUTH相关的参数定义:
- oauth_consumer_key: 使用者的ID,OAUTH服务的直接使用者是开发者开发出来的应用。所以该参数值的获取一般是要去OAUTH服务提供商处注册一个应用,再获取该应用的oauth_consumer_key。类似我上文体到Tencent注册应用后提供的APPKey即是
- oauth_consumer_secret:oauth_consumer_key对应的密钥。
- oauth_signature_method: 请求串的签名方法,应用每次向OAUTH三个服务地址发送请求时,必须对请求进行签名。签名的方法有:HMAC-SHA1、RSA-SHA1与PLAINTEXT等三种。
- oauth_signature: 用上面的签名方法对请求的签名。
- oauth_timestamp: 发起请求的时间戳,其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数。本次请求的时间戳必须大于或者等于上次的时间戳。
- oauth_nonce: 随机生成的字符串,用于防止请求的重放,防止外界的非法攻击。
- oauth_version: OAUTH的版本号,可选,其值必须为1.0。现在已经Google OAuth已经提供2.0版本验证,而Tencent则采用的是Google的OAuth则可以采用 2.0版本杜绝 1.0中数据访问权限的漏洞.
在封装Sina和Tencent中对于用户认证都采用的是OAuth方式,了解OAuth工作原理和机制也是自定义封装API一个很重要的前提. 当然现在官方已经提供了部分开发用户封转好的C#的SDK. 但我觉得写不怎么样. 有的提供并不完善.
因Tencent API相对Sina的巨无霸版本. 已经瘦身很多. 这样一来对于封装API 和Tencent Mini Blog整个功能移植到Windows phone 7客户端上市非常重要的.稍后我会 持续更新 Windows phone 7 上Tencent客户端应用相关文章,. 如有留言或疑问请在留言评论中提出.
[昨天不知博客园什么情况 下午突然上不去….???]