我正在使用scribe制作一个支持oauth的应用程序。我没有发现Twitter的问题,但在使用Facebook时我遇到了问题...
这是适用于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相同的问题! =(
编辑:
我一直在查看Scribe库的源代码,我找到了一些东西
在这里,我们可以看到我可以使用null参数调用getAuthorizationUrl(...),因为它不使用它....但我认为prioblem现在是配置未填充... < / p>
这是我如何初始化Facebook服务:
new ServiceBuilder()
.provider(FacebookApi.class)
.apiKey(....)
.apiSecret(....)
.scope("email,offline_access")
.callback("oauth://facebook")
.build();
这是对的吗?
谢谢!
答案 0 :(得分: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);
现在,您只需要将用户重定向到此网址,然后让他自己验证这些网址,以便从facebok获取代码。
对于几乎所有主要的誓言,都有很多非常好的文档示例 系统
这里是Facebook
适用于所有主要供应商 Scribe Example Directory
修改强>
在查看讨论之后,我的建议是全面了解Oauth1和Oauth2。
答案 1 :(得分:7)
你错了。 OAuth 2协议永远不会返回OAuth 1等请求令牌。
Oauth 1执行HTTP POST请求并返回未经授权的请求令牌。然后,您必须授权未经授权的令牌接收授权令牌(即2次HTTP呼叫)。
另一方面,Oauth 2没有请求令牌流,您需要为授权令牌执行HTTP GET(仅限1个HTTP呼叫)。因此,为什么Scribe说您需要致电getAuthorizedUrl
。
请参阅此Facebook Example,了解如何使用OAuth 2检索授权令牌。