【发布时间】:2012-01-14 10:54:51
【问题描述】:
我开始使用 facebook Graph API,我将通过 java 使用一些简单的 HTTP 请求来检索访问令牌。
关注https://developers.facebook.com/docs/authentication/ 我创建了一个新应用,但我没有域,所以 我向
发出 HTTP 请求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.HttpURLConnection 和org.apache.http.HttpResponse,
但是,在这两种情况下,执行第一个调用我得到的响应是 Facebook 登录页面的 HTML。
如果我使用这个 HTML 创建一个网页,然后我只需单击登录按钮(不插入用户名和密码),我就会得到带有代码的成功页面!
在 HTML 中,按钮 Login 的提交字段为空,我无法检索重定向 URL...我可以读取 <meta> 标记中生成 auth_token 的备用链接(它是什么?它是与普通的 access_token 完全不同...)。
所以我要问的是:
可以通过某种方式检测隐藏重定向 使用
java.net.HttpURLConnection或org.apache.http.HttpResponse?如果是,机制如何?和
auth_token有关系吗?如果没有,是否可以与其他库一起使用? (我也用过restfb, 但他们似乎需要一个“手动”插入的访问令牌作为 arg,我也看到了 facebook-java-api 但它看起来很旧)。
另外,如果我登录 Facebook,通过 Java 执行第一个 HTTP 调用,我会得到 Facebook 登录页面的 HTML 作为响应。
使用 HTML 创建网页,然后我只需单击登录按钮(无需插入用户名和密码),我将获得带有 URL 中 code 参数的 success.htm 页面。
如果我在浏览器中直接使用原网址,可以直接获得success.htm页面,中间没有段落。
所以我认为问题在于 cookie 的管理:在 Java 中(在 Eclipse 中执行)我无法访问浏览器的 cookie。
我尝试重定向以使用 Servlet,但收到有关域的错误: ServletURL 不是 Facebook 域或为我的应用注册的“站点 URL”(实际上我没有为我的应用设置站点 URL……这是问题的核心)。
无论如何这里 http://developers.facebook.com/docs/authentication/ 在应用类型 > 他们说的桌面应用部分中:
[...] 在用户授权您的应用 [我允许一切] 后,我们 使用访问令牌将用户重定向回 redirect_uri URI 片段:[...]
检测此重定向,然后从 URI 中读取访问令牌 使用您选择的框架提供的任何机制。 [...]
所以我认为仍然可以通过 Java 检测到这个重定向。怎么样?
【问题讨论】:
标签: java facebook-graph-api redirect access-token