Обновите 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"