如何在ASP.NET MVC Core 2中禁用防伪标记检查

13

我试图避免进行“防伪检查”,因为当从第三方服务器托管时,它总是失败。 我正在使用ASP.NET Core 2.0 MVC应用程序。

我在ConfigureServices函数中添加了此选项:

services
    .AddMvc()
    .AddRazorPagesOptions( options =>
    {
        options.Conventions.AuthorizeFolder("/Account/Manage");
        options.Conventions.AuthorizePage("/Account/Logout");
        options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
    } );

但是我仍然遇到了这个异常。

System.InvalidOperationException:防伪令牌无法解密。
System.Security.Cryptography.CryptographicException:在密钥环中找不到键{6fb328e7-4808-4b5d-b7dc-870d126e5ca4}。

我有什么遗漏吗?


“当从第三方服务器托管时,它总是失败” - 也许修复那个问题而不是禁用有用的安全功能是更好的主意。在另一个服务器上发生了什么导致它出现故障? - Dai
2
当从第三方IIS服务器托管时,整个令牌系统和防伪系统都无法正常工作。我已经提交了一个错误报告并提交了日志。由于这是测试,我只想从应用程序中删除防伪系统。我进行了一些研究,并在configureservice函数中添加了那行代码。但是应用程序仍在检查令牌。不确定如何禁用它。有什么建议吗? - Adam
你的应用程序是否仅使用RazorPages?如果你正在使用完整版本的ASP.NET Core的MVC功能或其他功能,则不会在“AddRazorPagesOptions”下,而是在其他地方。 - Dai
4个回答

6

IgnoreAntiforgeryToken属性(顺序必须>1000)添加到Razor页面模型中:

例如:

namespace CWACpch.Pages
{
    [IgnoreAntiforgeryToken(Order = 2000)]
    public class CreateOrderModel : PageModel
    {

那个可行 - 这确实感觉像是一个“变通方法”,这可能会暴露应用程序的安全漏洞。然而,我想要运行一个演示,在其中(如上所述)第三方执行表单POST。 - From Orbonia

3

一直在寻找如何禁用Cookie,但设置“Order”对我没有帮助,尝试通过以下方式将其设置为所有页面也不起作用。

options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());

我最终找到了下面的文章,它有助于本地删除cookie。在Startup.cs中添加以下行。

禁用.AspNetCore.Antiforgery Cookie
services.AddAntiforgery(options => { options.Cookie.Expiration = TimeSpan.Zero;});

1
根据我的理解,您不需要禁用任何内容。默认情况下,如果您使用asp net标记助手创建表单元素,它将放置反伪造令牌。
您可以通过在操作方法中使用[ValidateAntiforgeryToken]注释或全局定义配置来验证反伪造令牌,这取决于您,后者将使系统尝试验证反伪造令牌。
如果您没有像上述那样配置系统,则系统不会验证反伪造令牌,并且不会对您的情况造成问题。

我在代码中到处都有这个数据注释([ValidateAntiforgeryToken])。当我进入生产环境时,我需要它。但是在测试期间,我想要抑制“防伪验证”检查。所以我添加了这行代码(options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());)。但是应用程序仍然给我这个异常(The antiforgery token could not be decrypted. System.Security.Cryptography.CryptographicException:)。我的问题是为什么它仍然在检查? - Adam

0

如果有其他人在 NET 6 中遇到了这个问题;

services.AddAntiforgery(options => { options.SuppressXFrameOptionsHeader = true; });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接