ASP.NET Core DataProtection + Redis +每台机器有多个键

时间:2018-08-10 09:52:50

标签: asp.net-core redis antiforgerytoken data-protection

我正在配置一个.NETCore项目,该项目将部署到Farm中。我遵循了所有有关添加DataProction的建议,因此我的代码如下:

services.AddMvc(
            options =>
                {
                    options.Filters.Add(typeof(AuditAttribute));
                    options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
                    options.AddStringTrimmingProvider();
                }); 
var redis = StackExchange.Redis.ConnectionMultiplexer.Connect(Configuration.GetValue<string>("MySuperApp:RedisConnectionString"));
            services.AddDataProtection()
                .SetApplicationName("MySuperApp")
                .ProtectKeysWithDpapi(true)
                .PersistKeysToRedis(redis, "DataProtection-Keys");

在开发人员中,我们只有一台服务器,可以正常工作。我们在Redis中只有一个条目,例如: Redis DEV

但是,当我们进行测试时,我们有两台服务器,其中有以下服务器:

enter image description here

此外,邮箱中存在以下错误

Exception Type: System.Security.Cryptography.CryptographicException
Exception Message: Error occurred during a cryptographic operation.
Stack Trace: at Microsoft.AspNetCore.DataProtection.Cng.DpapiSecretSerializerHelper.UnprotectWithDpapiCore(Byte* pbProtectedData, UInt32 cbProtectedData, Byte* pbOptionalEntropy, UInt32 cbOptionalEntropy)
at Microsoft.AspNetCore.DataProtection.Cng.DpapiSecretSerializerHelper.UnprotectWithDpapi(Byte[] protectedSecret)
at Microsoft.AspNetCore.DataProtection.XmlEncryption.DpapiXmlDecryptor.Decrypt(XElement encryptedElement)
at Microsoft.AspNetCore.DataProtection.XmlEncryption.XmlEncryptionExtensions.DecryptElement(XElement element, IActivator activator)
at Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager.Microsoft.AspNetCore.DataProtection.KeyManagement.Internal.IInternalXmlKeyManager.DeserializeDescriptorFromKeyElement(XElement keyElement)
Additional Info: An exception occurred while processing the key element ''.

有人可以帮我吗?我们是否缺少服务器上的某些配置?

谢谢

1 个答案:

答案 0 :(得分:0)

在这里,如果我们删除以下选项:.ProtectKeysWithDpapi(true)可以正常工作,则所有服务器都使用相同的密钥。