Firebase 在使用Polymer+;火基?

Firebase 在使用Polymer+;火基?,firebase,polymer,polymer-1.0,firebase-security,slack-api,Firebase,Polymer,Polymer 1.0,Firebase Security,Slack Api,我正在使用Polymer+Firebase开发一个web应用程序。在我的应用程序中,我试图将其集成到Slack中。为了从Slack获得访问令牌,我需要使用客户机密钥(由Slack生成)对Slack进行api调用 问题是,我应该在哪里/如何存储此客户端密钥?在我的Polymer应用程序中硬编码这把钥匙听起来像是一个很大的安全问题 谢谢。在客户端代码中存储秘密听起来是个非常糟糕的主意。任何恶意用户都可以获得它 任何其他需要访问客户机上的机密的方法都有类似的缺陷 唯一的解决方案是不要求客户机上存在机密

我正在使用Polymer+Firebase开发一个web应用程序。在我的应用程序中,我试图将其集成到Slack中。为了从Slack获得访问令牌,我需要使用客户机密钥(由Slack生成)对Slack进行api调用

问题是,我应该在哪里/如何存储此客户端密钥?在我的Polymer应用程序中硬编码这把钥匙听起来像是一个很大的安全问题


谢谢。

在客户端代码中存储秘密听起来是个非常糟糕的主意。任何恶意用户都可以获得它

任何其他需要访问客户机上的机密的方法都有类似的缺陷

唯一的解决方案是不要求客户机上存在机密,因此需要在可信位置运行代码。通常,这将是一个服务器,但不要高估需要在多少硬件上运行此类代码。在这种情况下,需要服务器是为了信任,而不是更大的硬件


请参阅本文中的模式2。

像API密钥这样的机密应该只能由服务器代码访问,如果保存到文件中,则应使用
.gitignore
规则从源代码中排除

  • 用于存储Firebase项目API密钥
  • 创建一个使用密钥供客户端使用的
  • (可选)安全访问新的无服务器函数API
例如:

$ firebase functions:config:set myapp.apikey=https://hooks.slack.com/services/XXX
然后在本地emulator或部署的代码中,您可以使用:

const functions = require('firebase-functions');
const apikey = functions.config().myapp.apikey;

谢谢模式2:Firebase驱动的应用程序和服务器代码是唯一的解决方案,“你想让你的应用程序与第三方API集成(比如Twilio发送短信,或者SendGrid发送电子邮件)。”不过,如何让它正常工作还是有点模糊。。你是说
functions.config()
可以在客户端访问吗?如果是这样的话,那么Firebase文档并没有完全清楚地说明这一点。我认为您应该只对客户端配置使用RemoteConfigAPI。