【问题标题】:ASP.NET Core Web - The required antiforgery cookie ".AspNetCore.Antiforgery.wRFSYju6cwY" is not presentASP.NET Core Web - 所需的防伪 cookie “.AspNetCore.Antiforgery.wRFSYju6cwY”不存在
【发布时间】:2018-11-28 20:52:07
【问题描述】:

我在 VS 2017 (Community v15.6.6) 中创建了一个新的 ASP.NET Core 2.0 Web 应用程序项目,在新建项目向导中我选择了 Web 应用程序 + 身份验证:个人用户帐户。 我在 PM 中运行了 Update-Database,以创建 db。 然后我在 IIS Express 中的 VS 中运行应用程序,注册了一个新用户并登录。一切正常。

然后我停止了应用程序并且不在 IIS Express 中运行它,而是使用了在 launchSettings.json 中配置的第二个启动配置文件:

"profiles": {
"TestCoreWebApp": {
  "commandName": "Project",
  "launchBrowser": true,
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  },
  "applicationUrl": "http://localhost:63090/"
}

应用程序启动并打开带有主页的网络浏览器。 现在,当我尝试登录时,它不起作用。它以 http 400 错误结束。

在输出中我看到以下错误:

    Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException: The required antiforgery cookie ".AspNetCore.Antiforgery.wRFSYju6cwY" is not present.
   at Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.<ValidateRequestAsync>d__9.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ValidateAntiforgeryTokenAuthorizationFilter.<OnAuthorizationAsync>d__3.MoveNext()

请谁能解释一下为什么它的工作方式与 IIS Express 配置文件不同?是bug吗?

IIS Express 配置文件在 HTTPS 上运行,但另一个配置文件在 HTTP 上运行。这种差异是否在所描述的行为中起作用?

非常感谢。 菲利普

【问题讨论】:

    标签: c# asp.net-core asp.net-core-2.0


    【解决方案1】:

    这让我数不胜数,因为我通常从一个空的 Web 项目模板开始。

    您可能缺少_ViewImports.cshtml 文件或其中的以下行(启用内置标签助手,即自动注入的csrf):

    @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

    【讨论】:

      【解决方案2】:

      我也在同一版本中创建了相同的项目,但我没有创建数据库,因为当您添加新用户时,实体框架会检查并创建数据库

      尝试创建新用户并延迟 EF 创建数据库。

      【讨论】:

      • 感谢您的回答,但恕我直言,问题与 db 无关。
      【解决方案3】:

      我在使用带有 Asp Net core 2.0 和 Asp Net Core 2.0 API 项目的 Identity Server 4 / Identity Management 项目时遇到了类似的问题,它们都使用 SSL 并使用 IIS 运行。

      对于开发环境,我改为在不使用 SSL 并使用 Kestrel 的情况下运行,并显示错误“required anti-forgery cookie .AspNetCore.Antiforgery.wRFSYju6cwY”。

      当我清理了 Cookies(在所有浏览器中)后,一切都开始正常工作了,我希望这对你有所帮助。

      【讨论】:

        【解决方案4】:

        尝试将@Html.AntiForgeryToken() 插入您的登录视图(在表单内)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-23
          • 2021-07-09
          • 2015-11-30
          • 1970-01-01
          • 2020-01-24
          • 2015-09-07
          • 1970-01-01
          • 2018-12-17
          相关资源
          最近更新 更多