我必须将密钥保存到项目和存储库之外。为此,我想使用User secrets。但这是写在这里,
仅当应用程序在开发环境中运行时才调用AddUserSecrets,如以下示例所示
我无法理解或找到原因。为什么我不能在生产环境中使用它?
答案 0 :(得分:3)
您可以在提供给“用户秘密”文档的链接中找到它:
Secret Manager工具不会加密存储的机密,并且 不应被视为受信任的商店。这是为了发展 只要。键和值存储在JSON配置文件中 用户个人资料目录。
答案 1 :(得分:1)
用户机密基本上是用户目录中某个地方的JSOn
文件。这在您的开发PC上效果很好。但是在生产系统上,通常应通过更多可用于生产的配置系统(例如Environment Variables
,appsettings.json
或azure keyvault
)注入值。默认情况下,Envs
和appsettings
已被激活。
答案 2 :(得分:1)
我认为简短的答案是,如果您愿意的话,您可能会这样做,但这不是它的初衷。
我的理解是用户机密的主要目的是使凭据不受源代码控制。在GitHub和云发布之前的几天里,大多数开发人员只是将所有凭据都保留在web.config中,并且大多数情况下都可以。然后,许多人开始使用公共存储库和AWS,突然之间https://www.zdnet.com/article/trufflehog-high-entropy-key-hunter-released-to-the-masses/
现在有许多用于管理机密的工具,最适合您需要的是一个很难解决的问题,但是您可以考虑:
我只是在CreateDefaultBuilder
方法中闲逛,发现了这一点,这可能是相关的:
if (hostingEnvironment.IsDevelopment())
{
Assembly assembly = Assembly.Load(new
AssemblyName(hostingEnvironment.ApplicationName));
if (assembly != (Assembly) null)
config.AddUserSecrets(assembly, true);
}
很显然,您不必使用默认版本,并且可以为所有环境添加机密,但是确实存在。
答案 3 :(得分:1)
这是仅开发时间的工具。将任何类型的机密存储在文件中都是有风险的,因为您可能会意外地将其检入。在生产中,例如,您可以使用环境变量来保存机密(或任何其他更安全的机制。)
虽然环境变量是Web开发中最常用的选项之一,但出于某些原因,这可能不是最佳方法:
1。该环境隐式可用于该进程,并且很难跟踪访问。因此,例如,您可能会遇到错误报告中包含机密的情况
2。整个环境向下传递到子进程(如果未明确过滤)。因此,您的秘密密钥将隐式地提供给可能使用的任何第三方工具。
所有这些都是如今Vault之类的产品变得流行的原因之一。
因此,您可以使用环境变量,但要注意。