我正在使用VS 2022与dotnet核心网络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"));
这段代码在IIS express中运行得非常好,但是当我在IIS中托管时,我得到了下面的错误。
未处理的异常。系统。安全性。加密。加密异常:在密钥环中找不到密钥{....}。有关详细信息,请转到Microsoft上的http://aka.ms/dataprotectionwarning. AspNetCore. DataProtection. KeyManagement. KeyRingBasedDataProtector. UnprotectCore(Byte [] protectedData,布尔值allowOperationsOnRevokedKeys,UnprotectStatus &状态),位于Microsoft. AspNetCore.数据保护.密钥管理.基于密钥环的数据保护器. Unprotect Microsoft中的(Byte [] protectedData)。AspNetCore。数据保护。数据保护公用扩展。取消保护(ID数据保护器保护器,字符串保护数据)
请帮助我解决这个问题,我在DotNet Core 6中找不到任何类似的问题。从DotNet Core 5到6的"ConfigureServices"中有一些变化。我设法使它在6中工作,但它只在调试模式下工作。在托管到IIS后,不工作。
另外,当我把项目移到一个新文件夹时,发现以前加密的数据无法解密。不知道为什么会这样。我忘记捕获异常。
- 编辑除上述内容外,在IIS Express中运行时加密的数据无法在IIS中运行时解密。有人遇到过同样的问题吗?我在IIS中托管后刚刚尝试加密和解密,它工作正常,没有发现类似在密钥环中找不到密钥{....}**的异常但我可能必须连接代码库并调试从IIS中托管的应用程序加密的数据。
谢谢。
2条答案
按热度按时间b5buobof1#
以下步骤应可解决此问题:
1.在IIS管理器、应用程序池、高级设置...中,将标识更改为内置帐户:网络服务。
1.在IIS管理器、应用程序池、高级设置...中,将“加载用户配置文件”更改为True
1.重新启动IIS服务器。
mutmk8jj2#
我在跨程序传输数据时遇到了类似的问题。它在本地运行,but.net核心阻止在服务器上托管时检索加密值。当我添加数据保护文件存储时,它运行。
您可以根据需要使用文件存储、数据库存储、redis和azure存储。(https://learn.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers?view=aspnetcore-7.0&tabs=visual-studio)