ASP.NET Core MVC项目似乎会自动添加AntiForgery令牌?

时间:2016-06-14 23:08:11

标签: 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不感兴趣,但那个令牌是如何进入的?我还在AntiForgery上为整个解决方案创建了一个find-in-files,唯一的命中是[ValidateAntiForgeryToken]标签或project.lock.json中的条目。

我想通过故意在请求中遗漏令牌来验证我的验证标签是否正常工作,但是当为我添加令牌(?)时我无法做到这一点。

2 个答案:

答案 0 :(得分:10)

  

不要对ASP.NET不感兴趣,但该令牌是如何进入的?

您正在查看的防伪令牌由FormTagHelper自动生成并添加。

您可以添加asp-antiforgery="false"属性

来停用此自动功能
<form asp-controller="Account" asp-action="LogOff" asp-antiforgery="false" 
      method="post" id="logoutForm" class="navbar-right">
</form>

答案 1 :(得分:1)

要在项目中的任何位置禁用AntiForgery Token,请将此代码添加到Global.asax文件中的Application_Start方法。

AntiForgeryConfig.SuppressIdentityHeuristicChecks = true