Spring Social Twitter Oauth

时间:2011-11-01 15:17:53

标签: spring twitter twitter-oauth spring-social spring-social-twitter

我想使用spring social来开发一个Twitter应用程序,它将更新状态并上传照片。我无法理解如何使用Spring社交进行Oauth身份验证。我看到的所有示例都是关于硬编码的accessstoken的说法对于那个特定的用户。我不想硬编码除了app键以外的任何东西。

请有人解释我如何使用spring social来做Twitter Oauth。我浏览了spring框架的官方文档但是在看到其他示例时感到困惑..

由于

2 个答案:

答案 0 :(得分:11)

  • 我看到有关硬编码即使只对特定用户有效的accessstoken的讨论。我不想硬编码除应用密钥之外的任何内容。

“app keys”a.k.a。consumer { key, secret }对授权您的应用使用不需要用户身份验证的Twitter API。当你在没有登录的情况下浏览Twitter网站时考虑它。因此你有能力搜索,获取时间线等。=>只读。

如果你想发布某些内容,你必须让你的应用程序代表代表真正的Twitter帐户/用户。想想有人写一个Twitter客户端=>它可以被许多不同的用户下载,因此需要两件事才能正常运行:

  • 是已注册的Twitter应用程序=>有consumer { key, secret }
  • 能够代表发布用户的推文/图片 =>有access { token, secret }

为了获得该访问{token,secret}对,您必须从该用户/帐户获得“OK”。

这就是OAuth的用武之地=>它将用户发送到确认页面,在那里他点击“确定,我允许此应用程序代表我发布”。然后,此“确定”将转换为您的应用可以使用的OAuthToken

如果你想要的只是代表自己发布更新,那么你需要批准自己的Twitter应用,并坚持OAuthToken使用你的应用。

不幸的是Twitter does not yet support OAuth 2.0,因此你必须做更多......你必须做OAuth 1.0a。

Spring社交文档描述了OAuth 1.0a流here,您可以在其中直观地看到流。

为了使用Spring Social API“编码”此流程,您应该首先请求访问{token,value}对(btw有一个方便ConnectController):

TwitterConnectionFactory connectionFactory = 
    new TwitterConnectionFactory( "consumerKey", "consumerSecret" );
OAuth1Operations oauthOperations = connectionFactory.getOAuthOperations();
OAuthToken requestToken = oauthOperations.fetchRequestToken( "https://my-callback-url", null );
String authorizeUrl = oauthOperations.buildAuthorizeUrl( requestToken, OAuth1Parameters.NONE );
response.sendRedirect( authorizeUrl );

一旦它回来(到您的回调网址),您可以使用OAuth1Operations获取OAuthToken,这正是该对。

// upon receiving the callback from the provider:
OAuthToken accessToken = oauthOperations.exchangeForAccessToken(
    new AuthorizedRequestToken(requestToken, oauthVerifier), null);

现在,您可以随心所欲地选择:

OAuthToken创建一个TwitterTemplate:

String consumerKey = "..."; // The application's consumer key
String consumerSecret = "..."; // The application's consumer secret
String accessToken = accessToken.getValue();
String accessTokenSecret = accessToken.getSecret();
Twitter twitter = new TwitterTemplate( consumerKey, consumerSecret, accessToken, accessTokenSecret );

创建Twitter连接对象

Connection<Twitter> connection = connectionFactory.createConnection( accessToken );

获得Connection后,您可能希望通过ConnectionRepository将其保留为shown here,因此您无需再次获取访问令牌。

这是Connection API

答案 1 :(得分:3)

之前的答案很好,但只是故事的一部分......

至少有3个级别可以使用Spring Social:(1)直接使用TwitterTemplate,在这种情况下,您需要通过自己的某些方式获取访问令牌和秘密,(2)使用OAuth1Template,可能通过TwitterConnectionFactory,如前面的答案所示,获取访问令牌并从中创建TwitterTemplate,在这种情况下,您必须自己处理重定向和回调,或者(3)使用Spring Social的ConnectController来处理所有内容你。

使用ConnectController涉及最少量的OAuth工作。您只需在Spring中配置相应的部分,ConnectController负责其余部分。有关详细信息,请参阅http://static.springsource.org/spring-social/docs/1.0.x/reference/html/connecting.html

我鼓励您在https://github.com/SpringSource/spring-social-samples查看Spring Social Showcase示例。它使用ConnectController通过Twitter和Facebook连接来处理。当然,欢迎您在http://forum.springsource.org/forumdisplay.php?82-Social上的Spring社交论坛上提问。