当前位置:首页 > 网站制作 > 正文内容

在Twitter应用中使用OAuth

admin15年前 (2010-05-22)网站制作497
Twitter官方宣布将在2010年6月30日终止对Basic Authorization验证方式的支持,全面启用OAuth的认证方式,广大使用API的天朝网民纷纷表示鸭梨很大,众多使用Basic Auth认证的第三方程序如何适应这个新的变化,本文将会介绍如何在Twitter应用中使用OAuth认证。   一、介绍OAuth   在Twitter未支持OAuth之前,使用的是Basic Auth认证。Basic Auth要求Twitter应用把用户名和口令直接附加在HTTP或HTTPS协议头中发送给Twitter API。这样,Twitter应用势必要求用户在其应用中输入自己的Twitter用户名和口令,从而可以把Twitter的用户名和口令附加在HTTP(S)协议中发送给Twitter。这样Twitter应用开发者就能知道使用了他的Twitter应用的用户的所有用户名和密码,这样开发者就能随意使用这些Twitter账号登陆Twitter做任何操作了。比如,可以修改用户的Twitter密码,甚至直接去Twitter的Settings中删除这个帐号。这将带来潜在的安全性问题。   而使用OAuth,Twitter应用无需知道用户的Twitter口令,只需要得到Twitter和用户双方的授权信息(后面会说这个授权信息——其实就是Token)即可。这样,Twitter应用开发者就不知道用户的Twitter口令,只能使用这个授权信息(Token)做有限的操作,无法修改用户的Twitter口令,也无法删除用户的Twitter账号。这在安全性上有了很大提高。   二、OAuth认证流程   要使用OAuth,首先要去Twitter中注册一个自己的Twitter应用,注册地址:http://dev.twitter.com/apps/new 。注册之后,会得到自己Twitter应用的Consumer key和Consumer secret,都是一个字符串。之后就可以进行OAuth的认证过程:   2.1、Twitter应用把Consumer key和Consumer secret放入HTTP请求中发送到Twitter API: https://api.twitter.com/oauth/request_token ,得到一个Request Token   2.2、Twitter应用重定向用户浏览器到 https://api.twitter.com/oauth/authorize?oauth_token=<Request Token> ,其中<Request Token>为在2.1中取得的Request Token   2.3、Twitter官方网站上提示用户登录,之后提示用户选择是否允许此Twitter应用访问自己的账号。这个选择一次即可,之后在2.5中Twitter应用可以记录用户的选择(正因为OAuth的认证过程必须在官方网站上进行,所以对于某些国家的普通民众来说,相比Basic Auth是一个不方便的地方)   2.4、用户选择允许之后,浏览器被重定向到Callback URL,并附加Verifier参数和新的Token。这个Callback URL是Twitter应用用于接收Verifier和新的Token的地址。Callback URL是注册Twitter应用需要填写的,也可以在2.1中在HTTP请求中和Consumer key和Consumer secret一起发送到Twitter API。由于Callback URL是浏览器访问的,并不是由Twitter服务器访问的,所以如果需要做测试的话,这个Callback URL可以是局域网地址或者是本机上的Web服务地址,比如可以是 http://localhost:8080/receive.jsp 。   2.5、Twitter应用取得Verifier和新的Token后,把他们一起发送给Twitter API: https://api.twitter.com/oauth/access_token 取得一个Access Token。之后使用这个Access Token就可以调用各种Twitter API了。之后在使用每个Twitter API的时候,把Access Token附加于每一个Twitter API的HTTP请求中即可,Twitter API的使用,请见月光博客:http://www.williamlong.info/archives/2152.html 。Twitter应用可以把这个Access Token保存下来,以便以后直接使用,不需要用户重复去Twitter官方网站授权了   三、使用OAuth   由于OAuth的认证比较复杂,并且HTTP参数繁多。如果从头开始做OAuth势必需要把各个参数正确的并按一定顺序的填写到HTTP请求中。好在我们有各种开源的OAuth库(参考:http://dev.twitter.com/pages/oauth_libraries )可以使用。在这里,我把OAuth的Java库Scribe作为例子进行介绍(考虑到国内情况,我对Scribe做了一些修改,使其支持代理服务器):   3.1、创建一个twitter.properties,其中的内容为:     consumer.key=<Twitter应用的Consumer Key,可以去Twitter官方网站中自己的Twitter应用的参数中找到>     consumer.secret=<Twitter应用的Consumer Secret>     request.token.verb=POST     request.token.url=https://api.twitter.com/oauth/request_token     access.token.verb=POST     access.token.url=https://api.twitter.com/oauth/access_token     callback.url=http://localhost:8080/receive.jsp   3.2、读取twitter.properties到Properties对象中:     Properties tp = new Properties();     tp.load(TwOAuth.class.getResourceAsStream("/twitter.properties"));     BufferedReader stdinRd = new BufferedReader(new InputStreamReader(System.in));   3.3、生成代理服务其对象(国内用户使用,因为国内无法直接访问Twitter API):     Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("HTTP代理服务器地址", HTTP代理服务器端口));//如果不使用代理服务器,请写为Proxy proxy = null;   3.4、取得Request Token(对应2.1):     Scribe sb = new Scribe(tp);     Token tk = sb.getRequestToken(proxy);   3.5、重定向用户浏览器(由于例子是命令行程序,所以直接打印出访问地址,由用户自己打开浏览器访问),返回Callback URL后,提示用户输入Token和Verifier(如果是Web程序,可以直接通过Callback URL中获取Token和Verifier。Twitter认证之后,浏览器地址栏中就会出现Token和Verifier)(对应2.2、2.3、2.4):     System.out.println("Please visit https://api.twitter.com/oauth/authorize?oauth_token=" + tk.getToken() + " and get the token and verifier, then input the token:");     tk = new Token(stdinRd.readLine(), tk.getSecret());     System.out.println("And please input the verifier:");   3.6、发送Token和Verifier,取得Access Token(对应2.5):     tk = sb.getAccessToken(tk, stdinRd.readLine(), proxy);   3.7、可以开始使用各种Twitter API了,首先我们试验取得用户自己的时间线,结果以Xml格式返回并打印出来:     Request req = new Request(Request.Verb.GET, "https://api.twitter.com/statuses/user_timeline.xml");     sb.signRequest(req, tk);//把Access Token附加到HTTP请求中     Response resp = req.send(proxy);     System.out.println(resp.getBody());//我们看到打印出很多信息,其中有很完整的时间线信息,只要解析这个Xml就能得到所有的信息   3.8、再测试更新自己的状态(发推):     req = new Request(Request.Verb.POST, "https://api.twitter.com/statuses/update.xml");     req.addBodyParameter("status", "我们Test");//发推内容:我们Test     sb.signRequest(req, tk);     resp = req.send(proxy);     System.out.println(resp.getBody());//我们看到,发推成功。在Twitter中也能看到程序发的推了   四、后记   OAuth的基本介绍结束了,最后附上Java版OAuth的源代码和修改过支持代理服务器的Java OAuth库Scribe(点击下载)。其他语言应该也是类似的,各种语言的OAuth库可以参考:http://dev.twitter.com/pages/oauth_libraries 。望大家做出国内直接可用的优秀Twitter应用。 Twitter官方宣布将在2010年6月30日终止对Basic Authorization验证方式的支持,全面启用OAuth的认证方式,广大使用API的天朝网民纷纷表示鸭梨很大,众多使用Basic Auth认证的第三方程序如何适应这个新的变化,本文将会介绍如何在Twitter应用中使用OAuth认证。   一、介绍OAuth   在Twitter未支持OAuth之前,使用的是Basic Auth认证。Basic Auth要求Twitter应用把用户名和口令直接附加在HTTP或HTTPS协议头中发送给Twitter API。这样,Twitter应用势必要求用户在其应用中输入自己的Twitter用户名和口令,从而可以把Twitter的用户名和口令附加在HTTP(S)协议中发送给Twitter。这样Twitter应用开发者就能知道使用了他的Twitter应用的用户的所有用户名和密码,这样开发者就能随意使用这些Twitter账号登陆Twitter做任何操作了。比如,可以修改用户的Twitter密码,甚至直接去Twitter的Settings中删除这个帐号。这将带来潜在的安全性问题。   而使用OAuth,Twitter应用无需知道用户的Twitter口令,只需要得到Twitter和用户双方的授权信息(后面会说这个授权信息——其实就是Token)即可。这样,Twitter应用开发者就不知道用户的Twitter口令,只能使用这个授权信息(Token)做有限的操作,无法修改用户的Twitter口令,也无法删除用户的Twitter账号。这在安全性上有了很大提高。   二、OAuth认证流程   要使用OAuth,首先要去Twitter中注册一个自己的Twitter应用,注册地址:http://dev.twitter.com/apps/new 。注册之后,会得到自己Twitter应用的Consumer key和Consumer secret,都是一个字符串。之后就可以进行OAuth的认证过程:   2.1、Twitter应用把Consumer key和Consumer secret放入HTTP请求中发送到Twitter API: https://api.twitter.com/oauth/request_token ,得到一个Request Token   2.2、Twitter应用重定向用户浏览器到 https://api.twitter.com/oauth/authorize?oauth_token=<Request Token> ,其中<Request Token>为在2.1中取得的Request Token   2.3、Twitter官方网站上提示用户登录,之后提示用户选择是否允许此Twitter应用访问自己的账号。这个选择一次即可,之后在2.5中Twitter应用可以记录用户的选择(正因为OAuth的认证过程必须在官方网站上进行,所以对于某些国家的普通民众来说,相比Basic Auth是一个不方便的地方)   2.4、用户选择允许之后,浏览器被重定向到Callback URL,并附加Verifier参数和新的Token。这个Callback URL是Twitter应用用于接收Verifier和新的Token的地址。Callback URL是注册Twitter应用需要填写的,也可以在2.1中在HTTP请求中和Consumer key和Consumer secret一起发送到Twitter API。由于Callback URL是浏览器访问的,并不是由Twitter服务器访问的,所以如果需要做测试的话,这个Callback URL可以是局域网地址或者是本机上的Web服务地址,比如可以是 http://localhost:8080/receive.jsp 。   2.5、Twitter应用取得Verifier和新的Token后,把他们一起发送给Twitter API: https://api.twitter.com/oauth/access_token 取得一个Access Token。之后使用这个Access Token就可以调用各种Twitter API了。之后在使用每个Twitter API的时候,把Access Token附加于每一个Twitter API的HTTP请求中即可,Twitter API的使用,请见月光博客:http://www.williamlong.info/archives/2152.html 。Twitter应用可以把这个Access Token保存下来,以便以后直接使用,不需要用户重复去Twitter官方网站授权了   三、使用OAuth   由于OAuth的认证比较复杂,并且HTTP参数繁多。如果从头开始做OAuth势必需要把各个参数正确的并按一定顺序的填写到HTTP请求中。好在我们有各种开源的OAuth库(参考:http://dev.twitter.com/pages/oauth_libraries )可以使用。在这里,我把OAuth的Java库Scribe作为例子进行介绍(考虑到国内情况,我对Scribe做了一些修改,使其支持代理服务器):   3.1、创建一个twitter.properties,其中的内容为:     consumer.key=<Twitter应用的Consumer Key,可以去Twitter官方网站中自己的Twitter应用的参数中找到>     consumer.secret=<Twitter应用的Consumer Secret>     request.token.verb=POST     request.token.url=https://api.twitter.com/oauth/request_token     access.token.verb=POST     access.token.url=https://api.twitter.com/oauth/access_token     callback.url=http://localhost:8080/receive.jsp   3.2、读取twitter.properties到Properties对象中:     Properties tp = new Properties();     tp.load(TwOAuth.class.getResourceAsStream("/twitter.properties"));     BufferedReader stdinRd = new BufferedReader(new InputStreamReader(System.in));   3.3、生成代理服务其对象(国内用户使用,因为国内无法直接访问Twitter API):     Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("HTTP代理服务器地址", HTTP代理服务器端口));//如果不使用代理服务器,请写为Proxy proxy = null;   3.4、取得Request Token(对应2.1):     Scribe sb = new Scribe(tp);     Token tk = sb.getRequestToken(proxy);   3.5、重定向用户浏览器(由于例子是命令行程序,所以直接打印出访问地址,由用户自己打开浏览器访问),返回Callback URL后,提示用户输入Token和Verifier(如果是Web程序,可以直接通过Callback URL中获取Token和Verifier。Twitter认证之后,浏览器地址栏中就会出现Token和Verifier)(对应2.2、2.3、2.4):     System.out.println("Please visit https://api.twitter.com/oauth/authorize?oauth_token=" + tk.getToken() + " and get the token and verifier, then input the token:");     tk = new Token(stdinRd.readLine(), tk.getSecret());     System.out.println("And please input the verifier:");   3.6、发送Token和Verifier,取得Access Token(对应2.5):     tk = sb.getAccessToken(tk, stdinRd.readLine(), proxy);   3.7、可以开始使用各种Twitter API了,首先我们试验取得用户自己的时间线,结果以Xml格式返回并打印出来:     Request req = new Request(Request.Verb.GET, "https://api.twitter.com/statuses/user_timeline.xml");     sb.signRequest(req, tk);//把Access Token附加到HTTP请求中     Response resp = req.send(proxy);     System.out.println(resp.getBody());//我们看到打印出很多信息,其中有很完整的时间线信息,只要解析这个Xml就能得到所有的信息   3.8、再测试更新自己的状态(发推):     req = new Request(Request.Verb.POST, "https://api.twitter.com/statuses/update.xml");     req.addBodyParameter("status", "我们Test");//发推内容:我们Test     sb.signRequest(req, tk);     resp = req.send(proxy);     System.out.println(resp.getBody());//我们看到,发推成功。在Twitter中也能看到程序发的推了   四、后记   OAuth的基本介绍结束了,最后附上Java版OAuth的源代码和修改过支持代理服务器的Java OAuth库Scribe(点击下载)。其他语言应该也是类似的,各种语言的OAuth库可以参考:http://dev.twitter.com/pages/oauth_libraries 。望大家做出国内直接可用的优秀Twitter应用。

