编程语言
首页 > 编程语言> > java – 使用基于sign-post api的grails-oauth插件刷新Yahoo Oauth访问令牌

java – 使用基于sign-post api的grails-oauth插件刷新Yahoo Oauth访问令牌

作者:互联网

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

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

oauth.signpost.exception.OAuthNotAuthorizedException: Authorization
failed (server replied with a 401). This can happen if the consumer
key was not correct or the signatures did not match. at
oauth.signpost.AbstractOAuthProvider.handleUnexpectedResponse(AbstractOAuthProvider.java:239)
at
oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:189)
at
oauth.signpost.AbstractOAuthProvider.retrieveAccessToken(AbstractOAuthProvider.java:99)
at oauth.signpost.OAuthProvider$retrieveAccessToken.call(Unknown
Source) at
org.grails.plugins.oauth.OauthService.fetchAccessToken(OauthService.groovy:286)
at
org.grails.plugins.oauth.OauthService$fetchAccessToken.call(Unknown
Source)

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

为了您的信息,我使用signpost(jar – 1.2.1.1)与commonshttp4客户端

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

雅虎在请求中需要oauth_session_handle参数,该参数由yahoo发送,带有accessToken. Signpost确实提供了一种获取它的方法 – provider.getResponseParameters().

接下来是,我正在使用以下方式将这些参数放回到refreshToken请求中 –
consumer.setAdditionalParameters(的HttpParams)

但它不起作用!以下是stacktrace的一部分.当我尝试获取refreshedAccessToken时

oauth.signpost.exception.OAuthNotAuthorizedException: Authorization
failed (server replied with a 401). This can happen if the consumer
key was not correct or the signatures did not match. at
oauth.signpost.AbstractOAuthProvider.handleUnexpectedResponse(AbstractOAuthProvider.java:239)
at
oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:189)
at
oauth.signpost.AbstractOAuthProvider.retrieveAccessToken(AbstractOAuthProvider.java:99)

期待很快听到一些伟大/慷慨的家伙:-)

谢谢,
萨里尔

解决方法:

我找到了答案并希望与其他人分享(可能陷入类似情况).

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

为此,我使用’scribe-java’.这是github上的链接.您可以使用maven或下载jar或只是分叉代码.
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"

标签:java,oauth,grails,yahoo-api,signpost
来源: https://codeday.me/bug/20190621/1253200.html