java - 我应该把凭据放在哪里:application.properties vs system env variables
问题描述
在我的 Spring Boot 项目中,我应该将凭据放在哪里以使用不同的服务,例如数据库或消息队列的用户名/密码,或 JWT 密钥?
我应该把它放在系统环境变量中吗?或在 application.properties 中?哪个更安全?考虑到两者都是纯文本?
对于 JWT 令牌,我在操作系统中使用以下命令在启动服务器之前更新值:
export MONEYLIZER_JWT_SECRET_KEY=$(echo -n "somevalue" | openssl sha512 -hmac "somekey")
所以它并不总是恒定的。application.properties
没有给我这种灵活性。
商业服务通常做什么?我应该在哪里保存凭据和设置?
解决方案
环境变量绝对比 application.properties 中的纯文本更安全
典型的基于 Sping 的部署会遇到配置被硬编码到代码存储库的应用程序属性文件中的问题。这对于模块化您的代码库非常有用,因此可以将其传输到多个环境。但是,它确保您的代码还具有明文密码、api 密钥和其他不应在 VCS 存储库中或以任何方式分发的数据。
为了锁定代码库本身的安全性,我们决定将代码库中的所有密码、api 密钥和其他机密数据外部化。Spring 非常容易做到这一点,它提供了在启动时将配置指定为环境变量的选项,或者将外部应用程序属性文件指定给 init 脚本或 CLI 调用。
推荐阅读
- amazon-web-services - S3 中 Parquet 清单中的 Redshift 副本失败,并说 MANIFEST 参数需要 S3 对象的完整路径
- laravel - Laravel Eloquent with() 选择特定列不返回结果
- python - Python 打印格式建议
- alpha - DIB 使用 alpha 混合绘制重叠圆圈
- r - 将 10 列中的数据转换为一些行
- inno-setup - 如何在 Inno Setup 中正确编写下一个逻辑表达式?
- javascript - 超链接不适用于 ajax / jquery?
- python - Python多处理性能问题
- javascript - 通过比较两个条件删除嵌套数组对象
- c# - 语音识别和文本到语音