reactjs - 谷歌地图反应前端API密钥存储
问题描述
我正在构建一个完整的堆栈 MERN(MongoDB Express React Nodejs)应用程序。我正在使用 NPM 包Google Maps React在我的网站上显示谷歌地图。我很难想出一个策略来保护我的前端谷歌地图 API 密钥。
为了完全理解我的问题,查看下面的 Google Maps React 组件代码可能会有所帮助
import {Map, GoogleApiWrapper} from 'google-maps-react';
export class MapContainer extends Component {
render() {
return (
<Map google={this.props.google} >
</Map>
);
}
}
export default GoogleApiWrapper({
apiKey: (YOUR_GOOGLE_API_KEY_GOES_HERE)
})(MapContainer)
可能的解决方案
解决方案 A
- 将密钥存储在我的 Mongo 数据库中
- 向数据库发出 GET 请求以获取 google Maps API 密钥
- 将 API 密钥数据字符串放入谷歌地图组件中
解决方案 B
- 注意:我对 Google Maps React Node 模块文件进行了深入挖掘。我在谷歌地图反应节点模块文件中找到了 .env 和 .env.example 文件。.env.example 文件说
GAPI_KEY=FILL_IN_YOUR_KEY_HERE
- 将 api 密钥存储在谷歌地图反应节点模块文件中
对解决方案 A 的担忧
- 可能的解决方案不安全
- 用户可以访问 API 密钥数据
对解决方案 B 的担忧
- 节点模块是我的
.gitignore
文件的一部分,因此部署应用程序时 google maps API 密钥将不可用
感谢您的想法和时间。
PS我使用了create-react-app
解决方案
您有多种选择来安全地存储 api 密钥。如果您使用 CircleCi 进行连续构建,您可以创建一个environment key。检查您的构建解决方案是否有类似的东西。
还有加密文件的替代方法,例如git-secret。这样你就可以使用环境配置文件。
底线不要将密钥存储在代码或配置文件中,除非您对其进行了加密。
推荐阅读
- git - Git 错误无法打开日志文件进行跟踪:权限被拒绝
- operating-system - 内核模式是操作系统完全控制系统的时间吗?
- mysql - 两个sql select查询合二为一
- angular - 角度测试中的 tick() 和 flush() 有什么区别?
- java - Array.newInstance 和直接初始化有什么区别?
- android - 如何将检测测试和单元测试源集添加到现有的 Android Studio 项目
- java - 如何从 Java 中的字符串访问对象属性?
- php - 在 ajax 和控制器(laravel)中循环以使用不同的 ID 和令牌多次发布到端点
- node.js - Heroku 上的服务器请求中断 (H18)
- java - 检查所有 EditText 是否为空的问题