gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:04:19 24 4
gpt4 key购买 nike

我开始使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com