扫描二维码推送至手机访问。

版权声明:本文由博赚恋吧资源站发布,如需转载请注明出处。

本文链接:https://432l.com/post/2601.html

标签: Web20
分享给朋友:

相关文章

恋吧强烈推荐—一个成功的博客必须知道的80个博客工具

一个成功的博客必须知道的80个博客工具不管你的博客流量大小与否,不管你的博客主题是什么,只要你想成为一个成功的博客,下面的博客工具肯定会对你有所帮助。一般的博客工具:Backupmyblog:自动备份你的博客数据,只对于mysql数据库有效,wordpress用户用不用担心了。Feedburner:rss烧制工具。Feedblitz:邮件订阅工具。MyBloglog:博客统计工具,可以显示最近访客...

恋吧发现并推荐一个华丽的Blog Widgets服务—Wowzio

首先输入你的 Blog Feed 地址,Wowzio 就会自动从 Blog 文章中提取出文字、图片,生成 6 种效果华丽的 Widgets 供你选择。并且 Widgets 的颜色和尺寸都是可以自定义的,这可以让 Widgets 和 Blog 的风格趋于一致。这 6 种Widgets 分别是(点击链接可查看具体效果)——Panoramic Slideshow、SlideShow、Photo Gall...

有了YouSerials,不在为找序列号而焦头烂额!

