IIS - AddDataProtection PersistKeysToFileSystem 未创建

标签 iis asp.net-core dpapi

我正在开发一个 asp.net 核心应用程序来调谐网络,并且我正在使用“AddDataProtection”来保护静态 key 加密,就像文档建议的那样,但是当我部署我的应用程序并直接运行时从具有 AppPool 身份的 IIS 中,从未创建 key ,并且我在 DpapiNG 窗口日志中收到错误。

我的代码如下:

services.AddDataProtection(opt => opt.ApplicationDiscriminator = ApplicationConfig.dataProtectionApplicationDiscriminator)
            .PersistKeysToFileSystem(new DirectoryInfo(encKeyPath))
            .ProtectKeysWithDpapiNG(string.Format("CERTIFICATE=HashId:{0}", ApplicationConfig.dataProtectionCertThumbprint),
                flags: DpapiNGProtectionDescriptorFlags.None);

从 visual studio 调试,一切运行正常,但我在管理员权限下运行 VS,所以这里权限不是问题。

我已经尝试直接从 MMC 向 AppPool 应用程序用户添加权限到它自己的私钥,但它没有用,甚至授予了该位置的完整路径的权限, key 应该像此处所述那样创建https://learn.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview (检查第一条评论)但它也没有用。

我只能通过将 AppPool 设置为以管理员身份运行来使其工作,但显然这是不行的,我只是想确保这是某个地方的权限问题。

是否有人面临同样的问题可以提供帮助?

问候, 安德烈

最佳答案

您的问题很可能是您试图将 key 存储在您正在拼凑的文件夹路径中的某个位置(或者甚至通过使用 AddDataProtection 提供的默认路径),该文件夹路径使用诸如 %LOCALAPPDATA% 的环境路径。示例:“%LOCALAPPDATA%\ASP.NET\DataProtection-Keys”。 通常,默认情况下 IIS 不会使用 %LOCALAPPDATA% 等环境路径变量设置您的应用程序池帐户。该值最终为空,然后您的应用会尝试将 key 写入错误的文件夹(例如\ASP.NET\DataProtection-Keys 而不是 %LOCALAPPDATA%\ASP.NET\DataProtection-Keys)。

修复:在 %WINDIR%\System32\inetsrv\config\applicationHost.config 中设置 setProfileEnvironment=true。我认为您还必须重新启动 IIS。

关于IIS - AddDataProtection PersistKeysToFileSystem 未创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44714438/

相关文章:

c# - Windows Server 2012 内存限制上的 IIS 工作进程

asp.net - ASP.NET/IIS(或 Cassini 或 IIS Express)中有多少种用户类型及其实际角色?

c++ - Visual Studio 2017 .Net Core 2.0 Angular 发布失败

c# - 为什么不使用 DPAPI 加密所有设置而不是只加密主密码?

iis - 503 错误,由事件查看器(事件日志)中的 `iis_ssi.dll failed to load` 引起

iis - IIS 8中的Websockets反向代理

asp.net-core - 从 appsettings.json 文件读取原始 URL 会导致错误请求

Asp.Net Core 1.0(又名 Asp.Net 5)网站会因任何文件更改而刷新吗?

.net - DPAPI 和 ProtectedData.Protect() 如何处理 .net 4 中的磁盘镜像/克隆?

c# - 尝试在 C# 中的 KeyContainer 上设置权限无效