我有一个HTMl应用程序,它使用Web API和AngularJS。我们计划在App中实现AntiForgery令牌。我有一个Index.cshtml页面,其中我添加了这些代码
@using System.Web.Helpers
@functions{
public string GetAntiForgeryToken()
{
string cookieToken, formToken;
AntiForgery.GetTokens(null, out cookieToken, out formToken);
return cookieToken + ":" + formToken;
}
}
并添加了这样的输入标记:
<input id="antiForgeryToken" data-ng-model="antiForgeryToken" type="hidden"
data-ng-init="antiForgeryToken='@GetAntiForgeryToken()'" />
当我运行该应用时,我收到此错误:
错误消息:CS0117:'System.Web.Helpers.AntiForgery'不包含'GetTokens'的定义
参考:Web API and ValidateAntiForgeryToken
有人可以建议吗?
我错过了什么? 或者有更好的方法来实施防伪签名验证吗?
答案 0 :(得分:2)
您可能错过了参考但未使用隐藏输入。将AntiForgeryToken添加到标题中。
客户端只需通过自定义HtmlHelper请求令牌,并在初始化视图时将其添加到请求标头:
@Html.RequestVerificationToken()
Action检索并验证它。
最简单的方法是为Post Action创建一个AntiForgeryValidate属性,用于验证标头请求中的令牌。
[AntiForgeryValidate]
看看这个:
http://blog.novanet.no/anti-forgery-tokens-using-mvc-web-api-and-angularjs/