ASP.NET中使用的核心防伪和遇到错误 - 该防伪标记无法解密

问题描述 投票:4回答:3

我的ASP.Net MVC的核心应用程序添加了防伪中间件象下面这样:

startup.cs

services.AddMvc();
services.AddSession();
services.AddCaching();
services.AddSession(o =>
{
  o.IdleTimeout = TimeSpan.FromMinutes(120);
});
services.AddAntiforgery();

我在视图和控制器中加入以下

视图:

<form action="/Home/Login" method="post" id="staff-login" autocomplete="off">

@Html.AntiForgeryToken()

 ......

调节器

[HttpPost, ValidateAntiForgeryToken] 
public IActionResult Login(IFormCollection formCollection) 
{...}

问题是,用户总是得到下面,当用户遇到不同的形式。

System.InvalidOperationException:该防伪标记无法解密。 ---> System.Security.Cryptography.CryptographicException:密钥{XXXXXXXXXXXX-XXXXXXXX-XXXXXXXXXXXX}不是在键环找到。

我发现了一个解决方案,建议设置静态对验证/解密密钥在web.config中,但似乎这种解决方案仅适用于经典的asp.net应用程序。我应该如何在ASP.Net的核心呢?

c# asp.net asp.net-mvc antiforgerytoken
3个回答
10
投票

我已经对托管在一个Linux容器中的ASP .NET应用程序的核心正是这样的错误。

但即使对我是行不通的 - 从docs如果不符合特定标准的密钥只坚持的过程中它似乎。

首先使用默认设置发生错误。 然后我添加特定配置文件系统上的按键:

            services.AddDataProtection()
                .PersistKeysToFileSystem(new System.IO.DirectoryInfo(@"/var/my-af-keys/"));

这也没修好,我不得不设置应用程序的名称问题:

            services.AddDataProtection()
                .SetApplicationName("fow-customer-portal")
                .PersistKeysToFileSystem(new System.IO.DirectoryInfo(@"/var/dpkeys/"));

我还没有证实,但LXC托管其可能的性质意味着.NET核心不能坚持应用程序的身份。


1
投票

我有这个,因为我开始使用本地主机端口上的应用程序,然后试图在泊坞窗同一端口使用它。那时我有这样的指定由我的机器生成的密钥的cookie,所以它不会对码头工人的工作。

TL; DR清除Cookie,如果你曾经使用从其他机器域/端口。

© www.soinside.com 2019 - 2024. All rights reserved.