gpt4 book ai didi

javascript - Facebook 连接帮助

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:02 24 4
gpt4 key购买 nike

根据 Facebook API 文档,大部分工作是通过 javascript 处理的。

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

我的问题是:

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

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

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

如果那是正确的...那么它就没有意义。如果有人窃取其他人的“facebook ID”然后伪造 cookie 怎么办?然后我的后端看到 cookie 并认为它是真正的用户...?

我糊涂了吗?如果我感到困惑,请帮我重新整理并告诉我感觉如何。

最佳答案

Facebook Connect 使用巧妙的(或疯狂的,取决于您的观点)hack 从浏览器内实现您的网站和 Facebook 的身份验证系统之间的跨站点通信。

其工作方式如下:

  1. 您的站点包含一个非常简单的静态 HTML 文件,称为跨域通信 channel 。此文件在 FB 文档中称为 xd_receiver.htm,但您可以随意命名。
  2. 您网站的登录页面包含对托管在 Facebook 服务器上的 Javascript 库的引用。
  3. 当用户通过“连接”按钮登录时,它会调用 Facebook 的 JS API 中的一个函数,该函数会弹出一个登录对话框。此登录框有一个不可见的 iframe,其中加载了跨域通信文件。
  4. 用户填写表单并提交,将表单发布到 Facebook。
  5. Facebook 检查登录信息。如果成功,它会将此信息传达给您的网站。这是跨域内容的来源:
    1. 由于跨域安全策略,Facebook 的登录窗口无法检查 DOM 树中托管在您服务器上的文档。但是登录窗口可以更新其中任何iframesrc元素,这用于与托管的跨域通信文件通信在您的页面上。
    2. 当跨域通信文件收到表明登录成功的通信时,它会使用 Javascript 设置一些包含用户 ID 和 session 的 cookie。由于此文件位于您的服务器上,因此这些 cookie 具有您的域并且您的后端可以接收它们。
  6. 在 Facebook 方向上的任何进一步通信都可以通过在另一个 iframe 中插入另一个嵌套的 iframe 来实现——这个二级 iframe 存在在 Facebook 的服务器上而不是您的服务器上。

Cookie 是安全的(理论上),因为数据是使用 Facebook 在您注册开发者计划时为您生成的 key 签名的。 JS 库使用您的公钥(“API key ”)来验证 cookie。

理论上,Facebook 的 Javascript 库会在您设置完所有内容后自动处理这一切。在实践中,我发现它并不总是能顺利运行。

有关使用 iframe 的跨域通信机制的更详细说明,请参阅 this article来自 MSDN。

关于javascript - Facebook 连接帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1580504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com