我开始使用,我将通过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.HttpURLConnection和org.apache.http.HttpResponse,但在这两种情况下,我都执行了第一个调用,作为对Facebook登录页面的响应。
如果我使用这个HTML创建一个网页,然后我只需点击Login按钮(没有插入用户名和密码),我就可以得到成功页面的代码!
在HTML中,按钮登录的提交字段为空,我无法检索重定向URL.我只需在<meta>标记中读取一个生成auth_token的备用链接(它是什么?这是非常不同的wrt正常的access_token.)。
我想问的是:
使用org.apache.http.HttpResponse?
auth_token另外,如果我登录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检测重定向。多么?
发布于 2011-12-13 14:26:20
如果您还没有域,我建议您使用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");这将返回一个访问令牌,您可以用该令牌查询facebook
https://stackoverflow.com/questions/8406683
复制相似问题