Scribe的Oauth问题

Jav*_*ano 1 java oauth scribe

我正在使用scribe制作一个支持oauth的应用程序.我没有发现Twitter的问题,但使用Facebook时我有问题...

这是在twitter oauth上运行的代码

OAuthService s = /* ... Facebook oauth init ... */
final Token requestToken = s.getRequestToken();
final String authURL = s.getAuthorizationUrl(requestToken);
Run Code Online (Sandbox Code Playgroud)

它在第二行给出了一个错误:

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)
Run Code Online (Sandbox Code Playgroud)

我知道它说我可能会使用getAuthorizationUrl ...但是我必须传递一个requestToken ...

请你帮助我好吗?

对Scribe和Facebook有任何帮助都会有所帮助

谢谢!

PS:Windows Live也存在同样的问题!=(

编辑:

我一直在查看Scribe库的源代码,我找到了一些东西

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

在这里,我们可以看到我可以使用null参数调用getAuthorizationUrl(...),因为它不使用它....但我认为prioblem现在是配置未填充...

这是我如何初始化Facebook服务:

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

它是否正确?

谢谢!

Ume*_*thi 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);
Run Code Online (Sandbox Code Playgroud)

所有你现在需要将用户重定向到这个URL并让他自己验证他们从facebok获取代码.

几乎所有主要的誓言系统都有很多非常好的文档示例

这里是Facebook

FacebookExample

对于所有主要提供商 Scribe示例目录

编辑

在查看讨论后,我的建议是全面了解Oauth1和Oauth2.


Buh*_*ndi 7

你错了.OAuth 2协议永远不会返回OAuth 1之类的请求令牌.

Oauth 1执行HTTP POST请求并返回未经授权的请求令牌.然后,您必须授权未经授权的令牌接收授权令牌(即2次HTTP呼叫).

另一方面,Oauth 2没有请求令牌流,您需要为授权令牌执行HTTP GET (仅限1个HTTP调用).因此,为什么Scribe说你需要打电话getAuthorizedUrl.

请参阅此Facebook示例,了解如何使用OAuth 2检索授权令牌.