0

我试图请求
https://graph.facebook.com/oauth/authorize?client_id=MY_API_KEY& redirect_uri= http://www.facebook.com/connect/login_success.html&scope=publish_stream,create_event

但重定向后出现错误:
“请求的 URL /login.php?login_attempt=1&next=https%3A%2F%2Fwww.facebook....”

login.php 是从哪里来的,那不是重定向页面?!
重定向有什么问题?
谢谢!

4

3 回答 3

4

redirect_uri应该是您服务器上的一个 URL,在他/她授予您访问他/她受保护的资源后,facebook 将重定向用户。在那里,您应该使用服务器端获取交换请求令牌code(从 facebook 返回的查询字符串参数的值) 。access_token

redirect_uri必须与 Facebook应用程序设置中使用 Facebook 登录的网站上的站点 URL设置位于同一域中https://developers.facebook.com/apps/{your-app-id}/summary/

  1. 将用户重定向到提供者

将用户重定向到提供者,以便他/她可以告诉提供者他/她正在让您访问您在scope. 在用户同意或拒绝后,提供商会将用户重定向到redirect_uri您的服务器上。为防止跨站点脚本请求伪造,您应该生成并存储 CSRF 令牌并与请求一起发送。

https://www.facebook.com/dialog/oauth?
    client_id={your-app-id}&
    redirect_uri=http://your-site.com/after-redirect&
    scope=list,of,scopes&
    state={a-hard-to-guess-random-csrf-token}
  1. 将请求令牌(代码)交换为访问令牌

在您的请求处理程序中,http://your-site.com/after-redirect您应该检查errorerror_message请求参数。如果没有错误,您应该首先验证(与存储的比较)stateCSRF 令牌,如果有效,然后通过服务器端获取将code(请求令牌)交换为提供者的访问令牌。redirect_uri和参数是必需的grant_type=authorization_code(至少某些提供者是这样)。

https://graph.facebook.com/oauth/access_token?
    code={request-token}&
    client_id={your-app-id}&
    client_secret={your-app-secret}&
    redirect_uri=http://your-site.com/after-redirect&
    grant_type=authorization_code
  1. 使用访问令牌访问用户的受保护资源

如果令牌类型bearer您应该access_token在 HTTP 标头中以Authorization: Bearer {access-token}'. 见:https ://www.rfc-editor.org/rfc/rfc6750#section-2.1

https://graph.facebook.com/me?
    fields=name,birthday,photos.limit(10).fields(id, picture)&
    access_token={access-token}
    
于 2013-10-31T08:49:44.077 回答
0

试试这种方式:

     public String getOauthUrl(String clientId, String callbackUrl, String scope) {
     return "https://graph.facebook.com/oauth/authorize?client_id="
            + clientId + "&display=page&redirect_uri="
            + callbackUrl + "&scope=" + scope;
     }
于 2013-10-31T05:08:40.203 回答
0

这是我正在使用的代码:

URL url2 = new URL("https://www.facebook.com/dialog/oauth?client_id=MY_APP_ID&redirect_uri=https://www.facebook.com/connect/login_success.html&scope=publish_stream,create_event");
URLConnection conn = url2.openConnection();
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); String test;
test=rd.readLine();
resp.getWriter().println(test);
rd.close();

于 2013-10-31T07:46:23.363 回答