7

我想使用 spring social 来开发一个 twitter 应用程序,它将更新状态和上传照片。我无法理解如何使用 Spring social 进行 Oauth 身份验证。我看到的所有示例都谈到硬编码 accesstoken 仅适用于该特定用户。我不想硬编码除应用程序键之外的任何内容。

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

谢谢

4

2 回答 2

13
  • 我看到有关硬编码仅适用于该特定用户的访问令牌的讨论。我不想硬编码除应用程序密钥之外的任何内容。

“应用程序密钥”又名consumer { key, secret }对授权您的应用程序使用不需要用户身份验证的 Twitter API 。当您在未登录的情况下浏览 Twitter 网站时考虑一下。因此,您将能够搜索、获取时间线等。=> 只读。

如果您想回帖,您必须让您的应用代表真实的 Twitter 帐户/用户执行此操作。想想有人写了一个 Twitter 客户端 => 它可以被许多不同的用户下载,因此它需要两件事才能正常运行:

  • 成为注册的 Twitter 应用程序 => 拥有consumer { key, secret }一对
  • 能够代表用户发布推文/图像=>有access { token, secret }

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

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

如果您只想代表自己发布更新,那么您需要批准您自己的 Twitter 应用程序,并将其持久化OAuthToken以供您的应用程序使用。

不幸的是,Twitter还不支持OAuth 2.0,因此你必须做更多的事情......你必须做 OAuth 1.0a。

Spring Social 文档在此处描述了 OAuth 1.0a 流程,您可以在其中直观地查看流程。

为了使用 Spring Social API 对这个流程进行“编码”,您应该首先请求访问 {token, value} 对(顺便说一句,有一个方便的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 );

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

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

现在,您拥有所需的一切,您可以选择:

从中创建一个 TwitterTemplate OAuthToken

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的方式将其持久化,因此您不必再次获取访问令牌。

这是连接 API

于 2011-11-01T18:16:07.597 回答
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 Social 论坛上提问。

于 2011-11-03T20:27:24.543 回答