我试着要求
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是从哪里来的,那不是重定向页面吗?!
重定向的问题是什么?
谢谢!
发布于 2013-10-31 16:49:44
redirect_uri应该是你的服务器上的一个网址,在他/她授予你访问他/她的受保护资源的权限后,facebook将重定向用户。在那里,您应该使用服务器端fetch将请求令牌--从facebook返回的code查询字符串参数的值--交换为access_token。
redirect_uri必须与网站上的站点URL设置位于相同的域中,并且在https://developers.facebook.com/apps/{your-app-id}/summary/的Facebook应用程序设置中包含facebook登录
将用户重定向到提供商,以便他/她可以告诉提供商,他/她将为您提供对其在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}的请求令牌(代码)
在http://your-site.com/after-redirect的请求处理程序中,您应该检查error和error_message请求参数。如果没有错误,您应该首先验证state CSRF令牌(与存储的令牌相比较),如果有效,则使用服务器端fetch将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如果令牌类型是bearer,那么您应该以Authorization: Bearer {access-token}'的形式在HTTP头中发送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-31 13:08:40
尝试这样做:
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-31 15:46:23
这是我使用的代码:
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();
https://stackoverflow.com/questions/19695517
复制相似问题