Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Facebook连接帮助_Javascript_Python_Facebook - Fatal编程技术网

Javascript Facebook连接帮助

Javascript Facebook连接帮助,javascript,python,facebook,Javascript,Python,Facebook,根据facebookapi文档,大部分工作都是通过javascript处理的 这意味着所有处理都完成了,然后前端检查用户是否连接到Facebook/授权。对吧? 我的问题是: 假设一个用户第一次访问我的站点。 他点击“facebook连接”。javascript验证他的真实性,并将其“重定向”到我服务器上的另一个页面。从那时起,我怎么知道用户实际上已经通过了我的网站的身份验证,因为一切都是在前端完成的 我认为这是正确的,但是否存在一些安全问题: -用户单击登录后,Facebook会重定向到我网站

根据facebookapi文档,大部分工作都是通过javascript处理的

这意味着所有处理都完成了,然后前端检查用户是否连接到Facebook/授权。对吧?

我的问题是:

假设一个用户第一次访问我的站点。 他点击“facebook连接”。javascript验证他的真实性,并将其“重定向”到我服务器上的另一个页面。从那时起,我怎么知道用户实际上已经通过了我的网站的身份验证,因为一切都是在前端完成的

我认为这是正确的,但是否存在一些安全问题:

-用户单击登录后,Facebook会重定向到我网站上的一个页面。他们还创建了一个带有特定“Facebook ID”的cookie,该cookie只能从该用户处检索。我的备份将“读取”cookie并获取该ID…然后将其与我的用户ID关联

如果这是正确的…那就没有意义了。如果有人偷了别人的“facebook ID”,然后伪造了饼干呢?然后我的后端看到cookie并认为它是真正的用户


我困惑了吗?如果我感到困惑,请帮助我重新组织并告诉我情况如何。

Facebook Connect使用一种聪明(或疯狂,取决于您的观点)的黑客技术,从浏览器中实现您的网站与Facebook的身份验证系统之间的跨站点通信

其工作方式如下:

  • 您的站点包含一个非常简单的静态HTML文件,称为跨域通信通道。该文件在FB文档中称为
    xd_receiver.htm
    ,但可以随意命名
  • 您站点的登录页面包含对Facebook服务器上托管的Javascript库的引用
  • 当用户通过“连接”按钮登录时,它会调用Facebook JS API中的一个函数,弹出一个登录对话框。此登录框有一个不可见的iframe,其中加载了跨域通信文件
  • 用户填写表单并提交,然后将表单发布到Facebook
  • Facebook检查登录名。如果成功,它会将此信息传达给您的站点。这就是跨域内容的用武之地:
  • 由于跨域安全策略,Facebook的登录窗口无法检查服务器上托管的文档的DOM树。但是登录窗口可以更新其中任何
    iframe
    src
    元素,这用于与页面上托管的跨域通信文件进行通信
  • 当跨域通信文件收到指示登录成功的通信时,它使用Javascript设置一些包含用户ID和会话的cookie。由于此文件位于您的服务器上,因此这些cookie位于您的域中,您的后端可以接收它们
  • 通过在另一个
    iframe
    中插入另一个嵌套的
    iframe
    ,可以实现Facebook方向上的任何进一步通信——第二级
    iframe
    位于Facebook的服务器上,而不是您的服务器上
  • cookies是安全的(理论上),因为数据是用Facebook在你注册开发者程序时为你生成的密钥签名的。JS库使用您的公钥(“API密钥”)来验证cookie

    从理论上讲,Facebook的Javascript库会在您设置好所有内容后自动处理这一切。在实践中,我发现它并不总是完全顺利地工作


    有关使用
    iframe
    s的跨域通信机制的更详细解释,请参阅MSDN。

    Facebook Connect使用一种聪明(或疯狂,取决于您的观点)的黑客技术,从浏览器中实现站点与Facebook认证系统之间的跨站点通信

    其工作方式如下:

  • 您的站点包含一个非常简单的静态HTML文件,称为跨域通信通道。该文件在FB文档中称为
    xd_receiver.htm
    ,但可以随意命名
  • 您站点的登录页面包含对Facebook服务器上托管的Javascript库的引用
  • 当用户通过“连接”按钮登录时,它会调用Facebook JS API中的一个函数,弹出一个登录对话框。此登录框有一个不可见的iframe,其中加载了跨域通信文件
  • 用户填写表单并提交,然后将表单发布到Facebook
  • Facebook检查登录名。如果成功,它会将此信息传达给您的站点。这就是跨域内容的用武之地:
  • 由于跨域安全策略,Facebook的登录窗口无法检查服务器上托管的文档的DOM树。但是登录窗口可以更新其中任何
    iframe
    src
    元素,这用于与页面上托管的跨域通信文件进行通信
  • 当跨域通信文件收到指示登录成功的通信时,它使用Javascript设置一些包含用户ID和会话的cookie。由于此文件位于您的服务器上,因此这些cookie位于您的域中,您的后端可以接收它们
  • 通过在另一个
    iframe
    中插入另一个嵌套的
    iframe
    ,可以实现Facebook方向上的任何进一步通信——第二级
    iframe
    位于Facebook的服务器上,而不是您的服务器上
  • cookies是安全的(理论上),因为数据是用Facebook在你注册开发者程序时为你生成的密钥签名的。JS库使用您的公钥(“API密钥”)来验证cookie

    从理论上讲,Facebook的Javascript库会在您设置好所有内容后自动处理这一切。在普拉克
    if($_SESSION['facebookSignature'] == reGeneratedSignature){
       // save to database
    }else{
      // go away I don't trust you
    }