Spring Social Twitter Oauth

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

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

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

谢谢

最佳答案

  • 我看到了关于对仅适用于该特定用户的访问 token 进行硬编码的讨论。我不想对除应用程序 key 之外的任何内容进行硬编码。

  • “应用程序 key ”又名 consumer { key, secret } pair 授权您的应用程序使用不需要用户身份验证的 Twitter API。想想你的应用程序在没有登录的情况下浏览 Twitter 网站。因此,你可以搜索、获取时间线等。=> 只读。

    如果您想回帖,您必须让您的应用程序代表真实的 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/

    相关文章:

    java - Spring MessageSource 多次解析/插入字符串

    java - 如何根据用户选择在登录中更改生产和测试 Spring 环境?

    java - Spring Integration 的并发问题 - "Cannot publish to a deleted Destination"

    java - 使用 Spring Data 在 eclipselink 中执行不带 SELECT 的 UPDATE

    android - 如何使用android sdk将图片上传到twitter

    node.js - 如何在开源项目中隐藏 Twitter Oauth 的消费者 secret ?

    java - 如何使用 Twitter4J 检索推文中的图像?

    ios - 如何在 iOS SDK 中使用 Twitter Kit 获取 JSON 格式的用户时间线

    python - python中的土耳其字符

    java - 使用 POST 方法发送 JSON 对象