您还在为找一个卡巴斯基杀毒软件Key而不停地在百度谷歌搜索吗?前段时间您是否为自己使用的Windows系统是盗版的而担心被微软黑屏?从网上下载了Nero刻录软件却苦于没有序列号? 今天站长给您介绍一个序列号搜索引擎『YouSerials』 是一个汇集了众多软件序列号的网站,用户在这里只要输入软件名称以及软件版本,就能找到对应的正版序列号用于注册软件。这给使用商业软件的用户提供了...

让博客变美,还能赚点零花钱的工具你见过没?

今天,站长在自己的blogbus上转悠,发现一个很有趣的blog工具-blogdeco,装扮博客很漂亮,还能通过 赚点零花钱,详情如下:          由国内知名的ISP业者So-net与日本最新流行的博客小玩意(blogtool)门户网站「BlogDeco」所合作推出的 『BlogDeco中文...

KnowEm.com:查询用户名是否注册

 网站介绍:社交网站SNS至今仍是Web2.0领域的热点,以至于很多品牌或者公司都希望借助这个平台,进行一些推广或者研究。有一个前提就是:用户名。如果一一手动地去每个SNS社交网站注册,是个非常麻烦的过程。 幸运的是今天要介绍的KnowEm.com(类似的网站还有:NameChk)致力于这样的服务:帮助用户在120个不同类型的社交网站和媒体SNS进行查询,看自己输入的用户名(比...

Wibiya:强化博客互动功能的交互式工具栏服务

Wibiya是一个提供博客交互式工具栏服务,通过Wibiya你可以增强你的Blog和读者之间的交互,从而提高你的博客的用户粘性。今天收到Wibiya的内测邀请,在第一时间体验了这个服务,和大家分享一下。效果请看本站底部的导航栏效果。主要功能: 可以将Fecbook Community整合到你的Blog中,方便在线读者进行交流; 提供ajax式博客搜索,可以替代博客内置的搜索; 提...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。