.net - 从 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
本地用户更改为没有明显的效果。
我该如何解决/解决这个问题?
编辑:当我指定管理员帐户时,一切都按预期工作。但是,出于显而易见的原因,我不想将管理员帐户用于服务。普通帐户对此缺少哪些权限?
解决方案
推荐阅读
- zlib - 在 MacOS Catalina 上安装 Kaldi -- zlib 出错
- google-play - 发布应用需要同一个账号吗?
- javascript - 在列表中有两个辅助操作元素
- kotlin - .getDefaultInstance() 和 .newBuilder().build() 之间有区别吗?
- swift - CoreBluetooth CBCentralManager 即使从 stateUpdateHandler 的案例 .poweredOn 中解包,也会解包为 nil。知道为什么吗?
- php - 在 WooCommerce 预订中用于取消预订的挂钩是什么?
- python - Scipy 最小化具有多个约束
- r - 当特定列相等时所有行的总和-R中的-data.frame
- c++ - 把课堂传进课堂
- reactjs - 在 React 测试站点上阻止 Chrome 自动填充电子邮件/密码?