如何在像angular这样的客户端应用程序中创建防伪标记?

时间:2015-02-02 19:48:19

标签: asp.net angularjs

在ASP.NET MVC应用程序中,我们在用户登录表单中使用@Html.AntiForgeryToken()。然后在控制器中,[ValidateAntiForgeryToken]过滤器有助于验证令牌以防止自动登录尝试。

现在我们正在构建角度应用程序,我想知道是否应该将[ValidateAntiForgeryToken]添加到我们的ApiController中,以及在这种情况下如何生成防伪标记。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我们在生产系统中使用this方法。

  1. 使用System.Web.Helpers.AntiForgery.GetTokens()创建一个HtmlExtensions方法(让我们称之为AjaxAntiForgeryToken())令牌,并将cookieToken和formToken追加到一个字符分隔符的String中出现在cookieToken或formToken(例如':')中,如链接中所述。

  2. 将它注入角度应用程序(我们在Razor模板中创建一个角度常量,并确保在初始化应用程序之前实例化常量:例如

    angular.module('myapp.bootstrapper', []) .constant('AppSettings', { RequestToken: '@Html.AjaxAntiForgeryToken()' })

  3. 我们在app.js的.config函数中注入AppSettings依赖项(或者用于配置和初始化应用程序的代码),然后修改$ httpProvider以确保来自angular的$ http服务的所有调用在标题中包含(1)中的标记:

    `$httpProvider.defaults.headers.common['RequestVerificationToken'] = AppSettings.AuthToken || "no request verification token";` 
    
  4. 将AjaxAntiForgeryTokenAttribute(如链接中所示)放在您验证的方法上。