2011-09-14 4 views
4

grails oauth 플러그인을 사용하고 있습니다. 어느 날 야후의 access_token을 성공적으로 제공하고 있습니다. 그러나 문제는 -이 토큰 (야후에서 온)은 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 (알 소스)에서 .all (알 수 없음 출처)


플러그인 및 푯말 코드로 추가 디버깅했습니다. 그리고 푯말 (지금은)을 살펴 봐야한다고 생각합니다. 플러그인은 나중에 쉽게 수정할 수 있습니다.

여기 accessToken 새로 고침 야후 문서 페이지의 링크의 commonshttp4 클라이언트 - 당신의 내용

, 나는 푯말 (1.2.1.1 단지)를 사용하고 있습니다. http://developer.yahoo.com/oauth/guide/oauth-refreshaccesstoken.html

Yahoo는 accessToken으로 야후에서 보낸 요청에 oauth_session_handle 매개 변수가 필요합니다. 푯말은 이것을 가져올 수있는 방법을 제공합니다 - provider.getResponseParameters(). 지금 옆에, 나는 refreshToken 요청으로 다시 이러한 매개 변수를 넣어 다음과 같은 방법을 사용하고

- consumer.setAdditionalParameters (httpParams)

그러나이 작동하지 않습니다! 다음은 stacktrace의 일부입니다. 나는 refreshedAccessToken

oauth.signpost.exception.OAuthNotAuthorizedException을 얻을 때 : 인증 는 (서버는 401 응답) 실패했습니다. 이는 소비자 키가 올바르지 않거나 서명이 일치하지 않는 경우 발생할 수 있습니다. oauth.signpost.AbstractOAuthProvider.retrieveAccessToken에서 oauth.signpost.AbstractOAuthProvider.retrieveToken (AbstractOAuthProvider.java:189) 에서 oauth.signpost.AbstractOAuthProvider.handleUnexpectedResponse (AbstractOAuthProvider.java:239) (AbstractOAuthProvider에서.자바 : 99)

이 기대

감사합니다 :-) 훌륭한/관대 한 사람 (들)이 곧 듣고, 살릴

답변

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" 
+1

감사합니다. 이것은 나에게 많은 시간과 두통을 덜어 주었다! – Craigo

관련 문제