ASP.NET core 2.2 web api 记录与数据保护密钥相关的警告:我们应该如何处理这个问题?

Enr*_*one 7 c# iis data-protection asp.net-core

我们有一个 ASP.NET core 2.2 web 应用程序,它暴露了一些 web api 控制器。我们的应用程序没有任何类型的身份验证机制,所有暴露的端点都可以由匿名用户调用。

当我们在 IIS 下托管应用程序时,我们会在应用程序启动时收到三个奇怪的警告消息。这些是我们得到的日志:

  1. 使用内存存储库。密钥不会被持久化到存储中。
  2. 用户配置文件和 HKLM 注册表都不可用。使用临时密钥存储库。应用程序退出时,受保护的数据将不可用。
  3. 未配置 XML 加密器。密钥 {GUID} 可以以未加密的形式保存在存储中。

所有这些日志都将 Microsoft.AspNetCore.DataProtection 作为日志上下文,并由 ASP.NET 核心框架内部编写。

这些日志的含义对我来说似乎很清楚:有一个“密钥”(无论它意味着什么),因为没有提供注册表存储(当然,它会在应用程序退出时丢失)将持久保存在内存中)。还有一个警告表明这个密钥,如果持续存在,将不会以任何方式加密。

此时我会问以下问题:

  • 日志中报告的名称为“key”的 GUID 是什么?用于什么?
  • 是否存在与此警告相关的任何安全风险?
  • 我应该采取什么行动?

一些附加信息:

一些在线博客建议这些类型的数据保护警告与 ASP.NET 身份的使用有关,但我们不在我们的应用程序中使用身份(我们没有启用身份验证)。其他博客建议设置托管应用程序池以加载用户配置文件:我已经尝试过,但警告仍然存在。

2019 年 4 月 2 日的重要更新

感谢 asp.net 核心开发团队的帮助,我解决了这个问题。完整参考见我昨天打开的github issue

简而言之,问题与我的开发机器上的 IIS 配置有关。为了使 ASP.NET 核心数据保护按预期工作,IIS 和托管应用程序池有一些特定配置(请参阅此处获取完整参考

2019 年 9 月 13 日更新

对于在其 ASP.NET core 2.2 web 应用程序中具有相同警告的那些,我建议查看此github 问题

我们现在已经为我们的产品添加了 cookie 身份验证,我们需要支持 kubernetes 托管。在具有 cookie 身份验证的 kubernetes 中,此 stackoverflow 问题中讨论的警告是相关的,因为您必须为 ASP.NET 核心提供一个存储 ASP.NET 核心数据保护系统所需的密钥的地方。

我们选择在 MongoDB 中实现持久密钥环。可以在此处找到一些详细信息。我这里不能展示代码(该项目不是开源的),但我们基本上是从官方实体框架核心密钥环存储开始,将实体框架数据库上下文的所有用法替换为注入的IMongoCollection<DataProtectionKey>. 我们还通过删除 Id 属性修改了 DataProtectionKey 类(我们更喜欢让 MongoDB 生成自己的对象 ID)。

juu*_*nas 7

各种组件使用数据保护在运行时加密数据,例如:

  • 身份验证 cookie
  • 身份密码重置令牌

您可以在文档中阅读更多相关信息:https : //docs.microsoft.com/en-us/aspnet/core/security/data-protection/introduction

您正确理解了警告,它创建了一个密钥,但无法决定将密钥存储在哪里。因此,如果应用程序重新启动,它将丢失。如果您不使用例如身份验证 cookie,您可以忽略这些警告。您还可以配置应用程序文件夹之外的存储位置。