ASP.NET Core MVC 项目似乎自动添加了 AntiForgery 令牌?
ASP.NET Core MVC project appears to add AntiForgery tokens automatically?
使用由最新 (RC2) VS2015 ASP.NET 核心模板创建的开箱即用的 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 上对整个解决方案进行了文件查找,唯一的命中是 [ValidateAntiForgeryToken]
标签或 project.lock.json.
中的条目
我想通过故意在请求中省略令牌来验证我的验证标签是否正常工作,但是当令牌对我有用(?)添加时我不能这样做。
Not to be ungracious to ASP.NET, but how is that token getting in there?
您看到的防伪标记是由 FormTagHelper
自动生成和添加的。
您可以通过添加 asp-antiforgery="false"
属性来禁用此自动功能:
<form asp-controller="Account" asp-action="LogOff" asp-antiforgery="false"
method="post" id="logoutForm" class="navbar-right">
</form>
要在项目的任何地方禁用防伪令牌,请将此代码添加到 Global.asax 文件中的 Application_Start 方法。
AntiForgeryConfig.SuppressIdentityHeuristicChecks = true
使用由最新 (RC2) VS2015 ASP.NET 核心模板创建的开箱即用的 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 上对整个解决方案进行了文件查找,唯一的命中是 [ValidateAntiForgeryToken]
标签或 project.lock.json.
我想通过故意在请求中省略令牌来验证我的验证标签是否正常工作,但是当令牌对我有用(?)添加时我不能这样做。
Not to be ungracious to ASP.NET, but how is that token getting in there?
您看到的防伪标记是由 FormTagHelper
自动生成和添加的。
您可以通过添加 asp-antiforgery="false"
属性来禁用此自动功能:
<form asp-controller="Account" asp-action="LogOff" asp-antiforgery="false"
method="post" id="logoutForm" class="navbar-right">
</form>
要在项目的任何地方禁用防伪令牌,请将此代码添加到 Global.asax 文件中的 Application_Start 方法。
AntiForgeryConfig.SuppressIdentityHeuristicChecks = true