我正在构建一个全栈MERN(MongoDB Express React Nodejs(应用程序。我正在使用NPM包Google Maps React在我的网站上显示谷歌地图。我很难想出一个策略来保护我的前端谷歌地图API密钥。
为了充分理解我的问题,查看下面的谷歌地图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模块文件进行了一些深入挖掘。我在谷歌地图react节点模块文件中找到了.env和.env.example文件。.env.example文件显示
GAPI_KEY=FILL_IN_YOUR_KEY_HERE
- 在googlemaps反应节点模块文件中存储api密钥
解决方案A 的问题
- 可能的解决方案不安全
- 用户可以访问API关键数据
解决方案B 的问题
- 节点模块是我的
.gitignore
文件的一部分,因此在部署应用程序时,google地图API密钥将不可用
感谢您的想法和时间。
PS我用创建反应应用
您有各种选项可以安全地存储api密钥。如果将CircleCi用于连续生成,则可以创建环境密钥。请检查您的构建解决方案是否有类似的内容。
还有一些加密文件(如gitsecret(的替代方案。这样就可以使用环境配置文件。
最重要的是,除非您对密钥进行了加密,否则不要将密钥存储在代码或配置文件中。