在ASP.NET 4.x和ASP.NET Core之间进行CSRF验证

问题描述

全部!

我想知道以下情况是否可行

  • 我想从asp.net 4.7向asp.net core 3.1发出发布请求。
  • asp.net 4.7和core都存在于同一IIS网站上。
  • asp.net 4.7存在于网站根目录中。 (http:// localhost)
  • asp.net核心作为站点(http:// localhost / sub1)的应用程序存在
  • asp.net 4.7和启用核心的CSRF(防伪)。

由于Asp.net 4.7的CSRF依赖于Machine Key,因此我跟随本文更改了asp.net 4.7应用程序。 https://docs.microsoft.com/ko-kr/aspnet/core/security/data-protection/compatibility/replacing-machinekey?view=aspnetcore-3.1

asp.net核心和4.7应用程序都在同一目录中存储密钥。

services.AddDataProtection()
        .SetApplicationName("testapp")
        .PersistKeysToFileSystem(new DirectoryInfo(@"C:\Temp\keys"));

这是asp.net 4.7页面,该页面向asp.net核心应用发出发布请求。

 @using (@Html.BeginForm(null,null,FormMethod.Post,new { @action = "http://contoso/sub/mypage" }
))
{

@Html.AntiForgeryToken()

    <input type="submit" value="Submit" />
}

我认为它会起作用,但是当我从asp.net 4.7拨打电话时, 我从asp.net核心收到400错误。我发现的一件事是,直接从asp.net核心调用页面并从asp.net 4.7页面发送发布消息时,RequestVerificationToken值不同。 那么这可能吗? 谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)