【发布时间】:2020-01-10 21:15:37
【问题描述】:
我正在 MVC 应用程序中实现 CSRF。我创建了自定义属性来验证令牌,因为我的输入是 json 编码并由 Ajax 调用。它在同一个项目中工作正常,但是当任何按钮或链接在同一解决方案中跨不同项目调用 url 时,它不会验证令牌。例如注销在主页中并在同一解决方案中调用不同项目的控制器。它继续抛出“防伪cookie令牌和表单字段令牌不匹配”。我已经在网络配置中设置了机器密钥。请各位大神帮我解决一下这个问题。
谢谢
注销方法 - 主项目中的 main.js 文件
A.ajax({
url: config.authenticationUrl + '/Account/LogOff',
method: 'POST',
data: serialisedExtent,
contentType: 'application/json',
headers: {
'__RequestVerificationToken': $('input[name=__RequestVerificationToken]').val()
}
})
认证项目中账户控制器中的控制器方法
[HttpPost]
[ValidateHeaderAntiForgeryToken]
public async Task<ActionResult> LogOff([ModelBinder(typeof(JsonNetModelBinder))] Exten extent)
{
if (User != null &&
User.Identity != null &&
User.Identity.IsAuthenticated)
}
public sealed class ValidateHeaderAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
var httpContext = filterContext.HttpContext;
var cookie = httpContext.Request.Cookies[AntiForgeryConfig.CookieName];
AntiForgery.Validate(cookie != null ? cookie.Value : null, httpContext.Request.Headers["__RequestVerificationToken"]);
}
错误:
防伪cookie令牌和表单字段令牌不匹配。] [异常:System.Web.Mvc.HttpAntiForgeryException(0x80004005): 防伪 cookie 令牌和表单字段令牌不匹配。在 System.Web.Helpers.AntiXsrf.TokenValidator.ValidateTokens(HttpContextBase httpContext、IIdentity 身份、AntiForgeryToken sessionToken、 AntiForgeryToken fieldToken) 在 System.Web.Helpers.AntiXsrf.AntiForgeryWorker.Validate(HttpContextBase httpContext、字符串 cookieToken、字符串 formToken)在 ValidateHeaderAntiForgeryTokenAttribute.OnAuthorization(AuthorizationContext filterContext) 在 System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext、IList`1 过滤器、ActionDescriptor actionDescriptor) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass3_1.b__0(AsyncCallback asyncCallback,对象 asyncState)] [方法:] [调用者:] [上下文: ]
【问题讨论】:
标签: javascript c# json ajax model-view-controller