C# ASP.NET core 2.2 web api记录与数据保护密钥相关的警告:我们应该如何处理此问题?
我们有一个ASP.NET core 2.2 web应用程序,它公开了一些web api控制器。 我们的应用程序没有任何类型的身份验证机制,所有公开的端点都可以由匿名用户调用 当我们在IIS下托管应用程序时,在应用程序启动时会收到三条奇怪的警告消息。以下是我们得到的日志:C# ASP.NET core 2.2 web api记录与数据保护密钥相关的警告:我们应该如何处理此问题?,c#,iis,asp.net-core,data-protection,C#,Iis,Asp.net Core,Data Protection,我们有一个ASP.NET core 2.2 web应用程序,它公开了一些web api控制器。 我们的应用程序没有任何类型的身份验证机制,所有公开的端点都可以由匿名用户调用 当我们在IIS下托管应用程序时,在应用程序启动时会收到三条奇怪的警告消息。以下是我们得到的日志: 使用内存存储库。密钥将不会持久化到存储 用户配置文件和HKLM注册表均不可用。使用临时密钥存储库。应用程序退出时,受保护的数据将不可用 没有配置XML加密程序。密钥{GUID}可以以未加密的形式持久化到存储器中 所有这些日志都将
- 名为“key”的日志中报告的GUID是什么?它的用途是什么
- 是否存在与此警告相关的安全风险
- 我应该采取行动吗李>
我们选择在MongoDB中实现持久密钥环。可以找到一些细节。我不能在这里显示代码(该项目不是开源的),但我们基本上从官方开始,用注入的
IMongoCollection
替换了entity framework db上下文的所有用法。我们还通过删除Id属性进行了修改(我们更喜欢让MongoDB生成自己的对象Id) 数据保护由各种组件用于在运行时加密数据,例如:
- 验证cookies
- 身份密码重置令牌
您还可以在应用程序文件夹外配置存储位置。如果您未使用任何身份验证机制(例如:使用此类型密钥的ASP.NET Core Identity),并且如果您未在其他地方使用DataProtection API,您现在就可以使用了 那里发生了什么事? 您输入了用于存储密钥的回退机制(内存存储)。当应用程序重新启动时,您将丢失密钥 您可以面对哪些问题? 示例:如果您使用的是身份验证机制,那么最终会出现错误的身份验证cookie、电子邮件验证令牌、重置密码令牌等 您现在可以做什么? 如果您想要(经得起未来考验的解决方案),您可以将密钥存储在某个位置(例如:Redis)
进一步阅读:ASP.Net core DataProtection将密钥存储在主目录(/root/.aspnet/DataProtection密钥)中,因此当容器重启密钥丢失时,可能会导致服务崩溃 这可以通过在
- 在永久位置(卷)上保留密钥并装载该卷 装卸集装箱
- 在外部密钥存储(如Azure或Redis)中保留密钥
docker run -d -v /c/temp-keys:/root/.aspnet/DataProtection-Keys container-name
此外,您需要更新Starup.cs-ConfigureServices以配置数据保护策略
services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(@"C:\temp-keys\"))
.UseCryptographicAlgorithms(new AuthenticatedEncryptorConfiguration()
{
EncryptionAlgorithm = EncryptionAlgorithm.AES_256_CBC,
ValidationAlgorithm = ValidationAlgorithm.HMACSHA256
});
您所说的cookie是ASP.NET identity使用的cookie,用于序列化主体并在请求之间维护用户标识?是的,我正在谈论这些:)我们不使用任何身份验证,甚至不在启动类中调用app.UseAuthentication()。也就是说,我想我们可以根据您的解释安全地忽略警告是的,只是注意与数据保护相关的异常,以防您使用的某些东西在您不知情的情况下使用数据保护。因此,如果我理解得很好,在您不需要授权cookie的情况下,电子邮件地址验证和/或密码重置(换句话说,ASP.NET identity提供的一组功能),您可以安全地忽略警告。它是