0

我们有大量的网站需要实现跨域登录,即。如果有人使用凭据登录到站点 X,则当用户导航到站点 A 或 B 时,他应该自动登录到站点 A 或 B。

此外,我们希望提供一个通用的 UI/Javascript,所有站点都可以将其放在其 HTML 文件中,并且它将在内部调用一个通用 API,并以某种方式将用户登录到站点 A 或 B。

它类似于 Facebook 所拥有的。如果一个人登录 facebook 并访问一个站点,如果他已授予该站点的权限,他将自动登录。

此外,每个具有 facebook 社交插件的站点上都存在相同的 facebook UI,并且包括 facebook 插件的站点不必从其自己的服务器对 facebook 进行任何调用(我猜该调用是从浏览器进行的)。

我看到对 facebook 的调用包含该应用程序使用的 API 密钥,但由于 API 密钥是可见的,它不再是秘密。FB如何防止通过相同的API密钥对其服务器进行随机DOS攻击,如果用户随机更改他的IP地址?

假设我们尝试实现与 X 相关联的所有网站 A、B 的相似之处,因为 API 密钥已暴露(就像在 FB 的情况下一样),我怎样才能阻止不同的流氓网站,比如 ABC.com 使用相同的 API 密钥,并且就像它是网络的一部分一样。

我猜因为调用来自浏览器,并且来自 javascript,所以 API 密钥总是公开的。调用是否必须始终来自服务器,以便 API 密钥保密?

就我而言,各种网络网站(如 A、B 等)的用户界面如何将某些内容传递给 X 的服务器,以便服务器 X 可以识别呼叫确实来自可靠来源并且没有被冒充?

谢谢

图科

4

1 回答 1

1

我看到对 facebook 的调用包含该应用程序使用的 API 密钥,但由于 API 密钥是可见的,它不再是秘密。

从来没有人说它是。

FB如何防止通过相同的API密钥对其服务器进行随机DOS攻击,如果用户随机更改他的IP地址?

对于某些操作(例如登录),应用程序与应用程序设置中设置的某些域相关联。如果我的应用程序允许用户从 example.com 通过 Facebook 登录,则登录将不起作用。net获取我的应用程序 ID 并尝试让用户从他们的域连接到它。

我猜因为调用来自浏览器,并且来自 javascript,所以 API 密钥总是公开的。调用是否必须始终来自服务器,以便 API 密钥保密?

使用应用程序密钥的调用应始终仅在服务器端进行。

就我而言,各种网络网站(如 A、B 等)的用户界面如何将某些内容传递给 X 的服务器,以便服务器 X 可以识别呼叫确实来自可靠来源并且没有被冒充?

Facebook JS SDK 例如检查它当前在哪个域上运行。

由于那是客户端并且可以被操纵,因此还有其他安全措施。Fe,Facebook 只会将客户端重定向到特定域下的地址,并在服务器端通信中为您提供签名请求,可以使用您的应用程序密码进行验证。

于 2012-10-18T09:28:03.343 回答