首页 > 解决方案 > 从 IIS 运行时出现 DPAPI CryptographicException

问题描述

我有一个.NET Core 2.0托管在 IIS 上的服务。我使用 DPAPI 加密/解密一些字符串,这些字符串在开发环境中有效,并且在直接使用 . 启动时有效dotnet application.dll,但在 IIS 上无效。

以下

Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector protector;
...
protector.Protect(somevalue); // <--

抛出异常:

Error occurred during a cryptographic operation.

堆栈跟踪:

 
   在 Microsoft.AspNetCore.DataProtection.Cng.DpapiSecretSerializerHelper.ProtectWithDpapiCore(字节* pbSecret,UInt32 cbSecret,字节* pbOptionalEntropy,UInt32 cbOptionalEntropy,布尔 fLocalMachine)
   在 Microsoft.AspNetCore.DataProtection.Cng.DpapiSecretSerializerHelper.ProtectWithDpapi(ISecret 秘密,布尔值protectToLocalMachine)
   在 Microsoft.AspNetCore.DataProtection.XmlEncryption.DpapiXmlEncryptor.Encrypt(XElement plaintextElement)
   在 Microsoft.AspNetCore.DataProtection.XmlEncryption.XmlEncryptionExtensions.EncryptIfNecessary(IXmlEncryptor 加密器,XElement 元素)
   在 Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager.Microsoft.AspNetCore.DataProtection.KeyManagement.Internal.IInternalXmlKeyManager.CreateNewKey(Guid keyId,DateTimeOffset creationDate,DateTimeOffset activationDate,DateTimeOffset expirationDate)
   在 Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager.CreateNewKey(日期时间偏移激活日期,日期时间偏移过期日期)
   在 Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.CreateCacheableKeyRingCore(DateTimeOffset 现在,IKey keyJustAdded)
   在 Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.Microsoft.AspNetCore.DataProtection.KeyManagement.Internal.ICacheableKeyRingProvider.GetCacheableKeyRing(DateTimeOffset 现在)
   在 Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider.GetCurrentKeyRingCore(DateTime utcNow)
   在 Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Protect(字节 [] 纯文本)
   在 Microsoft.AspNetCore.DataProtection.DataProtectionCommonExtensions.Protect(IDataProtector 保护器,字符串纯文本)
   ...

将应用程序池身份从ApplicationPoolIdentity本地用户更改为没有明显的效果。

我该如何解决/解决这个问题?

编辑:当我指定管理员帐户时,一切都按预期工作。但是,出于显而易见的原因,我不想将管理员帐户用于服务。普通帐户对此缺少哪些权限?

标签: .netiis.net-coredpapi

解决方案


推荐阅读