2014-01-23 3 views
1

Scribe를 사용하여 Tumblr을 인증하는 데 문제가 있습니다. 나는 여기에서 찾은 예제를 따라 갔지만 계속 "org.scribe.exceptions.OAuthException : 응답 본문이 올바르지 않습니다. 토큰과 비밀을 추출 할 수 없습니다 : '누락되었거나 잘못된 oauth_verifier.'"Scribe Tumblr 응답 본문이 잘못되었습니다. 'oauth_verifier가 없거나 잘못되었습니다.'라는 토큰과 암호를 추출 할 수 없습니다.

아이디어가 있으십니까? 도움이 대단히 감사하겠습니다! 감사.

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.util.Log; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import org.scribe.builder.ServiceBuilder; 
import org.scribe.builder.api.TumblrApi; 
import org.scribe.model.*; 
import org.scribe.oauth.OAuthService; 

public class MyActivity extends Activity { 
    private static OAuthService service; 
    private Token requestToken; 
    private Verifier verifier; 
    private static final String PROTECTED_RESOURCE_URL = "http://api.tumblr.com/v2/user/info"; 
    private static Boolean authInProgress = false; 
    public WebView TumblrWebView; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 

     setContentView(R.layout.main); 

     if (! authInProgress) { 
      authInProgress = true; 
      service = new ServiceBuilder() 
        .provider(TumblrApi.class) 
        .apiKey("xxx") 
        .apiSecret("yyy") 
        .callback("thisapp://tumblr") 
        .build(); 

      // Obtain the Request Token 
      Log.d("Tumblr", "Fetching the Request Token..."); 
      requestToken = service.getRequestToken(); 
      Log.d("Tumblr", "Got the Request Token!"); 

      Log.d("Tumblr", "Now go and authorize Scribe here:"); 
      Log.d("Tumblr", ""+service.getAuthorizationUrl(requestToken)); 

      Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(service.getAuthorizationUrl(requestToken))); 
      startActivity(browserIntent); 
     } 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     if (this.getIntent()!=null && this.getIntent().getData()!=null){ 
      Uri uri = this.getIntent().getData(); 
      if (uri != null && uri.toString().startsWith("thisapp://tumblr")) { 
       verifier = new Verifier (uri.getQueryParameter("oauth_verifier")); 
       // Trade the Request Token and Verfier for the Access Token 
       requestToken = service.getRequestToken(); 
       Log.d("Tumblr", "Trading the Request Token for an Access Token..."); 
       Log.d("Tumblr", " ---> Request Token: " + requestToken.getToken()); 
       Log.d("Tumblr", " ---> Request Token Secret: " + requestToken.getSecret()); 
       Log.d("Tumblr", " ---> Verifier: " + verifier.getValue()); 
       Token accessToken = service.getAccessToken(requestToken, verifier); 
       Log.d("Tumblr", "Got the Access Token!"); 
       Log.d("Tumblr", "(if you're curious it looks like this: " + accessToken + ")"); 

       // Now let's go and ask for a protected resource! 
       Log.d("Tumblr", "Now we're going to access a protected resource..."); 
       OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); 
       service.signRequest(accessToken, request); 
       Response response = request.send(); 
       Log.d("Tumblr", "Got it! Lets see what we found..."); 
       Log.d("Tumblr", ""+response.getBody()); 

       Log.d("Tumblr", "Thats it man! Go and build something awesome with Scribe! :)"); 
      } 
     } 

    } 
} 

답변

0

저는 같은 문제에 직면했습니다. 이것은 다른 요청 토큰으로 인해 발생했습니다. 텀블러의 OAuth를 작동

방법 :

  • 애플리케이션 A를 requestToken에 대한 요청 및 AuthorizationUrl를 생성합니다.
  • 인증을 위해 사용자는 tumblrs 페이지로 리디렉션됩니다.
  • 사용자가 모든 권한을 부여하면 tumblr은 oauth_verifier 코드로 콜백 URL로 다시 리디렉션됩니다.
  • 이제 oauth_verifierrequestToken을 기반으로 accessToken을 생성하려고합니다.
  • 여기에 꼬임이 있습니다. URL을 가져 오는 동안 사용 된 requestToken이 동일한 지 확인해야합니다. 그렇지 않으면 토큰을 추출 할 수없는 오류가 발생합니다.
관련 문제