Facebook喜欢实现登录各种网站

时间:2012-10-18 06:52:46

标签: cross-domain facebook-javascript-sdk

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

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

它类似于Facebook。如果他登录到Facebook并进入某个站点,他将自动登录,如果他已经为该站点授予了权限。

此外,每个拥有facebook社交插件的网站都会出现相同的Facebook用户界面,包含facebook插件的网站不必从自己的服务器对facebook进行任何调用(我猜这个调用来自于浏览器)。

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

让我们说我们尝试实现类似于与X相关联的所有网站A,B,因为API密钥被暴露(就像FB的情况一样),我怎么能阻止不同的流氓网站,比如ABC。 com使用相同的API密钥,就像它是网络的一部分一样。

我猜因为来自浏览器的呼叫,以及来自javascript的API密钥总是暴露出来。是否始终必须来自服务器,以便保密API密钥?

在我的情况下,各种网络网站(如A,B等)的UI如何将某些东西传递给X的服务器,以便服务器X可以识别该呼叫确实来自可靠的来源并且没有被冒充?

谢谢

图科

1 个答案:

答案 0 :(得分:1)

  

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

没有人说过它。

  

FB如何通过相同的API密钥阻止对其服务器的随机DOS攻击,以及用户是否随机更改其IP地址?

对于某些行动,f.e。登录时,应用程序与应用程序设置中设置的某些域绑定。如果我的应用程序允许用户通过Facebook从example.com登录,则登录将无效,如果示例。 net 获取我的应用程序ID并尝试让用户从其域中连接到它。

  

我猜因为来自浏览器的呼叫,以及来自javascript的API密钥总是暴露出来。是否始终必须来自服务器,以便保密API密钥?

使用应用密码的呼叫应始终仅在服务器端进行。

  

在我的情况下,各种网络网站(如A,B等)的UI如何将某些东西传递给X的服务器,以便服务器X可以识别该呼叫确实来自可靠的来源并且没有被冒充?

Facebook JS SDK检查其当前正在运行的域。

由于这是客户端并且可以被操纵,因此还有其他安全措施。 F.e.,Facebook将客户端重定向到特定域下的地址,并且在服务器端通信中为您提供signed_request,可以使用您的应用秘密进行验证。