我的网站已经与Facebook登录集成,使用服务器端身份验证。
我有一个问题要把它变成一个在Facebook下运行的应用程序。
问题是Facebook根本没有显示身份验证页面
因此,我甚至没有进入真实的服务器身份验证过程。
现在,应用程序正在我的本地计算机上运行。
我的应用程序被定义为Facebook应用程序:(在localhost之前添加空白仅用于站点安全目的)
[在没有安全网址的情况下在沙盒中运行时会发生同样的问题]
我有一个“粉丝页面”,其中有“转到应用程序”按钮。 按下按钮会将我引导至URL: https://apps.facebook.com/ [APPID] /?fb_source =时间轴
浏览器开始加载带有框架的页面。 较低的帧对我提供的URL发出POST请求。
我的应用程序将页面重定向到以下URL:
https://www.facebook.com/dialog/oauth?client_id= [APPID]&安培; REDIRECT_URI = https://开头本地主机:4303 / fbopt /钩&安培;范围=电子邮件,USER_LOCATION,user_birthday
我希望Facebook能够显示应用程序身份验证表单,并具有所需的权限。
不幸的是,这不会发生。 框架内显示空白页面,HTML为空!
我看到(来自Chrome网络调试器)确实访问了URL,但响应是HTTP 200状态(不是错误),但没有响应数据。取而代之的是
X-Frame-Options:DENY
响应标头 - 在帧内拒绝渲染!为什么呢?
在Facebook框架结构之外“手动”加载上面的URL时,我会获得具有正确权限的身份验证屏幕。
我想知道让它与canvas一起工作缺少什么。
任何关于我应该添加的内容或如何调试此类问题的提示都将不胜感激。
谢谢, 最大
答案 0 :(得分:2)
看起来我的根本问题是我试图重定向整个页面,而不是进行帧重定向。
从这里开始: Blank Canvas => 'Refused to display document because display forbidden by X-Frame-Options.'
在这里: https://developers.facebook.com/docs/howtos/login/login-for-canvas/
它说:
因为您的应用程序正在iframe中加载,所以返回302以将用户重定向到Login Dialog将不会成功。相反,您必须通过设置Javascript window.top.location属性来重定向,这会导致父窗口重定向到登录对话框URL
这可能是我的主要错误。
最高
答案 1 :(得分:0)
您的应用中有iframe
吗?向内容X-Frame-Options
发送DENY
是Facebook与点击劫持战斗的方式。更多信息:
http://darklaunch.com/2010/11/09/facebook-s-anti-clickjacking-techniques
adding an iframe to facebook does not work anymore since ~2 weeks
答案 2 :(得分:0)
我遇到了同样的问题。 302重定向有效,因为我使用了很多,但你无法出于任何原因重定向到facebook域。如果你想要你可以通过javascript进行顶级重定向。我做的是创建了一个接受URL的html,然后将它加载到top.location,然后重定向回apps.facebook.com。使用X-frame很可能是因为你有一个AntiForgeryToken(如果使用.net),因为这会在标题中插入xframe sameorigin。您可以使用
禁用此功能AntiForgeryConfig.SuppressXFrameOptionsHeader = true;