如何通过java检测重定向以检索access_令牌

如何通过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请求

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

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

  • 如果是,机制如何?它是否与身份验证令牌相关

  • 如果没有,是否可以使用其他库?(我也用restfb, 但它们似乎需要一个“手工”插入的访问令牌作为密码 arg,我还看到了facebookjavaapi,但它似乎很旧)


  • 另外,如果我登录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_令牌。