2016-12-07 4 views
0

Evernote에서 메모를 가져 오기 위해 내 앱용 OAuth 액세스 토큰을 생성하려고합니다. 다음의 Java 코드는 그것을스크라이브를 사용하여 OAuth 액세스 토큰을 검색하는 중 예외가 발생했습니다.

이 코드는 참조 아래 https://github.com/evernote/evernote-sdk-java/blob/master/sample/oauth/src/main/webapp/index.jsp

로 다음과 같은 GitHub의 코드 액세스 토큰을 검색하는 동안 내가 얻을 예외입니다 기록

public class EverNoteOauthGenerator { 
    public static void main(String[] args) throws EDAMUserException, EDAMSystemException, TException { 
     Class<? extends EvernoteApi> providerClass = EvernoteApi.Sandbox.class; 
     /** 
     if (EVERNOTE_SERVICE == EvernoteService.PRODUCTION) { 
      providerClass = org.scribe.builder.api.EvernoteApi.class; 
     } **/ 

     // Generate Request token & Request secret 
     String CONSUMER_KEY = "******"; 
     String CONSUMER_SECRET = "******"; 
     String cbUrl = "https://sandbox.evernote.com/OAuth.action?oauth_token=****.158D9C1C696.6C6F63616C686F7374.089C889A2F3D722B9ECC231961A3BF49"; 
     OAuthService service = new ServiceBuilder() 
      .provider(providerClass) 
      .apiKey(CONSUMER_KEY) 
      .apiSecret(CONSUMER_SECRET) 
      .callback(cbUrl) 
      .build(); 

     Token scribeRequestToken = service.getRequestToken(); 
     //String requestToken = scribeRequestToken.getToken(); 
     //String requestTokenSecret = scribeRequestToken.getSecret(); 

     String authUrl = EvernoteService.SANDBOX.getAuthorizationUrl(scribeRequestToken.getToken()); 

     // Generate OAuth Access token 
     Token scribeRequestToken = new Token(requestToken, requestTokenSecret); 

     Verifier scribeVerifier = new Verifier("6E5879A40CBEB7CCF77507BE8FE905AA"); 
     Token scribeAccessToken = service.getAccessToken(scribeRequestToken, scribeVerifier); 
     EvernoteAuth evernoteAuth = EvernoteAuth.parseOAuthResponse(EvernoteService.SANDBOX, scribeAccessToken.getRawResponse()); 
     String accessToken = evernoteAuth.getToken(); 
     String noteStoreUrl = evernoteAuth.getNoteStoreUrl(); 
     System.out.println("Access token :: " + accessToken); 

     evernoteAuth = new EvernoteAuth(EvernoteService.SANDBOX, accessToken); 
     NoteStoreClient noteStoreClient = new ClientFactory(evernoteAuth).createNoteStoreClient(); 

     List<Notebook> notebooks = noteStoreClient.listNotebooks(); 
     for (Notebook notebook : notebooks) { 
      System.out.println("Notebook: " + notebook.getName()); 
     } 
    } 
} 

Exception in thread "main" org.scribe.exceptions.OAuthException: Response body is incorrect. Can't extract token and secret from this 

at org.scribe.extractors.TokenExtractorImpl.extract(TokenExtractorImpl.java:41) 
    at org.scribe.extractors.TokenExtractorImpl.extract(TokenExtractorImpl.java:27) 
    at org.scribe.oauth.OAuth10aServiceImpl.getAccessToken(OAuth10aServiceImpl.java:82) 
    at com.evernote.auth.EverNoteOauthGenerator.main(EverNoteOauthGenerator.java:51) 

답변

2

콜백 URL은 앱이 승인 된 후 사용자가 리디렉션되는 URL이어야합니다. 사용자가 다시 리디렉션 된 경우 URL 매개 변수에서 OAuth 확인자를 얻을 수 있어야하며 인증자가 코드에 하드 코딩되어있는 것으로 보입니다. 인증에 대해서는 this doc을 참조하십시오.

+0

나는 자바 프로 그램으로 먼저 노력하고있다. 이 경우 어떤 콜백 URL을 구성합니까? –

+0

localhost는 어떻습니까? https://dev.evernote.com/doc/articles/authentication.php#temporary_token_request – kentaro

관련 문제