我想使用 spring social 来开发一个 twitter 应用程序,它将更新状态和上传照片。我无法理解如何使用 Spring social 进行 Oauth 身份验证。我看到的所有示例都谈到硬编码 accesstoken 仅适用于该特定用户。我不想硬编码除应用程序键之外的任何内容。
请有人向我解释如何使用 spring social 进行 Twitter Oauth。我浏览了 spring 框架的官方文档,但是当我看到其他示例时感到困惑..
谢谢
我想使用 spring social 来开发一个 twitter 应用程序,它将更新状态和上传照片。我无法理解如何使用 Spring social 进行 Oauth 身份验证。我看到的所有示例都谈到硬编码 accesstoken 仅适用于该特定用户。我不想硬编码除应用程序键之外的任何内容。
请有人向我解释如何使用 spring social 进行 Twitter Oauth。我浏览了 spring 框架的官方文档,但是当我看到其他示例时感到困惑..
谢谢
“应用程序密钥”又名consumer { key, secret }
对授权您的应用程序使用不需要用户身份验证的 Twitter API 。当您在未登录的情况下浏览 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);
现在,您拥有所需的一切,您可以选择:
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 );
Connection<Twitter> connection = connectionFactory.createConnection( accessToken );
获得 后Connection
,您可能希望通过此处所示ConnectionRepository
的方式将其持久化,因此您不必再次获取访问令牌。
这是连接 API。
以前的答案很好,但只是故事的一部分......
至少有 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 论坛上提问。