Обновите Yahoo Oauth Access Token с помощью плагина grails-oauth, основанного на API-интерфейсе sign-post.

Я использую плагин Grails oauth. Который дает мне Yahoo access_token успешно. Но проблема в том, что этот токен (от Yahoo) имеет срок действия только 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.Aject.OAuthProvider$retrieveAccessToken.call(Неизвестный источник) в org.grails.plugins.oauth.OauthService.fetchAccessToken(OauthService.groovy:286) в org.grails.plugins.oauth.OauthService$fetchAccessToOnt).


Я отлаживал дальше в плагин и код указателя. И я думаю, что мы должны рассмотреть указатель (пока), плагин может быть легко изменен позже.

Для вашей информации я использую указатель (jar - 1.2.1.1) с клиентом commonshttp4

вот ссылка на страницу документации Yahoo для обновления accessToken. http://developer.yahoo.com/oauth/guide/oauth-refreshaccesstoken.html

Yahoo нуждается oauth_session_handle параметр в запросе, который посылает Yahoo с accessToken. Signpost предоставляет способ получить это - provider.getResponseParameters(),

Далее, я использую следующий способ вернуть эти параметры обратно в запрос refreshToken - consumer.setAdditionalParameters(httpParams)

Но это не работает! Следующее является частью stacktrace. Когда я пытаюсь получить обновленный AccessToken

oauth.signpost.exception.OAuthNotAuthorizedException: авторизация не удалась (сервер ответил 401). Это может произойти, если ключ потребителя был неверен или подписи не совпадали. в oauth.signpost.AbstractOAuthProvider.handleUnexpectedResponse(AbstractOAuthProvider.java:239) в oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:189) в oauth.signpost.AbjectOret.AveAvAut (

с нетерпением жду ответа от какого-то великого / щедрого парня (ов):-)

Спасибо салил

1 ответ

Решение

Я нашел ответ и хочу поделиться им с другими (которые могут попасть в подобную ситуацию).

Прежде всего, если вы используете библиотеку указателей для oauth, я бы рекомендовал вам прекратить ее использование. Поскольку разработка была остановлена ​​с января 2011 года. Прочтите это: http://brainflush.wordpress.com/2011/01/27/stepping-back-from-signpost-development/

Я использовал "писец-ява" для этого. вот ссылка на 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"
Другие вопросы по тегам