【问题标题】:Oauth problems with ScribeScribe 的 Oauth 问题
【发布时间】:2016-09-24 12:01:27
【问题描述】:

我正在使用 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 库的源代码,发现了一些东西

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

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

这是我初始化 facebook 服务的方式:

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

这对吗?

谢谢!

【问题讨论】:

  • Facebook 使用 OAuth 版本 2,Twitter 使用 OAuth 1。你知道区别吗?
  • 我知道...我认为这是问题所在...但我不太清楚它们之间的区别...
  • 您的 2 个协议有误,请参阅下面的答案。

标签: java oauth scribe


【解决方案1】:
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 并让他自行验证以从 Facebook 获取代码。

几乎所有主要的誓言都有大量示例和非常好的文档 系统

这是 Facebook 的

FacebookExample

适用于所有主要供应商 Scribe Example Directory

编辑

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

【讨论】:

  • 可以说这是 Scribe 的一个小错误;它应该简单地从 getRequestToken 的 OAuth 2 实现中返回 null。
【解决方案2】:

你错了。 OAuth 2 协议从不返回像 OAuth 1 这样的请求令牌。

Oauth 1 执行 HTTP POST 请求并返回未经授权的请求令牌。然后,您必须授权未经授权的令牌才能接收授权令牌(即 2 HTTP 调用)。

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

查看此Facebook Example,了解如何使用 OAuth 2 检索授权令牌。

【讨论】:

    猜你喜欢
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2011-07-30
    • 2012-01-21
    • 2012-02-18
    相关资源
    最近更新 更多