我正在使用Polymer + Firebase开发Web应用程序。在我的应用程序中,我正在尝试将其集成到Slack。为了从Slack获取访问令牌,我需要使用客户端密钥(由Slack生成)对Slack进行api调用。
问题是,我应该在哪里/如何存储此客户端密钥?在我的Polymer应用程序中对此密钥进行硬编码确实听起来像是一个很大的安全性而不是没有。
感谢。
答案 0 :(得分:0)
在客户端代码中存储一个秘密听起来是一个非常糟糕的主意。任何恶意用户都可以获得它。
任何其他需要访问客户端秘密的方式都存在缺陷。
唯一的解决方案是不需要在客户端上存在秘密的解决方案,因此需要在受信任位置运行代码。通常这将是一台服务器,但不要过高估计运行此类代码所需的硬件数量。在这种情况下要求服务器是关于信任,而不是更大的硬件。
请参阅此article about common application architectures on Firebase中的模式2。
答案 1 :(得分:0)
服务器密钥只能访问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;