Twitter将在6月30日之后停止不安全的Basic Auth认证方式,全面启用更安全的OAuth认证方式。本文介绍如何在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= ,其中为在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=
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(http://www.isysjs.com.cn/backup/twoauth.zip )。其他语言应该也是类似的,各种语言的OAuth库可以参考:http://dev.twitter.com/pages/oauth_libraries 。望大家做出国内直接可用的优秀Twitter应用。
分享到:
相关推荐
在描述中提到的“Twitter OAuth the easy way – simple post to twitter script”,暗示我们将讨论一个简单的脚本,该脚本简化了使用OAuth进行身份验证并发布到Twitter的过程。这个脚本可能是一个易于理解和使用的...
虽然题目主要集中在 Facebook API 上,但对于开发者来说了解 Twitter API 的使用也是很有帮助的。Twitter API 同样基于 OAuth2.0 认证机制,但其具体的接口和使用方式与 Facebook 略有不同。 1. **注册应用**:首先...
使用Firebase进行OAuth身份验证React应用程序使用Firebase通过GitHub,Twitter和Facebook展示OAuth身份验证此应用已使用Create React App引导,因此您需要安装create-react-app 。 安装$ npm install -g create-...
在Go语言中实现OAuth认证,可以让开发者安全地集成第三方服务,比如Google、Facebook或Twitter等。本文将详细介绍如何在Go语言中实现OAuth认证,并提供代码示例。 在Go语言中实现OAuth认证是一个涉及多个步骤的过程...
OAuth Signpost是一个针对OAuth协议的Java库,它简化了OAuth认证流程,使得开发者在Java应用中集成OAuth服务变得更加便捷。OAuth是一种授权框架,允许第三方应用在用户授权的情况下访问其存储在另一服务提供者上的...
在实际应用中,开发者需要配置OAuth服务器的URL、客户端ID、客户端密钥等信息,并根据库提供的API进行相应操作。 总的来说,PHP中的OAuth实现是一个复杂但必要的过程,它增强了用户的隐私保护,确保了数据的安全...
在实际应用中,使用OAuth Signpost的一般步骤包括: 1. **配置消费者信息**:设置你的应用的consumer_key和consumer_secret,这些信息通常由服务提供商提供。 2. **获取请求令牌**:向服务提供商发送一个请求,...
在本文中,我们将深入探讨如何在Qt6 QML应用程序中使用OAuth进行网络设置和身份验证。OAuth是一种授权框架,允许第三方应用在用户许可的情况下访问受保护的资源,而无需共享用户的登录凭据。Qt6提供了丰富的QML组件...
OAuth2是一种授权框架,广泛应用于各种服务提供商,如Google、Facebook和Twitter,允许第三方应用在用户授权的情况下访问其资源。Spring Security OAuth2 提供了实现OAuth2协议所需的各种组件,包括授权服务器、资源...
在IT行业中,OAuth(开放授权)是一种广泛使用的授权框架,允许第三方应用安全地访问用户在另一服务上的资源,而无需获取用户的登录凭证。这个过程通常涉及三个角色:资源所有者(用户)、资源服务器(拥有用户资源...
通过使用OAuth,用户可以授权一个应用访问其在另一个服务上的资源或数据,而无需共享其登录凭据。 #### OAuth的工作流程 OAuth的工作流程大致分为以下几个步骤: 1. **请求临时令牌**(Request Token): - 第三...
这个库提供了在浏览器环境中使用OAuth.IO API的必要工具,包括: 1. **初始化**:设置OAuth.IO的API密钥,并配置需要集成的服务。 2. **授权流程**:引导用户进行授权,获取访问令牌。 3. **数据交换**:使用获取的...
OAuth 2.0是一种授权框架,广泛应用于允许第三方应用安全地访问用户在其他服务上的数据,如Facebook、Google或Twitter,而无需获取用户的完整密码。OAuth 2.0的设计目标是简化开发者的使用,同时提高安全性和用户...
OAuth是一种授权框架,允许第三方应用在用户授权的情况下访问特定的资源,而无需获取用户的登录凭据。 SwiftyOAuth库的核心特性包括: 1. **易用性**:通过简洁的API设计,开发者可以快速地集成OAuth服务,只需几行...
OAuth 2.0 是一种广泛使用的开放标准,用于授权第三方应用程序访问用户在特定服务上的数据,而无需共享用户的登录凭证。这个协议的核心在于提供了一种安全的机制,使得用户可以控制哪些应用能访问他们的资源,比如...
在iOS应用开发中,集成第三方服务,如Twitter,可以为用户提供便利并增加应用的互动性。OAuthConsumer是一个常用的库,用于处理OAuth认证流程,它在iOS应用与Twitter服务之间建立起安全的数据交换通道。本篇文章将...
`Authlib` 库提供了一个简洁的API,使得开发者能够轻松地在Python应用中集成OAuth功能。以下是一些关键特性: - **客户端支持**: 提供了对OAuth 1和OAuth 2客户端的全面支持,包括请求令牌、访问令牌的获取,以及...