我的ASP.Net核心MVC应用程序添加了 Antiforgery 中间件,如下所示:
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:防伪令牌不可能 解密。 ---&GT; System.Security.Cryptography.CryptographicException: 未找到密钥{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} 钥匙圈。
我找到了一个解决方案,建议在web.config中设置一对静态验证/解密密钥,但似乎这个解决方案仅适用于经典的asp.net应用程序。我该怎么做ASP.Net核心?
答案 0 :(得分:5)
我在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 :(得分:0)
之所以这样,是因为我开始在本地主机端口上使用该应用程序,然后尝试在具有相同端口的docker中使用它。到那时,我已经有了cookie,它指定了我的机器生成的密钥,因此它在docker上不起作用。
TL; DR (如果您曾经从其他计算机上使用过该域/端口)清除cookie。
答案 2 :(得分:0)
对我来说(在DEV环境中)正在清除浏览数据。清除之前,我只能通过浏览器隐身模式访问带有此错误的页面。
答案 3 :(得分:0)
对我有用的是使用新的用户帐户而不是NETWORK SERVICE,因为错误消息包括:
System.UnauthorizedAccessException:拒绝访问路径“ C:\ Windows \ system32 \ config \ systemprofile”。
答案 4 :(得分:-2)
我在 azure 上运行 .net core 5 应用程序的 linux 容器中遇到了类似的问题,并以私有模式打开浏览器解决了这个问题。