.run(function($FB){ $FB.init('9xxxxxxxxxxxx94'); })
所以我知道对此的一般答案 – ‘API密钥应保留在服务器端’,但是我不知道我是如何实现这一点的.
共享调用方法是在前端进行的,所以即使我的服务器保留了API密钥并发送它,肯定它仍然在前端可见,否则共享按钮如何工作?
所以我的问题是,如何隐藏Facebook API密钥?
谢谢.
首先发生的是客户端将请求密钥.这只会发生在某些页面上,例如注册和登录页面.这里的想法是,我们希望确保只允许使用已知客户端(在这种情况下是官方网站或核心客户端)浏览的用户采取创建或验证用户等操作.
因此,当客户端应用程序请求登录页面时,服务器会根据请求中发送的信息生成唯一令牌.使用的信息总是服务器知道的东西,客户知道的东西,以及两者都知道的东西.因此,例如,服务器可以基于用户代理当前时间密钥生成唯一密钥.服务器根据此信息生成散列,然后在客户端计算机上存储仅包含散列的cookie.
设置权限
在这一点上,我们的钥匙真的不再是钥匙了.它已被转换为访问令牌.然后,服务器应该获取此访问令牌并将其存储以供以后检索.您可以将密钥放在数据库中,但由于需要经常检索此类型的数据,我建议使用像Redis这样的键值存储来减少数据库读/写并提高性能.
存储令牌时,还应存储单独的数据,以指示与令牌关联的权限.在这种情况下,我们的令牌仅作为注册和验证用户的方式,因此我们将其存储在一个值旁边,该值指示令牌所属的人(应用程序的Web UI)以及它具有的权限(仅限于创建和验证用户) .我们对待它就像我们任何其他API客户端一样,我们可以捕获统计信息并控制它的使用方式.
授权请求
当客户端发出POST请求以创建新用户或登录服务器时,将检查客户端是否发送了识别cookie以及请求.如果没有,我们拒绝该请求.如果确实发送了cookie,服务器应该再次使用之前使用的值生成哈希值(这些值已经是已知的或者随请求一起发送,因此我们并没有真正对服务器征税)将它与cookie进行比较发送给我们,如果值匹配允许请求继续.
要么
只需向您的服务器发送请求,让他使用隐藏的API密钥处理您的请求,并将您的请求结果返回给您的前端.