Kubernetes + Redis:防伪令牌无法解密

时间:2019-11-13 13:49:09

标签: c# asp.net-core kubernetes antiforgerytoken

我正在使用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());
});

1 个答案:

答案 0 :(得分:0)

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

services.AddDataProtection()
    .PersistKeysToStackExchangeRedis(redis, "DataProtection-Keys")
    .SetApplicationName("product");
  

默认情况下,数据保护系统将应用程序彼此隔离   基于他们的内容根路径,即使他们共享相同的根路径   物理密钥库。这会阻止应用了解   对方的有效载荷。

     

要在应用之间共享受保护的有效负载:

     
      
  • 在每个应用中为SetApplicationName配置相同的值。
  •   

https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-3.0

对此还需要进一步说明。如果您收到400错误请求,并且在同一解决方案中使用API​​,则建议您查看IgnoreAntiforgeryToken属性,以装饰不适用CSRF的方法。

[HttpPost]
[IgnoreAntiforgeryToken]