【发布时间】:2018-12-31 13:28:38
【问题描述】:
有两个子问题:
-
我应该将秘密环境变量放在
environment.ts文件中吗? -
process变量 shim 消失了。如果我使用它,tsc会抛出错误:Cannot find name 'process'。
这是我的事:
关于 Q1:我认为将秘密环境变量放入 environment.ts 文件中是不正确的。因为这些文件会被推送到源代码管理,比如 GitHub、GitLab、bitbucket。这不安全。所以我认为秘密环境变量应该通过process.env传递,比如process.env.ACCESS_TOKEN,或者,如果使用docker-compose,应该将秘密环境变量放在.env文件中,并将这个文件添加到.gitignore文件中。
关于Q2:如果我使用Heroku 来设置我的环境变量,它取决于process 变量。现在,angular6 摆脱了process 的垫片,我该如何使用 Heroku?另外,使用 docker-compose 通过.env 文件传递环境变量也依赖于process。
如果使用.env 文件进行docker-compose,就会出现一个新问题:How to pass variables in .env file to angular6 environment.ts file
更新 1:
这是一个案例:
首先,没有后端
我使用 GitHub API 和另一个开放的 API,并且有一个名为 access_token 的环境变量,
如果我把这个放在environment.ts 文件中并将我的前端源代码推送到Github,Github 会检测到秘密信息并给我一个警告,他们说:
你不应该将 GitHub 访问令牌放在你的源代码中并将其推送到 repo,这样他们就会撤销我的访问令牌。
所以我想使用process.env.ACCESS_TOKEN,但是process 变量shim 在Angular6 中消失了,我该如何解决这个问题?我应该将environment.ts 文件添加到.gitignore 文件还是什么?
更新 2
这是另一个案例
继续更新 1。现在,我添加 docker-compose.yaml 和 Dockerfile 以在 docker 容器中运行我的前端应用程序。
这是工作流程:
-
写入
Dockerfile,运行npm run build命令并将./build目录复制到docker容器的nginx静态文件目录。./build目录包含index.html、bundle.js等文件。 -
将
access_token和其他秘密环境变量放入.env文件中。 -
运行
docker-compose up以在docker容器中运行我的应用程序。
我认为这个工作流程是可靠的。无需后端服务,.env 和.gitignore 中的秘密环境变量包含.env 文件,因此不会推送到Github repo。
但是,关键是process shim 不见了。我无法通过process获取环境变量。
更新 3
我认为我的问题集中在前端应用开发阶段。 我继续用上面的案例来解释。
为了准备好生产,工作流程是:
-
当 oauth 工作流程完成后,为 github oauth 创建一个后端服务。后端服务发送
access_token到前端。 -
前端登录成功,从后端服务获取
access_token并存储在localStorage或cookie中。不需要从process.env获取access_token
但对于开发阶段,前端和后端开发是分开的,以适应一般情况。所以,前端不应该依赖后端服务。
而且我不想在一开始就构建整个大系统。
所以我认为问题是:
在哪里存储秘密环境变量以及如何在Angular6 前端应用程序代码中获取?需要考虑几种情况:
- 使用 PaaS Heroku 配置变量
- Dockerized(docker-compose, Dockerfile),
.env文件。 - 没有后端服务。
- 将环境变量文件添加到
.gitignore,不要推送到SCM(Github、GitLab等)
【问题讨论】:
-
您的网站是否设计为公开的?访问令牌应该是公共信息吗?如果是,则将其构建到 JS 代码中;否则将其隐藏在后端服务器中。您可以在前端隐藏任何内容。
-
将敏感数据放在源代码中根本不是一个好主意(出于安全措施),看看如何设置外部环境变量smaillns.medium.com/…
标签: angular angular-cli angular6 angular-cli-v6