我正在使用Polymer + Firebase开发Web应用程序。在我的应用程序中,我正在尝试将其集成到Slack。为了从Slack获取访问令牌,我需要使用客户端密钥(由Slack生成)对Slack进行api调用。
问题是,我应该在哪里/如何存储此客户端密钥?在我的Polymer应用程序中对此密钥进行硬编码确实听起来像是一个很大的安全措施。
谢谢。
API密钥之类的秘密只能由您的服务器代码访问,如果保存到文件中,则使用.gitignore
规则从源代码中排除。
firebase config:set
存储Firebase项目API密钥。例:
$ firebase functions:config:set myapp.apikey=https://hooks.slack.com/services/XXX
然后在本地模拟器或部署的代码中,您可以使用:
const functions = require('firebase-functions');
const apikey = functions.config().myapp.apikey;
在客户端代码中存储秘密听起来是一个非常糟糕的主意。任何恶意用户都可以获得它。
需要访问客户端上的秘密的任何其他方式同样存在缺陷。
唯一的解决方案是不需要秘密存在于客户端上的解决方案,因此涉及在受信任位置运行代码。通常这将是一个服务器,但不要高估运行此类代码所需的硬件数量。在这种情况下要求服务器是关于信任,而不是更大的硬件。
见article about common application architectures on Firebase中的模式2。