1

我有一个网站已经与 Facebook 登录集成,使用服务器端身份验证。

我有一个问题要把它变成在 Facebook 下运行的应用程序。

问题是 Facebook 根本不显示身份验证页面

因此,我什至没有真正进入服务器身份验证过程。

现在,该应用程序正在我的本地计算机上运行。

我的应用程序被定义为 Facebook 应用程序:(仅出于站点安全目的在 localhost 之前添加空白)

  • 画布网址:http://localhost:4300/fbopt/
  • 安全画布 URL:https://localhost:4303/fbopt/"

[在沙盒中运行时会出现同样的问题,没有安全 URL]

我有一个带有“转到应用程序”按钮的“粉丝页面”。按下按钮将我带到 URL:https://apps.facebook.com/[appid]/?fb_source=timeline

浏览器开始加载带有框架的页面。较低的框架向我提供的 URL 发出 POST 请求。

我的应用程序将页面重定向到以下 URL:

https://www.facebook.com/dialog/oauth?client_id=[appid]&redirect_uri=https://localhost:4303/fbopt/hook&scope=email,user_location,user_birthday

我希望 Facebook 能够显示具有所需权限的应用程序身份验证表单。

不幸的是,这不会发生。框架内显示一个空页面,HTML 是空的!

我看到(从 Chrome 网络调试器)确实访问了 URL,但响应是 HTTP 200 状态(不是错误),但没有响应数据。相反,得到

X-Frame-选项:拒绝

响应标头 - 在帧内渲染被拒绝!为什么?

在 Facebook 框架结构之外“手动”加载上面的 URL 时,我确实获得了具有正确权限的身份验证屏幕。

我想知道让它与画布一起工作缺少什么。

关于我应该添加什么或如何调试此类问题的任何提示 - 将不胜感激。

谢谢,麦克斯

4

3 回答 3

2

看起来我的根本问题是我试图重定向整个页面,而不是进行框架重定向。

从这里开始: 空白画布 => '拒绝显示文档,因为 X-Frame-Options 禁止显示。'

去了这里: https ://developers.facebook.com/docs/howtos/login/login-for-canvas/

它说:

因为您的应用程序是在 iframe 中加载的,所以返回 302 以将用户重定向到登录对话框将不成功。相反,您必须通过设置 Javascript window.top.location 属性进行重定向,这会导致父窗口重定向到登录对话框 URL

这可能是我的主要错误。

最大限度

于 2013-02-03T23:28:33.607 回答
0

iframe的应用里有吗?发送X-Frame-Options内容DENY是 Facebook 对抗点击劫持的方式。更多信息:

http://darklaunch.com/2010/11/09/facebook-s-anti-clickjacking-techniques

大约 2 周后,将 iframe 添加到 facebook 不再起作用

于 2013-02-03T22:55:01.230 回答
0

我有同样的问题。302 重定向有效,因为我使用了很多,但您不能出于任何原因重定向到 facebook 域。如果您愿意,可以通过 javascript 进行顶部重定向。我所做的是创建了一个接受 url 的 html,并将其加载到 top.location,然后重定向回 apps.facebook.com。使用 X-frame 很可能是因为您有一个 AntiForgeryToken(如果使用 .net),因为这会在标题中插入 xframe sameorigin。您可以使用禁用此功能

AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
于 2015-05-13T15:17:43.617 回答