2011-12-20 80 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检索授权令牌