Enr*_*one 7 c# iis data-protection asp.net-core
我们有一个 ASP.NET core 2.2 web 应用程序,它暴露了一些 web api 控制器。我们的应用程序没有任何类型的身份验证机制,所有暴露的端点都可以由匿名用户调用。
当我们在 IIS 下托管应用程序时,我们会在应用程序启动时收到三个奇怪的警告消息。这些是我们得到的日志:
所有这些日志都将 Microsoft.AspNetCore.DataProtection 作为日志上下文,并由 ASP.NET 核心框架内部编写。
这些日志的含义对我来说似乎很清楚:有一个“密钥”(无论它意味着什么),因为没有提供注册表存储(当然,它会在应用程序退出时丢失)将持久保存在内存中)。还有一个警告表明这个密钥,如果持续存在,将不会以任何方式加密。
此时我会问以下问题:
一些附加信息:
一些在线博客建议这些类型的数据保护警告与 ASP.NET 身份的使用有关,但我们不在我们的应用程序中使用身份(我们没有启用身份验证)。其他博客建议设置托管应用程序池以加载用户配置文件:我已经尝试过,但警告仍然存在。
感谢 asp.net 核心开发团队的帮助,我解决了这个问题。完整参考见我昨天打开的github issue
简而言之,问题与我的开发机器上的 IIS 配置有关。为了使 ASP.NET 核心数据保护按预期工作,IIS 和托管应用程序池有一些特定配置(请参阅此处获取完整参考)
对于在其 ASP.NET core 2.2 web 应用程序中具有相同警告的那些,我建议查看此github 问题。
我们现在已经为我们的产品添加了 cookie 身份验证,我们需要支持 kubernetes 托管。在具有 cookie 身份验证的 kubernetes 中,此 stackoverflow 问题中讨论的警告是相关的,因为您必须为 ASP.NET 核心提供一个存储 ASP.NET 核心数据保护系统所需的密钥的地方。
我们选择在 MongoDB 中实现持久密钥环。可以在此处找到一些详细信息。我这里不能展示代码(该项目不是开源的),但我们基本上是从官方实体框架核心密钥环存储开始,将实体框架数据库上下文的所有用法替换为注入的IMongoCollection<DataProtectionKey>. 我们还通过删除 Id 属性修改了 DataProtectionKey 类(我们更喜欢让 MongoDB 生成自己的对象 ID)。
各种组件使用数据保护在运行时加密数据,例如:
您可以在文档中阅读更多相关信息:https : //docs.microsoft.com/en-us/aspnet/core/security/data-protection/introduction
您正确理解了警告,它创建了一个密钥,但无法决定将密钥存储在哪里。因此,如果应用程序重新启动,它将丢失。如果您不使用例如身份验证 cookie,您可以忽略这些警告。您还可以配置应用程序文件夹之外的存储位置。
| 归档时间: |
|
| 查看次数: |
4087 次 |
| 最近记录: |