【问题标题】:AntiForgery Token implementation in WebAPI+AngularJS appWebAPI+AngularJS 应用中的 AntiForgery Token 实现
【发布时间】:2014-10-16 09:04:08
【问题描述】:

我有一个 HTMl 应用程序,它使用 Web API 和 AngularJS。我们计划在应用程序中实现 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

谁能给点建议?

我错过了什么? 或者有没有更好的方法来实现 Antiforgery 令牌验证?

【问题讨论】:

    标签: angularjs asp.net-web-api antiforgerytoken


    【解决方案1】:

    您可能缺少参考,但不要使用隐藏输入。而是将 AntiForgeryToken 添加到标头。

    客户端可以简单地通过自定义 HtmlHelper 请求令牌,并在视图初始化时将其添加到请求头中:

    @Html.RequestVerificationToken()
    

    Action 会检索并验证它。

    最简单的方法是为您的 Post Action 创建一个 AntiForgeryValidate 属性,以验证来自标头请求的令牌。

    [AntiForgeryValidate]
    

    看看这个:

    http://blog.novanet.no/anti-forgery-tokens-using-mvc-web-api-and-angularjs/

    【讨论】:

    • 我已经浏览了这个链接。我发现的问题是,在哪里添加 MVC HTML Helper Extension?我的客户是纯html+AngulaJS项目。
    • @Html 指的是 HtmlHelper 类,它是一个 C# 类,因此如果您无法访问 C# 和 ASP.NET MVC,则不能采用这种方法。它应该在服务器端进行扩展。
    • 我创建了一个包装类。我在应用程序中添加了一个 cs 文件,我在其中编写了 GetToken() 方法,然后从我的 cshtml 中调用它。通过它,我能够克服 dll 问题。对于我所做的一切,我都按照博客所说的那样做,而且效果很好:)
    • 嗨,Vipin,您能否提供更多关于在没有@Html.RequestVerificationToken() 行的情况下如何解决问题的详细信息?我正在寻找一种方法来实现这一点,但由于它只是纯 HTML,我无法弄清楚如何实现这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 2013-01-06
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多