使用 Polymer + Firebase 时将密钥存储在哪里?
Where to store secret keys when using Polymer + Firebase?
我正在使用 Polymer + Firebase 开发 Web 应用程序。在我的应用程序中,我试图将它集成到 Slack 中。为了从 Slack 获取访问令牌,我需要使用客户端密钥(由 Slack 生成)对 Slack 进行 api 调用。
问题是,where/how 我应该存储这个客户端密钥吗?在我的 Polymer 应用程序中硬编码这个密钥听起来确实是一个很大的安全性,不,不。
谢谢。
在您的客户端代码中存储秘密听起来是个很糟糕的主意。任何恶意用户都可以在那里获取它。
需要在客户端访问机密的任何其他方式同样存在缺陷。
唯一的解决方案是不需要客户端上存在秘密的解决方案,因此涉及 运行在受信任位置中安装代码的解决方案。通常这将是一台服务器,但不要高估 运行 此类代码所需的硬件数量。在这种情况下需要服务器是为了信任,而不是为了更大的硬件。
参见此 article about common application architectures on Firebase 中的模式 2。
像 API 密钥这样的秘密应该只能由您的服务器代码访问,如果保存到文件,则使用 .gitignore
规则从您的源代码中排除。
- 使用
firebase config:set
存储您的 Firebase 项目 API 键。
- 自己创建一个 serverless function,它使用 API 密钥供您的浏览器客户端代码使用。
- 通过检查身份验证/角色/权限(可选/推荐)来安全访问新的无服务器功能API
更好……只需从您的无服务器函数中调用 Slack API,并且根本不要将密钥暴露给您的浏览器客户端用户。
示例:
$ firebase functions:config:set myapp.apikey=XXX
然后在本地模拟器或部署的代码中你可以使用:
const functions = require('firebase-functions');
const apikey = functions.config().myapp.apikey;
const url = `https://hooks.slack.com/services/${apikey}`
// call Slack API
我正在使用 Polymer + Firebase 开发 Web 应用程序。在我的应用程序中,我试图将它集成到 Slack 中。为了从 Slack 获取访问令牌,我需要使用客户端密钥(由 Slack 生成)对 Slack 进行 api 调用。
问题是,where/how 我应该存储这个客户端密钥吗?在我的 Polymer 应用程序中硬编码这个密钥听起来确实是一个很大的安全性,不,不。
谢谢。
在您的客户端代码中存储秘密听起来是个很糟糕的主意。任何恶意用户都可以在那里获取它。
需要在客户端访问机密的任何其他方式同样存在缺陷。
唯一的解决方案是不需要客户端上存在秘密的解决方案,因此涉及 运行在受信任位置中安装代码的解决方案。通常这将是一台服务器,但不要高估 运行 此类代码所需的硬件数量。在这种情况下需要服务器是为了信任,而不是为了更大的硬件。
参见此 article about common application architectures on Firebase 中的模式 2。
像 API 密钥这样的秘密应该只能由您的服务器代码访问,如果保存到文件,则使用 .gitignore
规则从您的源代码中排除。
- 使用
firebase config:set
存储您的 Firebase 项目 API 键。 - 自己创建一个 serverless function,它使用 API 密钥供您的浏览器客户端代码使用。
- 通过检查身份验证/角色/权限(可选/推荐)来安全访问新的无服务器功能API
更好……只需从您的无服务器函数中调用 Slack API,并且根本不要将密钥暴露给您的浏览器客户端用户。
示例:
$ firebase functions:config:set myapp.apikey=XXX
然后在本地模拟器或部署的代码中你可以使用:
const functions = require('firebase-functions');
const apikey = functions.config().myapp.apikey;
const url = `https://hooks.slack.com/services/${apikey}`
// call Slack API