未处理的异常。System.Security.Cryptography.CryptographicException:在密钥环中找不到密钥 {....}

use*_*423 6 c# data-protection visual-studio .net-core

我将 VS 2022 与 dotnet core Web api 结合使用,下面是我在 Program.cs 中用于数据保护的代码。

string appName = "My_WebAPI";
var dataProtectionProvider = DataProtectionProvider.Create(appName);
IDataProtector dataProtector = dataProtectionProvider.CreateProtector(ApplicationConstants.ENCRYPTION_KEY);
string DbContext = dataProtector.Unprotect(builder.Configuration.GetConnectionString("DbContext"));
Run Code Online (Sandbox Code Playgroud)

这段代码在 IIS Express 中运行得很好,但是当我在 IIS 中托管时,出现以下错误。

未处理的异常。System.Security.Cryptography.CryptographicException:在密钥环中找不到密钥 {....}。有关详细信息,请访问 Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[] protectedData, BooleanallowOperationsOnRevokedKeys, UnprotectStatus& status) 上的http://aka.ms/dataprotectionwarning Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Unprotect (Byte[] protectedData) 在 Microsoft.AspNetCore.DataProtection.DataProtectionCommonExtensions.Unprotect(IDataProtector 保护器,字符串 protectedData)

请帮我解决这个问题,我在 DotNet Core 6 中找不到任何类似的问题。“ConfigureServices”从 DotNet Core 5 到 6 发生了变化。我设法让它在 6 上工作,但它只在调试模式下工作。托管到IIS后,不起作用。

另外,当我将项目移动到新文件夹时,还观察到一件事,之前加密的数据无法解密。不知道为什么会这样。我忘记捕获异常了。

编辑 添加到上面,在 IIS Express 中运行时加密的数据在 IIS 中运行时无法解密。有人遇到过同样的问题吗?我刚刚尝试在 IIS 中托管后进行加密和解密,它可以正常工作,并且没有发现任何异常,例如在密钥环中找不到密钥 {....}但我可能必须连接我的代码库并调试从中加密的数据托管在 IIS 中的应用程序。

谢谢。

小智 2

以下步骤应该可以解决这个问题:

  1. 在 IIS 管理器、应用程序池、高级设置...中,将 Identity 更改为内置帐户:NetworkService
  2. 在 IIS 管理器、应用程序池、高级设置...中,将加载用户配置文件更改为True
  3. 重新启动 IIS 服务器。