Spring Social Twitter Oauth

new*_*bie 6 twitter spring twitter-oauth spring-social spring-social-twitter

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

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

谢谢

tol*_*ius 13

  • 我看到有关硬编码即使只能用于特定用户的accessstoken的讨论.我不想硬编码除app键之外的任何东西.

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

如果你想发布的东西回来,你就必须让你应用程式?那代表真正的Twitter账号/用户.想想有人写一个Twitter客户端=>它可以被许多不同的用户下载,因此需要两件事才能正常运行:

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

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

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

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

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

Spring Social文档描述了OAuth 1.0a流程,您可以其中直观地看到流程.

为了使用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 );
Run Code Online (Sandbox Code Playgroud)

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

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

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

从中创建一个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 );
Run Code Online (Sandbox Code Playgroud)

创建Twitter连接对象

Connection<Twitter> connection = connectionFactory.createConnection( accessToken );
Run Code Online (Sandbox Code Playgroud)

一旦你得到了Connection,你可能想通过坚持它ConnectionRepository这里显示,所以你不必去通过令牌再次获得访问.

这是Connection API.