2014-12-10 2 views
1

그래서 사용자 로그인을하고 Flickr 계정을 내 앱에 연결하는 앱을 만들었습니다. 로그인 할 때마다 Flickr를 연결하지 않도록 AccessToken을 데이터베이스에 저장합니다. 응답Java : Flickr OAuth 서명이 잘못되었습니다.

OAuthService service = new ServiceBuilder() 
       .provider(FlickrApi.class) 
       .apiKey("apiKey") 
       .apiSecret("apiSecret") 
       .build(); 
     Token flickReq = service.getRequestToken(); 
     String authUrl = service.getAuthorizationUrl(flickReq); 
     try{ 
     MSConnection msc = new MSConnection(); 
     Token accessToken = msc.getToken(userId_acc); // This gets AccessToken from database. 
     OAuthRequest req = new OAuthRequest(Verb.POST, "https://api.flickr.com/services/rest/"); 
     req.addQuerystringParameter("method", "flickr.test.login"); 
     service.signRequest(accessToken, req); 
     Response resp = req.send(); 
     System.out.println(resp.getBody()); 

내가 얻을 : 이 코드를 oauth_problem = signature_invalid 내가 잘못 뭐하는 거지

? 이 밝혀

답변

1

해결 문제는, - : 그래서 당신은

Token accessToken = service.getAccessToken(flickReq, v); // Original accessToken you get from Flickr and users entered code. 

String tokenSecret = accessToken.getSecret(); 

당신이 저장되고 비밀 AccessToken를 사용하여 토큰을 생성 할 때 비밀이 API 비밀 아닌, 당신에 의해 얻을 비밀을 accesstoken 것 다시 인증 코드를 입력 할 필요없이 사용자가 플리커 상세 유효성을 검사 할 때마다 다음, 사용자에 대한이 두 변수를 저장 - 당신은 사용 accessToken + tokenSecret

Token tok = new Token(getToken(userId_acc), getSecret(userId_acc)); 

을 그럼 그냥 요청에 서명하고 그것을 떨어져 보낼 수 있습니다. 그것 뿐이다

OAuthRequest req = new OAuthRequest(Verb.POST, "https://api.flickr.com/services/rest/"); 
req.addQuerystringParameter("method", "flickr.test.login"); 
service.signRequest(tok, req); 
Response resp = req.send(); 

이, 희망이이 문제에 걸쳐 오는 사람에 대한 약간의 시간을 절약, 분명히 플리커 API 문서는 정말 잘 자바 측 설명하지 않습니다.

관련 문제