在ASP.NET MVC应用程序中,我们在用户登录表单中使用@Html.AntiForgeryToken()
。然后在控制器中,[ValidateAntiForgeryToken]
过滤器有助于验证令牌以防止自动登录尝试。
现在我们正在构建角度应用程序,我想知道是否应该将[ValidateAntiForgeryToken]
添加到我们的ApiController中,以及在这种情况下如何生成防伪标记。有什么建议吗?
答案 0 :(得分:2)
我们在生产系统中使用this方法。
使用System.Web.Helpers.AntiForgery.GetTokens()创建一个HtmlExtensions方法(让我们称之为AjaxAntiForgeryToken())令牌,并将cookieToken和formToken追加到一个字符分隔符的String中出现在cookieToken或formToken(例如':')中,如链接中所述。
将它注入角度应用程序(我们在Razor模板中创建一个角度常量,并确保在初始化应用程序之前实例化常量:例如
angular.module('myapp.bootstrapper', [])
.constant('AppSettings', {
RequestToken: '@Html.AjaxAntiForgeryToken()'
})
我们在app.js的.config函数中注入AppSettings依赖项(或者用于配置和初始化应用程序的代码),然后修改$ httpProvider以确保来自angular的$ http服务的所有调用在标题中包含(1)中的标记:
`$httpProvider.defaults.headers.common['RequestVerificationToken'] = AppSettings.AuthToken || "no request verification token";`
将AjaxAntiForgeryTokenAttribute(如链接中所示)放在您验证的方法上。