簡體   English   中英

使用基於sign-post api的grails-oauth插件刷新Yahoo Oauth訪問令牌

[英]Refresh Yahoo Oauth Access Token using grails-oauth plugin based on sign-post api

我正在使用grails oauth插件。 哪個成功地為我提供了yahoo的access_token 但問題是 - 這個令牌(來自雅虎)的有效期僅為1小時。 之后我們需要刷新它。 通過他們的文檔,似乎他們有刷新它的過程(如果令牌過期)。 這個調用繞過了第三條腿(用戶的手動接受過程)。 這是非常好的!

現在,如果我嘗試使用方法oauthService.fetchAccessToken - 我想這是命中get_access_token url(在提供者方)的方法。 但我得到例外:

oauth.signpost.exception.OAuthNotAuthorizedException:授權失敗(服務器回復401)。 如果使用者密鑰不正確或簽名不匹配,則會發生這種情況。 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。來自org.grails.plugins.oauth.OauthService $ fetchAccessToken.call(未知來源)的org.grails.plugins.oauth.OauthService.fetchAccessToken(OauthService.groovy:286)中的OAuthProvider $ retrieveAccessToken.call(未知來源)


我已經進一步調試了插件和路標代碼。 而且我認為我們應該研究路標(現在),插件可以在以后輕松修改。

為了您的信息,我使用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:授權失敗(服務器回復401)。 如果使用者密鑰不正確或簽名不匹配,則會發生這種情況。 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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM