Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 库伯内特斯+;Redis:无法解密反伪造令牌_C#_Asp.net Core_Kubernetes_Antiforgerytoken - Fatal编程技术网

C# 库伯内特斯+;Redis:无法解密反伪造令牌

C# 库伯内特斯+;Redis:无法解密反伪造令牌,c#,asp.net-core,kubernetes,antiforgerytoken,C#,Asp.net Core,Kubernetes,Antiforgerytoken,我在Kubernetes的.NETCore3.0上使用Redis数据库进行数据保护,但仍然得到以下错误。有什么想法吗 失败:Microsoft.AspNetCore.Antiforgery.DefaultAntiforgery[7] 反序列化令牌时引发异常。Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException: 无法解密反伪造令牌。--> System.Security.Cryptography.CryptographyE

我在Kubernetes的.NETCore3.0上使用Redis数据库进行数据保护,但仍然得到以下错误。有什么想法吗

失败:Microsoft.AspNetCore.Antiforgery.DefaultAntiforgery[7] 反序列化令牌时引发异常。Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException: 无法解密反伪造令牌。--> System.Security.Cryptography.CryptographyException:密钥 在钥匙圈中未找到{ffb146a1-0e5e-4f96-8566-425f7c2eb99a}。 在 Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(字节[]) protectedData,布尔allowOperationsOnRevokedKeys,UnprotectStatus& 状态)在 Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(字节[]) protectedData,布尔值ignoreRevocationErrors,布尔值& requiresMigration,Boolean&wasrecaded)位于 Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Unprotect(字节[]) 保护数据)在 Microsoft.AspNetCore.Antiforgery.DefaultAntiforgeryTokenSerializer.Deserialize(字符串 serializedToken)--内部异常堆栈跟踪的结束---at Microsoft.AspNetCore.Antiforgery.DefaultAntiforgeryTokenSerializer.Deserialize(字符串 (说)在 Microsoft.AspNetCore.Antiforgery.DefaultAntiforgery.GetCookieTokenDoesNotThrow(HttpContext httpContext)


根据下面文章中的文档,需要设置应用程序名称

services.AddDataProtection()
    .PersistKeysToStackExchangeRedis(redis, "DataProtection-Keys")
    .SetApplicationName("product");
默认情况下,数据保护系统将应用程序彼此隔离 基于它们的内容根路径,即使它们共享相同的内容根路径 物理密钥存储库。这会阻止应用程序理解 相互保护的有效载荷

要在应用程序之间共享受保护的有效负载,请执行以下操作:

  • 在每个应用程序中使用相同的值配置SetApplicationName

请进一步说明。如果您收到400个错误请求,并且在同一解决方案中使用API,那么我建议您查看IgnoreAnformeryToken属性,以装饰CSRF不适用的方法

[HttpPost]
[IgnoreAntiforgeryToken]

我不熟悉Kubernetes,但是在普通的ASP.NET中,如果一个服务器场中有多个服务器,那么每个服务器都必须使用相同的机器密钥,以便它们能够解密由服务器场中其他服务器加密的内容,所以我猜这是类似的。请看一看感谢您的回复,我找不到对.net core 3.0+的机器密钥的引用,根据您的文章.net 2.0,它似乎已用于较旧版本的.net。
[HttpPost]
[IgnoreAntiforgeryToken]