4

grailsoauthプラグインを使用しています。それは私にyahooをaccess_tokenうまく提供しています。しかし、問題は-このトークン(yahooから)の有効期間は1時間のみです。その後、更新する必要があります。そして、彼らのドキュメントを見ると、彼らはそれを更新するプロセスを持っているようです(トークンが期限切れになった場合)。そして、この呼び出しは3番目のレッグをバイパスします(ユーザーの手動受け入れプロセス)。とても良いです!

さて、私がメソッドを使おうとしているのなら、これは(プロバイダー側​​で)urloauthService.fetchAccessTokenをヒットするメソッドだと思います。get_access_tokenしかし、私は例外を得ています:

oauth.signpost.exception.OAuthNotAuthorizedException:承認に失敗しました(サーバーが401で応答しました)。これは、コンシューマキーが正しくないか、署名が一致しなかった場合に発生する可能性があります。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.sign 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)


プラグインと道標のコードをさらにデバッグしました。そして、私たちは(今のところ)道標を調べるべきだと思います。プラグインは後で簡単に変更できます。

参考までに、commonshttp4クライアントで道標(jar-1.2.1.1)を使用しています

accessTokenを更新するためのYahooドキュメントページのリンクは次のとおりです。 http://developer.yahoo.com/oauth/guide/oauth-refreshaccesstoken.html

Yahooはoauth_session_handle、accessTokenを使用してyahooによって送信されるリクエストにパラメーターを必要とします。道標はこれをフェッチする方法を提供します- provider.getResponseParameters()

次は、次の方法を使用して、これらのパラメーターをrefreshTokenリクエストに戻します--consumer.setAdditionalParameters(httpParams)

しかし、それは機能しません!以下は、スタックトレースの一部です。refreshedAccessTokenを取得しようとすると

oauth.signpost.exception.OAuthNotAuthorizedException:承認に失敗しました(サーバーが401で応答しました)。これは、コンシューマキーが正しくないか、署名が一致しなかった場合に発生する可能性があります。oauth.signpost.AbstractOAuthProvider.handleUnexpectedResponse(AbstractOAuthProvider.java:239)at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:189)at oauth.signpost.AbstractOAuthProvider.retrieveAccessToken(AbstractOAuthProvider.java:99)

素晴らしい/寛大な人からすぐに聞くのを楽しみにしています:-)

ありがとう、サリル

4

1 に答える 1

5

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

まず、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"
于 2011-09-28T05:58:08.963 に答える