2011-12-20 78 views
1

我正在使用scribe製作一個具有oauth支持的應用程序。我沒有發現的問題與Twitter,但使用Facebook的我有問題......當Oauth Scribe問題

這是在Twitter OAuth的工作代碼

OAuthService s = /* ... Facebook oauth init ... */ 
final Token requestToken = s.getRequestToken(); 
final String authURL = s.getAuthorizationUrl(requestToken); 

它給了我一個錯誤在第二條線:

12-20 10:01:31.475: E/AndroidRuntime(5405): java.lang.UnsupportedOperationException: Unsupported operation, please use 'getAuthorizationUrl' and redirect your users there 
12-20 10:01:31.475: E/AndroidRuntime(5405):  at org.scribe.oauth.OAuth20ServiceImpl.getRequestToken(OAuth20ServiceImpl.java:45) 

我知道,它說,我可能會使用getAuthorizationUrl ......但我必須通過requestToken ...

你能幫幫我嗎?

這將有助於Scribe和Facebook的任何例子

謝謝! PS:與Windows Live相同的問題! =(

編輯:

我一直在尋找的抄寫員庫的源代碼,我發現一些

https://github.com/fernandezpablo85/scribe-java/blob/master/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java

在這裏我們可以看到,我可以調用getAuthorizationUrl(.. 。)與空參數,因爲它不使用它....但我認爲現在的prioblem是配置沒有填充...

這裏是我如何初始化Facebook服務:

new ServiceBuilder() 
    .provider(FacebookApi.class) 
    .apiKey(....) 
    .apiSecret(....) 
    .scope("email,offline_access") 
    .callback("oauth://facebook") 
    .build(); 

這是正確的嗎?

謝謝!

+0

Facebook的使用OAuth 2版,微博使用OAuth 1.你知道有什麼區別? – 2011-12-20 09:38:10

+0

我知道了...我認爲這是問題...但我不太清楚差異... – 2011-12-20 09:40:20

+0

你有2個協議錯誤,請參閱下面的答案。 – 2011-12-20 09:49:11

回答

7
private static final Token EMPTY_TOKEN = null; 

OAuthService service = new ServiceBuilder() 
          .provider(FacebookApi.class) 
          .apiKey(apiKey) 
          .apiSecret(apiSecret) 
          .callback("http://www.example.com/oauth_callback/") 
           .build(); 
String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); 

您現在需要將用戶重定向到此URL,並讓他自己驗證它們以從facebok獲取代碼。

有例如具有非常良好的文檔良好的金額幾乎所有主要的誓言 系統

這裏是Facebook的

FacebookExample

適用於所有主要供應商 Scribe Example Directory

編輯

看完討論後,我的建議是充分了解Oauth1和Oauth2。

+0

可以說這是Scribe方面的一個小錯誤;它應該簡單地從'getRequestToken'的OAuth 2實現中返回null。 – 2015-08-01 01:41:47

7

你明白了。 OAuth 2協議永遠不會返回OAuth 1等請求令牌。

Oauth 1執行HTTP POST請求並返回未經授權的請求令牌。然後,您必須授權您的未授權令牌接收授權令牌(這是2個HTTP呼叫)。另一方面,Oauth 2沒有請求令牌流,您需要爲授權令牌(僅限HTTP呼叫)執行HTTP GET。所以爲什麼Scribe說你需要撥打getAuthorizedUrl

看到這個Facebook Example,來看看如何使用OAuth 2檢索授權令牌