c# - ASP.NET Core MVC 项目似乎自动添加了 AntiForgery token ?

标签 c# razor asp.net-core csrf asp.net-core-mvc

使用由最新 (RC2) VS2015 ASP.NET Core 模板创建的开箱即用的 MVC 应用程序,文件 _LoginPartial.cshtml 在共享的 _Layout.cshtml 文件中呈现为部分。 _LoginPartial 具有以下内容:

@using Microsoft.AspNetCore.Identity
@using CodeServer.Models

@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager

@if (SignInManager.IsSignedIn(User))
{
    <form asp-controller="Account" asp-action="LogOff" method="post" id="logoutForm" class="navbar-right">
        <ul class="nav navbar-nav navbar-right">
            <li>
                <a asp-controller="Manage" asp-action="Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
            </li>
            <li>
                <button type="submit" class="btn btn-link navbar-btn navbar-link">Log off</button>
            </li>
        </ul>
    </form>
}
else
{
    <ul class="nav navbar-nav navbar-right">
        <li><a asp-controller="Account" asp-action="Login">Log in</a></li>
    </ul>
}

当它呈现到页面中时,这是结果(来自查看源代码):

<form method="post" id="logoutForm" class="navbar-right" action="/Account/LogOff">
    <ul class="nav navbar-nav navbar-right">
        <li>
            <a title="Manage" href="/Manage">Hello user@email.com!</a>
        </li>
        <li>
            <button type="submit" class="btn btn-link navbar-btn navbar-link">Log off</button>
        </li>
    </ul>
<input name="__RequestVerificationToken" type="hidden" value="..." /></form>

不是对 ASP.NET 不友好,但该 token 是如何进入其中的?此外,我还在 AntiForgery 上对整个解决方案进行了文件查找,唯一的命中是 [ValidateAntiForgeryToken] 标签或 project.lock.json 中的条目。

我想通过故意在请求中省略 token 来验证我的验证标签是否正常工作,但是当 token 对我有帮助(?)添加时我不能这样做。

最佳答案

Not to be ungracious to ASP.NET, but how is that token getting in there?

您看到的防伪 token 是由 FormTagHelper 自动生成和添加的.

您可以通过添加 asp-antiforgery="false" 属性来禁用此自动功能:

<form asp-controller="Account" asp-action="LogOff" asp-antiforgery="false" 
      method="post" id="logoutForm" class="navbar-right">
</form>

关于c# - ASP.NET Core MVC 项目似乎自动添加了 AntiForgery token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37823562/

相关文章:

c# - 在 MVVM 世界中更改 CollectionViewSource 源

c# 依赖注入(inject)无法将 lambda 转换为预期的委托(delegate)

c# - 如何解决 .NET Core 包版本冲突

c# - 如何用另一个文件中的字符替换一个文件中的字符

c# - 带有 angularjs 的 $http 请求正在返回我的 html 文档

c# - 动态注册通用类型

javascript - 如何在 javascript 代码中使用模型数据?

c# - 在 ASP.NET MVC 2 项目中同时使用 Razor 和 Spark

asp.net-mvc-4 - KendoUI 设置下拉列表的宽度

dependency-injection - 从范围内配置/注册依赖注入(inject)范围内的服务