我正在使用Redis数据库进行Kubernetes上.net core 3.0上的数据保护,但是仍然出现以下错误。有什么想法吗?
失败:Microsoft.AspNetCore.Antiforgery.DefaultAntiforgery [7] 反序列化令牌时引发异常。 Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException: 反伪造令牌无法解密。 -> System.Security.Cryptography.CryptographicException:密钥 在钥匙圈中找不到{ffb146a1-0e5e-4f96-8566-425f7c2eb99a}。 在 Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte [] protectedData,布尔allowOperationsOnRevokedKeys,UnprotectStatus& 状态) Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(Byte [] protectedData,布尔值ignoreRevocationErrors,布尔值& requireMigration,Boolean&wasRevoked) Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Unprotect(Byte [] protectedData)位于 Microsoft.AspNetCore.Antiforgery.DefaultAntiforgeryTokenSerializer.Deserialize(String serializedToken)-内部异常堆栈跟踪的结尾-在 Microsoft.AspNetCore.Antiforgery.DefaultAntiforgeryTokenSerializer.Deserialize(String serializedToken)在 Microsoft.AspNetCore.Antiforgery.DefaultAntiforgery.GetCookieTokenDoesNotThrow(HttpContext httpContext)
var redis = ConnectionMultiplexer.Connect(Environment.GetEnvironmentVariable("REDIS_CONNSTR"));
services.AddDataProtection().PersistKeysToStackExchangeRedis(redis, "DataProtection-Keys");
services.AddMvc(options =>
{
options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
});
答案 0 :(得分:0)
根据下面文章中的文档,需要设置应用程序名称。
services.AddDataProtection()
.PersistKeysToStackExchangeRedis(redis, "DataProtection-Keys")
.SetApplicationName("product");
默认情况下,数据保护系统将应用程序彼此隔离 基于他们的内容根路径,即使他们共享相同的根路径 物理密钥库。这会阻止应用了解 对方的有效载荷。
要在应用之间共享受保护的有效负载:
- 在每个应用中为SetApplicationName配置相同的值。
对此还需要进一步说明。如果您收到400错误请求,并且在同一解决方案中使用API,则建议您查看IgnoreAntiforgeryToken属性,以装饰不适用CSRF的方法。
[HttpPost]
[IgnoreAntiforgeryToken]