Twitter OAuth API大分析:原理、为什么、解决方案

作者:Guanlin Luo   来源:http://www.meicuoba.com/post/418.html

原 定的今年6月30日Twitter强制要求第三方程序必须使用OAuth API来读取并操控Twitter帐号,最终几度延迟到9月1日正式开始强制使用OAuth API。Twitter究竟是不是蛋疼呢?我想不是的。看到很多消息说中文推特网友少了一半,并且看到很多介绍OAuth API的文章写的很不好、不全面(你就写得很好??!),并且7月写的《手机翻墙指南》文章发不出来(求WordPress达人支招),于是决定自己写一 篇Twitter OAuth API和翻墙的文章。

为什么Twitter官方要强制第三方程序使用OAuth API?

以前使用Basic API时,其实对Twitter帐号非常地不安全,尤其是在依法管理的互联网环境里。拿 @meicuoba 举个例子好了。

以前调用Twitter的数据和发出tweet是这样的,例如连接到:

http://api.twitter.com/get_timeline.json?twittersereenname=meicuoba&password=let’smakesomethinghigh&type=home&application_name=TwitterKing

http://api.twitter.com/post_tweet.json?twittersereenname=meicuoba&password=let’smakesomethinghigh&content=I%20Love%Twitter&application_name=TwitterKing

看懂了吧?也就是说所有的帐户信息是这样明文传输的,所以也难怪5月份会有“Twitter帐户重置日”(麻烦收到那封信的同学转发给我让我见识见 识),也难怪冯正虎的Twitter帐号要被盗取。一旦你使用的Twitter第三方程序是熊猫的,或者你的流量被一个来自Cisco的设备“心神不宁” 了,嘿嘿,你的帐号就消失啦!

OAuth API的原理

看了上面的恐怖情形后,先庆祝一下自己的帐号还安全吧!Twitter也不是不知道这个情况,所以,Twitter才会强制使用OAuth技术了。

OAuth简单地解释就是随即生成一个二级密码。

Twitter官方给我的邮件回复中提到,要求网页程序必须跳转到 twitter.com 进行OAuth的授权,桌面、移动程序可以第一次使用Basic API,也就是裸露地传送密码的方式获得OAuth授权,后面的发推、获取tweet等一系列操作必须使用OAuth来操作。

例如,我们在Twitter的图床使用Twitter登录,就不能这个图床让你输入Twitter帐号和密码了,必须跳转到 https://twitter.com,如图,让用户在Twitter官网确认是否允许这个网页程序操作Twitter帐户。没有在官网登录的话则会要 求在官网登录后做出选择。所以,这时候则必须要连接到twitter.com。(点击一下一直蓝色球里的小鸟完了关掉即可)

请注意这个页面的地址是这样的:https://twitter.com/oauth/authorize?oauth_token=<Random String>

也就是说,Twitter生成一个随机字符组成的一个“帐户名”,然后用户确认授权后,再返回给第三方程序一个密钥和一个key,这两个都是唯一对应刚才生成的随机字符串。以后第三方程序操作Twitter帐户是这样的了:

http://api.twitter.com/get_timeline.json?oauth_token=hH3F1KJ413F33000fuckgfw0I01314u8fd312&oauth_secret=QjafZiDod13r24tq00GCD74&application_name=TwitterKing

http://api.twitter.com/post_tweet.json?content=I%20Love%Twitter&oauth_token=hH3F1KJ413F33000fuckgfw0I01314u8fd312&oauth_secret=QjafZiDod13r24tq00GCD74&application_name=TwitterKing

由于随机生成的“帐户名”和密钥只能拿来做低权限的操作,例如发推,获取timeline,获取好友列表之类的,但是没有权限操作Twitter帐 户的名称、改密码、修改头像、删除帐户,也就是说,即使被“心神不宁”了,也没什么大问题。真正的Twitter帐户密码只有twitter.com知 道,其他的第三方程序解触不到,更无法储存你真正的帐户密码。所有登录和授权都只在twitter.com进行。所以,更改个人资料也只能通过官方网站操 作了。

其实,不止Twitter采取这种高明的技术,Google帐户也开始提供这种服务了。在第三方网站提供Google帐户的密码总是很害怕,甚至是facebook。我讨厌看到“xx微博不会存储您的帐号密码”这样的字样,怎么有掩耳盗铃的味道?

自愿“依法管理”的“易被敌对势力煽动”的贱民该怎么办?

所以说,Twitter不是蛋疼的,而是为了用户更安全,只不过对“依法管理”的网民来说,“太安全”了,导致小白都跑掉了。(新浪笑而不语)

