2011-09-14 15 views
4

grails oauthプラグインを使用しています。私はyahooのaccess_tokenを正常に提供しています。しかし問題は - このトークン(yahooから)は1時間の妥当性しか持っていません。それ以降、私たちはそれをリフレッシュする必要があります。彼らの文書を通って、それをリフレッシュするプロセスがあるようです(トークンが期限切れになる場合)。そして、この呼び出しは、頼りになる脚をバイパスします(ユーザーの手動承認プロセス)。それはとても良いです!サインインポストAPIに基づくgrails-oauthプラグインを使用してYahoo Oauthアクセストークンをリフレッシュ

ここで、方法oauthService.fetchAccessTokenを使用しようとしています - これはget_access_token url(プロバイダ側の)に当たる方法だと思います。しかし、私は例外を取得しています:

oauth.signpost.exception.OAuthNotAuthorizedException:認証 を(サーバが401と答え)が失敗しました。これは、コンシューマ のキーが正しくないか、シグネチャが一致しなかった場合に発生します。 oauth.signpost.AbstractOAuthProvider.handleUnexpectedResponse oauth.signpost.AbstractOAuthProvider.retrieveAccessTokenで oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:189)で(AbstractOAuthProvider.java:239) (AbstractOAuthProvider.java:99)で org.grails.plugins.oauth.OauthService $ fetchAccessTokenで : org.grails.plugins.oauth.OauthService.fetchAccessToken(286 OauthService.groovy)でoauth.signpost.OAuthProvider $ retrieveAccessToken.callで (不明 出典) .call(不明な ソース)


さらにプラグインと標識コードをデバッグしました。そして、私は、今のところ標識を調べるべきだと思うが、プラグインは後で簡単に変更できる。あなたの情報については

、私は道標(jarファイル - 1.2.1.1)を使用していますcommonshttp4クライアントと

をここaccessTokenをリフレッシュするためのYahooのドキュメントページのリンクがあります。 http://developer.yahoo.com/oauth/guide/oauth-refreshaccesstoken.html

ヤフーからaccessTokenで送信されたリクエストには、oauth_session_handleというパラメータが必要です。 Signpostはこれをフェッチする方法を提供しています - provider.getResponseParameters()。さて次回は、私はrefreshToken要求に戻って、これらのパラメータを置くために、以下の方法を使用しています

- consumer.setAdditionalParameters(httpParams)

しかし、それは動作しません!以下はstacktraceの一部です。私は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)

いくつかの素晴らしい/寛大な男からすぐに聞くことを楽しみにして(S):-)は

おかげで、 サリル

答えて

5

私は答えを見つけて、それを他の人に共有したいいます(誰が同様の状況で罠に陥るかもしれない)。

まず、oauthにsignpostライブラリを使用している場合は、使用を中止することをお勧めします。開発は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" 
+1

ありがとうございます!これは私に多くの時間と頭痛を救った! – Craigo

関連する問題