【发布时间】: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