微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net-core – 如何使用环境变量在ASP.NET Core 2.0中存储生产机密?

根据我读过的 here,建议使用secrete管理器在开发期间存储机密,然后在部署到IIS时使用环境变量.我不太清楚最好的方法是什么 – 我需要能够在不同的IIS应用程序中将相同的变量设置为不同的值,因此系统范围的环境变量设置不起作用.

我知道我可以在web.config中为应用程序设置变量,但是VS会覆盖服务器上的web.config,即使在进行Web部署时项目中没有web.conifg也是如此.我知道使用Web部署来部署到生产可能不是一个好习惯,但我们希望将其用于暂存环境等.

有没有办法阻止Web部署覆盖web.config,如果它已经存在于目标站点上?

解决方法

ASP.NET Core不使用Web.config.它是作为发布的一部分添加的,仅用于与IIS中的托管兼容.您无意以任何有意义的方式修改或使用它.

ASP.NET Core中配置提供程序的内置选项包括:JSON,命令行参数,用户秘密,环境变量和Azure Key Valult.但是,User Secrets仅用于开发,并且在IIS中托管时难以使用命令行参数. (从技术上讲,您实际上可以修改Web.config添加命令行参数,但如上所述,这将在下一次发布时被覆盖,因此它不是最稳定的方法.)

在剩余的JSON,环境变量和Azure Key Vault选项中,只有Azure Key Vault支持加密.无论您是否实际在Azure中托管,都可以使用Azure Key Vault,但它不是免费的.不过,它也不是很贵,所以值得深入研究.

在安全方面,JSON可能是最糟糕的选择,主要是因为它要求您实际将秘密存储在源控件中,而源控件是(或应该是)非启动器.环境变量虽然未加密,但可以得到保护.但是,如果相同的环境变量需要不同的秘密,那么在同一台服务器上运行多个应用程序很困难(尽管技术上并非不可能).您可以在技术上在用户级别设置环境变量,然后您还可以指定应用程序池以作为特定用户运行.虽然这有很多设置.

也就是说,完全可以创建自己的配置提供程序,这意味着您可以在技术上使用您喜欢的任何内容.例如,您可以编写sql Server配置提供程序,然后将凭据存储在那里.您仍然需要在某处配置连接字符串,但也许您可以为所有站点的配置使用相同的连接字符串.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