用户配置文件和 HKLM 注册表均不可用。使用临时密钥存储库。应用程序退出时,受保护的数据将不可用
Posted
技术标签:
【中文标题】用户配置文件和 HKLM 注册表均不可用。使用临时密钥存储库。应用程序退出时,受保护的数据将不可用【英文标题】:Neither user profile nor HKLM registry available. Using an ephemeral key repository. Protected data will be unavailable when application exits 【发布时间】:2016-11-24 09:59:00 【问题描述】:我有一个没有特殊设置 DataProtection 堆栈的 Asp.NET Core 应用程序 - 只是 AddMvc。虽然在 IISExpress/(Kestrel) 上一切正常,但在 IIS 服务器上我收到了这个错误:
11/23/2016 18:50:14:warn: Microsoft.AspNetCore.Session.SessionMiddleware[7]
Error unprotecting the session cookie.
System.Security.Cryptography.CryptographicException: The key 6d00462a-ba7f-4f65-bb36-711605de93f2 was not found in the key ring.
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[] protectedData, Boolean allowOperationsOnRevokedKeys, UnprotectStatus& status)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(Byte[] protectedData, Boolean ignoreRevocationErrors, Boolean& requiresMigration, Boolean& wasRevoked)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Unprotect(Byte[] protectedData)
at Microsoft.AspNetCore.Session.CookieProtection.Unprotect(IDataProtector protector, String protectedText, ILogger logger)
11/23/2016 19:27:34:warn: Microsoft.Extensions.DependencyInjection.DataProtectionServices[59]
Neither user profile nor HKLM registry available. Using an ephemeral key repository. Protected data will be unavailable when application exits.
11/23/2016 19:27:34:warn: Microsoft.AspNetCore.DataProtection.Repositories.EphemeralXmlRepository[50]
Using an in-memory repository. Keys will not be persisted to storage.
11/23/2016 19:27:34:warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key 27c3297d-c583-4de5-b619-489bfba62407 may be persisted to storage in unencrypted form.
11/23/2016 19:27:35:warn: Microsoft.AspNetCore.Session.SessionMiddleware[7]
Error unprotecting the session cookie.
System.Security.Cryptography.CryptographicException: The key 3cbde8ae-2dba-4c84-ada3-20ba40bdff85 was not found in the key ring.
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[] protectedData, Boolean allowOperationsOnRevokedKeys, UnprotectStatus& status)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(Byte[] protectedData, Boolean ignoreRevocationErrors, Boolean& requiresMigration, Boolean& wasRevoked)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Unprotect(Byte[] protectedData)
at Microsoft.AspNetCore.Session.CookieProtection.Unprotect(IDataProtector protector, String protectedText, ILogger logger)
仅在某些用户登录后才会发生,而不是每次都发生。 我尝试谷歌但没有成功。
可能是第二台服务器上的某些 IIS 配置不同?谢谢。
【问题讨论】:
刚刚回答了一个类似的问题here 你解决过这个问题吗? 我认为升级到 Asp.Net Core 2.0 后它不再存在 【参考方案1】:这个问题源于 IIS 本身的一个错误,它可能会也可能不会 更正。为了解决此问题,您需要 编辑您的应用程序池以启用用户配置文件加载。一旦你设置 您的应用程序池以加载应用程序池的用户配置文件 身份,应用程序将有权读取和写入 符合预期的系统注册表。
原创article
简而言之,确保应用程序池加载用户配置文件:
下载 ps 脚本或其 .NET 模拟 here 像这样构建并以管理员身份运行它:
ProvisionAutoGenKeys.exe NetCoreAppPool
【讨论】:
以上是关于用户配置文件和 HKLM 注册表均不可用。使用临时密钥存储库。应用程序退出时,受保护的数据将不可用的主要内容,如果未能解决你的问题,请参考以下文章