如何通过java检测重定向以检索access_令牌
我开始使用FacebookGraphAPI,我将通过java通过一些简单的HTTP请求检索访问令牌 跟随 我创建了一个新的应用程序,但我没有一个域名,所以 我向 www.facebook.com/dialog/oauth?client\u id=你的应用程序\u id&如何通过java检测重定向以检索access_令牌,java,facebook-graph-api,redirect,access-token,Java,Facebook Graph Api,Redirect,Access Token,我开始使用FacebookGraphAPI,我将通过java通过一些简单的HTTP请求检索访问令牌 跟随 我创建了一个新的应用程序,但我没有一个域名,所以 我向 www.facebook.com/dialog/oauth?client\u id=你的应用程序\u id& 重定向\u uri=https://www.facebook.com/connect/login_success.html 对于服务器端流,我假设重定向到一个URL中包含代码的成功页面。然后我将使用此代码发出另一个HTTP请求
重定向\u uri=https://www.facebook.com/connect/login_success.html 对于服务器端流,我假设重定向到一个URL中包含代码的成功页面。然后我将使用此代码发出另一个HTTP请求 graph.facebook.com/oauth/access\u令牌? 客户端id=你的应用id&重定向uri=你的URL& 客户端密码=你的应用程序密码=上面的密码 最后拿到我的通行证 我使用了
java.net.HttpURLConnection
和org.apache.http.HttpResponse
,
但是,在这两种情况下,执行作为Facebook登录页面HTML响应的第一个调用
如果我使用这个HTML来创建一个网页,然后我只需点击登录按钮(不插入用户名和密码),我就会得到带有代码的成功页面
在HTML中,按钮登录的提交字段为空,我无法检索重定向URL。。。我可以在
标记中读取一个备用链接,该链接生成一个身份验证令牌(它是什么?它与普通访问令牌非常不同…)
所以我要问的是:
java.net.HttpURLConnection
或
org.apache.http.HttpRespons
e另外,如果我登录Facebook,通过Java执行第一个HTTP调用,我会得到Facebook登录页面的HTML响应 使用HTML创建一个网页,然后我只需点击登录按钮(不插入用户名和密码),我就得到了带有URL中代码参数的success.htm页面 < >如果我在浏览器中直接使用原始URL,我可以直接在中间没有通道的情况下获得成功.HTM页面。 因此,我认为问题在于cookies的管理:在Java(在Eclipse中执行)中,我无法访问浏览器的cookies 我试图重定向以使用Servlet,但得到了关于域的错误: ServletURL不是Facebook域,也不是为我的应用程序注册的“站点URL”(实际上我没有为我的应用程序设置站点URL…这是核心问题) 无论如何在这里 在“应用类型>桌面应用”一节中,他们说: […]在用户授权你的应用程序[我允许一切]后,我们 使用中的访问令牌将用户重定向回重定向uri URI片段:[……] 检测此重定向,然后从URI中读取访问令牌 使用您选择的框架提供的任何机制。[……]
所以我认为仍然可以通过Java检测这种重定向。如何操作?如果您还没有域,我建议您使用localhost作为域。这样,您就可以在本地web服务器/本地应用程序上进行测试 使用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");
这将返回一个访问令牌,您可以使用Ok查询facebook!非常感谢你!我解决了编辑应用程序的基本设置并将“”设置为网站的问题。现在我可以使用一些Servlet检索代码并访问_令牌。因此,我认为不使用java.net.HttpURLConnection(或org.apache.http.HttpResponse)和重定向URI就不可能获得access_令牌。