我想使用 spring social 开发一个 twitter 应用程序,它将更新状态和上传照片。我无法理解如何使用 Spring social 进行 Oauth 身份验证。我看到的所有示例都在谈论硬编码访问 token ,该 token 仅适用于该特定用户。我不想对除应用程序 key 之外的任何内容进行硬编码。
请有人向我解释如何使用 spring social 进行 Twitter Oauth。我浏览了 spring 框架的官方文档,但是当我看到其他示例时感到困惑。
谢谢
最佳答案
“应用程序 key ”又名
consumer { key, secret }
pair 授权您的应用程序使用不需要用户身份验证的 Twitter API。想想你的应用程序在没有登录的情况下浏览 Twitter 网站。因此,你可以搜索、获取时间线等。=> 只读。如果您想回帖,您必须让您的应用程序代表真实的 Twitter 帐户/用户执行此操作。想想有人写了一个 Twitter 客户端 => 它可以被许多不同的用户下载,因此它需要两件事才能正常运行:
consumer { key, secret }
对 access { token, secret }
对 为了获得访问 { token, secret } 对,您必须从该用户/帐户获得“OK”。
这就是 OAuth 的用武之地 => 它将用户发送到确认页面,在那里他单击“确定,我允许此应用代表我发布”。这个“OK”然后被转换为
OAuthToken
您的应用程序可以使用。如果您只想代表自己发布更新,那么您需要批准自己的 Twitter 应用程序,并坚持使用
OAuthToken
供您的应用程序使用。不幸的是推特 does not yet support OAuth 2.0,因此您必须执行更多操作...您必须执行 OAuth 1.0a。
Spring Social 文档描述了 OAuth 1.0a 流程 here ,您可以在其中直观地看到流程。
为了使用 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
保留它如 shown here ,因此您无需再次获取访问 token 。这是Connection API .
关于Spring Social Twitter Oauth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7968641/