在桌面上,建议在推特中文圈等第三方程序,上,第一次登录时开启传送门即可,授权完返回到程序的时候关掉即可。当然,我说过,中国从来不缺乏自主创新,推特中文圈已经支持OAuth API代理了,也就是国外服务器编写的脚本在twitter.com填入用户名和密码,然后自动获取OAuth的密钥。

另外,很多桌面Twitter软件也是只需要第一次翻墙,以后不需要的。

那么,以下是我了解的各个平台支持OAuth API代理的程序。所谓API代理,其实原理和http代理一样,就是把刚才我举的例子的那种连接方式改为如下的方式而已:

http://twitterproxy.thereisawall.com/api/get_timeline.json?oauth_token=hH3F1KJ413F33000fuckgfw0I01314u8fd312&oauth_secret=QjafZiDod13r24tq00GCD74

进一步说明,就是让一个程序本身连接到http://api.twitter.com,因为众所周知的原因无法连接,现在让他连接到另外一个地址 http://twitterproxy.thereisawall.com/api(别试了,假的,例子而已)并当作是原来的服务器操作。而这个新的服 务器所做的事情,就是把所有的请求命令转发到真正的服务器http://api.twitter.com,这样的欺骗了某些路由器的“净化”,那些路由器 又管不了这些数据包出了墙所做的事情。

进入OAuth API时代后,原先的就不管用了。支持OAuth API代理已知的开源程序有twip和gtap,Google一下就可以下载到代码。如果你有国外的php空间,或者随便找个海外的免费空间,把下载的代 码配置下,然后上传即可。如果没有的话就见此文最后的一段,是隐藏的,独家告诉你如何搜索到API。

这是朋友帮我建立的一个私人twip的OAuth API Proxy,这个页面的地址其实就是API填入的地址。点击“Sign in with Twitter”按钮后,Twitter会按正常的第三方程序来处理,于是获得一个oauth_token,然后我在twitter.com点击了接受 后,则返回给API一个密钥和一个key,twip会要求我设置API的登录密码。然后我在支持API Proxy的客户端里填入这个API,然后填入帐户名和在API里设置的密码即可!

说白了,支持OAuth的API Proxy就是一个翻译和转发数据包的作用。所以,foursquare也是支持的。

下面附送一个列表,是我所知道的各个平台支持OAuth API Proxy的程序。不要抱怨优秀的程序不支持,因为“水深火热”的人民完全不需要这个功能。实在不行就用某个传送门的手机版。或者使用同样有中转功能的 Opera Mini国际版浏览器,因为Opera浏览器省流量而且速度快的原因就是因为把用户请求的网页在自己的服务器进行压缩然后再传输到手机上(怎么跟 Proxy一样?P话!要不为啥要“请中国用户下载中国版”。咦?怎么Skype也说过这话??!)。当然,一般途径是使用不了的,非一般的方法请参见 可能吧 的文章

Mac OS X:Twitterrific (需自行修改plist文件)

iOS:TwiBird(中国人开发的,当然支持API Proxy了) Twitterrific 官方的iOS客户端

Android:Twidroid (Twidroyd)

BlackBerry:UberTwitter

Windwos:推特中文圈

NOKIA和Symbian:Gravity的特定版本

其他平台:Google 或者 使用浏览器连接 dabr.in

顺便说一句,如果你的API Proxy支持SSL的https连接,请务必使用https连接,这样,即使被“爱心妈妈”看到了,也只能看到你连接的服务器地址,例如 https://twitterapi.meicuoba.com ,其他的什么都看不到。

咦?!怎么少了一段?作者忘了??!(公理,无需证明:作者不是脑残,嗯,随便点点,你会发现的,RSS阅读器读者请无视)

关于搜索Twitter API Proxy的方法:注意我那个截图,这个是这个API Proxy自动判断访问的是浏览器、搜索引擎爬虫或者是真正需要的第三方程序。所以,用浏览器打开就是这个效果。于是,聪明的你,在Google中搜索这个标题,和这个页面的第一句话不就OK了。嘿嘿!或者里面的随便那句话都可以啊!

关于搜索Twitter API Proxy的方法:注意我那个截图,这个是这个API Proxy自动判断访问的是浏览器、搜索引擎爬虫或者是真正需要的第三方程序。所以,用浏览器打开就是这个效果。于是,聪明的你,在Google中搜索这 个标题,和这个页面的第一句话不就OK了。嘿嘿!或者里面的随便那句话都可以

没有评论: