【问题标题】:Refresh Yahoo Oauth Access Token using grails-oauth plugin based on sign-post api使用基于 sign-post api 的 grails-oauth 插件刷新 Yahoo Oauth Access Token
【发布时间】:2011-11-16 22:25:31
【问题描述】:

我正在使用 grails oauth 插件。这成功地为我提供了雅虎的access_token。但问题是——这个令牌(来自雅虎)的有效期仅为 1 小时。之后我们需要刷新它。并且通过他们的文档,他们似乎有刷新它的过程(以防令牌过期)。而这个调用绕过了第三条腿(用户的手动接受过程)。太好了!

现在,如果我尝试使用方法 oauthService.fetchAccessToken - 我想这是命中 get_access_token url 的方法(在提供者方面)。但我得到了例外:

oauth.signpost.exception.OAuthNotAuthorizedException:授权 失败(服务器回复 401)。如果消费者发生这种情况 密钥不正确或签名不匹配。在 oauth.signpost.AbstractOAuthProvider.handleUnexpectedResponse(AbstractOAuthProvider.java:239) 在 oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:189) 在 oauth.signpost.AbstractOAuthProvider.retrieveAccessToken(AbstractOAuthProvider.java:99) 在 oauth.signpost.OAuthProvider$retrieveAccessToken.call(未知 来源)在 org.grails.plugins.oauth.OauthService.fetchAccessToken(OauthService.groovy:286) 在 org.grails.plugins.oauth.OauthService$fetchAccessToken.call(未知 来源)


我已进一步调试插件和路标代码。而且我认为我们应该研究一下路标(现在),以后可以轻松修改插件。

为了您的信息,我正在使用带有 commonshttp4 客户端的路标(jar - 1.2.1.1)

这里是 Yahoo 文档页面的链接,用于刷新 accessToken。 http://developer.yahoo.com/oauth/guide/oauth-refreshaccesstoken.html

雅虎在请求中需要oauth_session_handle参数,雅虎使用accessToken发送请求。路标确实提供了一种获取此信息的方法——provider.getResponseParameters()

接下来是,我使用以下方式将这些参数放回 refreshToken 请求中—— consumer.setAdditionalParameters(httpParams)

但它不起作用!以下是堆栈跟踪的一部分。当我尝试获取 refreshedAccessToken

oauth.signpost.exception.OAuthNotAuthorizedException:授权 失败(服务器回复 401)。如果消费者发生这种情况 密钥不正确或签名不匹配。在 oauth.signpost.AbstractOAuthProvider.handleUnexpectedResponse(AbstractOAuthProvider.java:239) 在 oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:189) 在 oauth.signpost.AbstractOAuthProvider.retrieveAccessToken(AbstractOAuthProvider.java:99)

期待很快收到一些伟大/慷慨的人的消息:-)

谢谢, 萨利尔

【问题讨论】:

    标签: java grails oauth yahoo-api signpost


    【解决方案1】:

    我找到了答案,想分享给其他人(可能遇到类似情况的人)。

    首先,如果您使用路标库进行 oauth,我建议您停止使用它。因为,自 2011 年 1 月以来,开发已停止。阅读以下内容: http://brainflush.wordpress.com/2011/01/27/stepping-back-from-signpost-development/

    我为此使用了“scribe-java”。这是github上的链接。您可以使用 maven 或下载 jar 或直接 fork 代码。 https://github.com/fernandezpablo85/scribe-java/

    它非常易于使用,即使是(顶级)服务提供商的 URL 也是预先配置好的。

    这里是如何使用 scribe-java 库刷新它的代码。

    Token accessToken = new Token('your-expired-token-key', 'your-expired-token-secret')
    println ".......................... Expired Token ........................\n $accessToken"
    
    OAuthRequest request = new OAuthRequest(Verb.GET, "https://api.login.yahoo.com/oauth/v2/get_token");
    request.addOAuthParameter('oauth_session_handle', 'your-yahoo-session-handle') // you need to fetch it from the parameters when get your access token.
    service.signRequest(accessToken, request);
    Response response = request.send();
    accessToken = YahooApi.class.newInstance().getAccessTokenExtractor().extract(response.getBody())
    
    println ".......................... Refreshed Token ........................\n $accessToken"
    

    【讨论】:

    • 谢谢!这节省了我很多时间和头痛!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    相关资源
    最近更新 更多