支持OAuth的Twip

作者:来源:http://heybronco.net/tech/twitter/the-twip-support-oauth/

Twitter官方宣布将在6月30日终止对Basic Authorization验证方式的支持,广大使用API的天朝网民纷纷表示鸭梨很大~目前最新版的3.0版Twip还不支持OAuth(2.2版支 持),前几天问了下yegle童鞋,最近似乎都没有更新计划。正好最近不算太忙,一时手痒,经过一星期的“艰苦奋战”,终于让Twip 3.0支持了OAuth,命名为Twip 3.1~~原本前几天就打算发出来的,这几天不断有改进的想法冒出来,本着“精益求精”的想法,拖到了今天…… :!:

系统要求

  1. PHP版本大于5.2.4并已启用curl
  2. 若采用Apache需支持mod_rewrite
  3. mcrypt库(用于加密access token,没有也能工作)

配置方法

猛击这里下载源代码。另外,也可以使用svn checkout这个地址:http://twip.googlecode.com/svn/branches/heybronco/。基本的配置方法可参见yegle写的wiki。这里主要说一下OAuth的部分。

  1. 使用OAuth验证发推时将不显示连接到twip的客户端,而是显示与twip中OAuth CONSUMER_KEY和CONSUMER_SECRET对应的注册程序。源代码里已经包含可用的CONSUMER_KEY和CONSUMER_SECRET,对应的程序名称为”Development”,这个是编写”TwitterOAuth Library”的Abraham Williams放在示例代码中的(已经失效)。若希望使用自定义的程序名,请前往Twitter程序中心注册一个新程序,注册的时候Application Type选”Browser”,Callback URL填入填写能访问到”callback.php”文件的完整网址,Default Access type选”Read & Write”。注册完成后将”CONSUMER_KEY”和”CONSUMER_SECRET”填入”oauth_config.php”中。
  2. “oauth_config.php”为OAuth相关配置的文件,其中OAUTH_DIR指定保存OAuth token文件的位置,请放在一个web用户无法访问的目录中,比如public_html(www)目录的上一级,注意权限问题,同时确保以”/”结尾CONSUMER_KEYCONSUMER_SECRET使用默认或者替换成自己的;OAUTH_CALLBACK中填写能访问到”callback.php”文件的完整网址;SECURE_KEY中保存的是加密数据所用的随机字符,可以随便填入字符,或者保持默认。
  3. 检查index.php中”enable_oauth”项已经为true以启用OAuth,配置完成。

使用方法

访问twip的首页,页面将显示当前Twip所使用的身份验证方法等运行状态及操作说明。注意,若twip的架设者启用了 ”PRIVATE_API”选项,首页上将给出提示,此时需要确保自己处于被允许的用户范围,否则即使获得了access token也无法使用此API。另外,access token是否被加密存储也会显示在首页上。

获得access token需要翻墙。点击”Sign in with Twitter”按钮,进入Twitter登陆界面,输入自己的用户名和密码后,转到授权界面,询问是否授予相应权限给应用程序,点击”Access”按钮,进入保存token界面,此时要求输入密码。这个密码是用于访问保存在twip服务器上的access token文件的密码,所有通过此twip进行的发推等操作均需要使用此密码,这里称为API密码。API密码可以与自己的Twitter密码相同或不同,但若要使用Mixero,请填写Twitter密码。因 为Mixero不通过API来校验密码,若API密码与Twitter不同,要么无法登陆,要么无法获得Twitter信息。完成后点击”保存”按钮,页 面跳转到首页。若能看到你的timeline,说明access token获得成功。之后就可以在客户端使用用户名和API密码登陆了。

如果忘记了自己的API密码,可以点击”Sign in with Twitter”按钮来重新获得access token,原来的记录将被覆盖。若不想再继续使用此API,可进入自己的Twitter设置界面,在”connections”页面中找到此API,然 后点击”Revoke Access”来移除访问许可。当然,也可以直接把twip中保存的access token删除,方法是在首页上点击”login”,输入用户名和API密码后,点击”remove the token”即可。

使用Gravity等支持OAuth的客户端需要注意一下,在添加账户的时候验证类型要选Plaintext而不是Oauth/Secure,同时账户密码填入的是API密码。Update:用户名不能填email,否则会验证失败。(才知道原来能用email登陆Gravity,thanks to mxwu)

对于想使用byethost主机的筒子们屏蔽了twitter的主机,很遗憾,使用ip替换是没办法使用OAuth的。因为在请求token的时候若使用ip地址来访问,Twitter会返回一个301,重定向到twitter.com若 点击”Sign in with Twitter”之后出现”Could not connect to Twitter. Refresh the page or try again later.”,最大的可能是主机屏蔽了Twitter,目前除了换主机以外没有解决办法。当然,敝人水平有限,也许有解决办法也说不定,这个就等待高人来解决了。 :cool: 另一种可能是key和secret失效,这个可以通过查看Debug info的http_code来确定。若为401,则表示key和secret已经失效。

安全问题

之前在推上看到有人质疑兽兽@showfom的饭否会有安全性问题,这边也会着重考虑这个问题。

若空间支持mcrypt库,access token会被加密。是否加密会在首页显示,你可以据此决定是否使用此API。access token以API密码和SECURE_KEY作为密钥进行blowfish加密。API密码将进行MD5计算,结果拼接SECURE_KEY后进行第二 次MD5计算,计算结果和access token的密文以文件的形式进行保存。这样,即使是twip的拥有者也无法使用access token。若空间不支持mcrypt库(这个基本很少吧),access token将不会加密。

当然,因为twip是完全开源的,谁都可以来修改代码,上面说的安全性不一定能得到保证。至于用不用,看你自己吧。

版权

Twip原版使用Mozilla Public License 1.1授权,TwitterOAuth库虽没写明授权协议,但也有相关授权说明。若需要进行再次开发以及发布,请一定遵从相关协议的说明。

其他

感谢党,感谢国家,感谢@yegle@xmxsuperstar,感谢Abraham Williams,感谢Dreamhost。

Twip原版的相关信息可参考其Project Website。TwitterOAuth库相关信息参考这里

ps一句,本来打算找个免费空间来演示的,可惜找了几个都没搞定,哎~~~大家就自己慢慢试吧~ :smile:

以上!


没有评论: