我有一个用Angular构建的项目。我想托管它,但它使用API KEY调用API。根据我的理解,没有办法从客户那里保护你的密钥。我一直在研究如何做到这一点,但我找不到任何有用的。
我想将这个小应用程序部署到Heroku来学习如何做到这一点。在我的环境中。我应该用.env文件中的变量替换值,构建应用程序,然后将键/值对添加到Heroku的配置变量中吗?
可以创建两个环境文件。一个用于开发一个用于生产:
environment.dev.ts:
export const environment = {
API_KEY: "XXX"
};
environment.prod.ts:
export const environment = {
API_KEY: process.env.API_KEY
};
在angular.cli.json中定义这些文件:
"environments": {
"dev": "environment.dev.ts",
"prod": "environment.prod.ts"
}
在package.json中为Heroku添加--prod
到postinstall
脚本:
"postinstall": "ng build --aot --prod"
最后,在Heroku仪表板中添加配置变量或使用Heroku -cli:
heroku config:set API_KEY=PROD_XXX
您考虑过为API调用创建后端吗?您的服务器可以充当中间人,对您的用户进行身份验证,并且只执行代码打算执行的API调用。不清楚你的应用程序中使用的是哪种API,但暴露不打算公开使用的API密钥可能是危险的(不像Firebase API密钥是公开的)。
无论如何,您都不应该通过配置文件存储硬编码的凭据或将凭据提交到存储库。基本步骤如下:- 在项目根目录下创建
.env
文件,并将其添加到.gitignore
中。这是针对local的发展。 - 设置生产在Heroku CLI或Dashboard中配置参数
- 更新
environment.ts
:
export const environment = {
...rest,
exampleApiKey: process.env.EXAMPLE_API_KEY,
};