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

标签 java facebook-graph-api redirect access-token

我开始使用 facebook Graph API,我将通过 java 进行一些简单的 HTTP 请求来检索访问 token 。

已关注 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

最终获得我的访问 token 。

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

如果我使用此 HTML 创建网页,然后只需单击“登录”按钮(无需插入用户名和密码),我将获得包含代码的成功页面!

在 HTML 中,“登录”按钮的提交字段为空,我无法检索重定向 URL...我只能阅读 <meta> 中的备用链接。生成 auth_token 的标签(它是什么?它与普通的 access_token 非常不同......)。

所以我要问的是:

  1. 可以通过某种方式检测隐藏的重定向 使用java.net.HttpURLConnection或者 org.apache.http.HttpRespons e?

  2. 如果有,机制如何?与auth_token有关吗? ?

  3. 如果不能,是否可以使用其他库? (我也用过restfb, 但他们似乎需要“手动”插入访问 token 作为 arg,我还看到了 facebook-java-api 但它看起来很旧)。

<小时/>

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

使用 HTML 创建网页,然后只需单击“登录”按钮(无需插入用户名和密码)即可获得 success.htm 页面,URL 中包含代码参数。

如果我直接在浏览器中使用原始URL,我可以直接获取success.htm页面,中间没有段落。

所以我认为问题出在 cookie 的管理上:在 Java 中(在 Eclipse 中执行)我无法访问浏览器的 cookie。

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

无论如何这里 http://developers.facebook.com/docs/authentication/ 在“应用程序类型”>“桌面应用程序”部分中,他们说:

[...] After the user authorizes your app [I allowed everything], we redirect the user back to the redirect_uri with the access token in the URI fragment: [...]

Detect this redirect and then read the access token out of the URI using whatever mechanisms provided by your framework of choice. [...]

所以我认为仍然可以通过Java检测到这个重定向。怎么办?

最佳答案

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

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

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");

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

关于java - 如何通过java检测重定向以检索access_token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8406683/

相关文章:

ios - 如何从我的 Swift 应用程序请求 Facebook publish_actions 权限?

facebook - 如何在不调用每个帖子的评论对象的情况下从墙上的帖子中获取评论计数?

php - .htaccess 将 css 重定向到 php

java - 在 Struts 2 中使用 ModelDriven 访问 POJO 属性?

java - list 文件从不保存我在制作 jar 文件时设置的内容

java - 检查 Controller 中的业务逻辑以提供更好的错误消息

java - Caused by : java.net.NoRouteToHostException: Cannot assign requested address (地址不可用)

python - Facebook 图形 Web API 未返回 JSON 格式的响应

javascript - http 重定向到特定的 https 链接

javascript - 复选框选择时的表单重定向