首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测重定向以通过java检索access_token

如何检测重定向以通过java检索access_token
EN

Stack Overflow用户
提问于 2011-12-06 20:53:04
回答 1查看 3.2K关注 0票数 0

我开始使用,我将通过java检索带有一些简单HTTP请求的访问令牌。

https://developers.facebook.com/docs/authentication/之后,我创建了一个新的应用程序,但是我没有域,所以我向

www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&

redirect_uri=https://www.facebook.com/connect/login_success.html

对于服务器端流,我认为应该重定向到URL中有代码的成功页面。然后我将使用这段代码发出另一个HTTP请求

graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL& client_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE

最后拿到我的访问令牌。

我同时使用了java.net.HttpURLConnectionorg.apache.http.HttpResponse,但在这两种情况下,我都执行了第一个调用,作为对Facebook登录页面的响应。

如果我使用这个HTML创建一个网页,然后我只需点击Login按钮(没有插入用户名和密码),我就可以得到成功页面的代码!

在HTML中,按钮登录的提交字段为空,我无法检索重定向URL.我只需在<meta>标记中读取一个生成auth_token的备用链接(它是什么?这是非常不同的wrt正常的access_token.)。

我想问的是:

使用org.apache.http.HttpResponse?

  • if或
  1. 可以以某种方式检测隐藏的重定向--是的,这种机制是怎样的?它是否与auth_token
  2. if no相关,是否可能与其他库有关?(我也使用了restfb,但它们似乎需要一个“手工”插入的访问令牌作为arg,我也看到了facebook-java-api,但它似乎很旧)。

另外,如果我登录Facebook,通过Java执行第一个HTTP调用,我就会得到Facebook登录页面的HTML响应。

使用HTML创建一个网页,然后我只需单击Login按钮(没有插入用户名和密码),我就可以在success.htm页面中获得带有代码参数的页面。

如果我在浏览器中直接使用原始网址,我可以直接获得success.htm页面,而不需要中间的段落。

因此,我认为问题在于cookie的管理:在Java (在Eclipse中执行)中,我无法访问浏览器的cookie。

我试图重定向使用Servlet,但我得到了关于域的错误: ServletURL不是Facebook域,也不是为我的应用程序注册的“站点URL”(实际上我没有为我的应用程序设置站点URL .这就是问题的核心)。

无论如何,在apps > Desktop应用程序一节中,http://developers.facebook.com/docs/authentication/都是这样说的:

...在用户授权您的应用程序(我允许一切)之后,我们使用URI片段中的访问令牌将用户重定向回redirect_uri:.

检测此重定向,然后使用您所选择的框架提供的任何机制从URI中读取访问令牌。..。

因此,我认为仍然可以通过Java检测重定向。多么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-13 14:26:20

如果您还没有域,我建议您使用localhost作为域。这样,您就可以在本地web服务器/本地应用程序上测试它。

使用HttpURLConnection很好。我们就是这样做的。

代码语言:javascript
复制
Redirect to: 
"https://graph.facebook.com/oauth/authorize?" +
            "client_id=" + clientId + "&" +
            "redirect_uri=" + URLEncoder.encode(returnUrl, "utf-8") 
// After redirect to the return url do the following:

//Make a http request to 
"https://graph.facebook.com/oauth/access_token?client_id=" +
            "client_id=" + clientId + "&" +
            "redirect_uri=" + URLEncoder.encode(returnUrl, "utf-8")  + "&"+
            "client_secret=" + clientSecret + "&"+
            "code=" + request.getParameter("code");

这将返回一个访问令牌,您可以用该令牌查询facebook

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8406683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档