【问题标题】:Manual Anti-Forgery Token Creation and Validation in ASP.NET 5在 ASP.NET 5 中手动创建和验证防伪令牌
【发布时间】:2015-06-03 22:06:10
【问题描述】:

我正在使用 ASP vnext 和 AngularJS。我已经设置了一个 Web API,正在使用一些控制器并正在使用 Angular 来做一些网络魔术。

我已按照本指南的大部分内容来启动和运行我的项目: http://stephenwalther.com/archive/2015/01/29/asp-net-5-and-angularjs-part-6-security

... 效果很好。我已经设置了我的数据库等,并且我的工作正常。我也设置了身份框架,但我还没有使用它。

我想将一些数据发布到 WebAPI。这也可以正常工作,但现在我想在使用防伪令牌时这样做。我用谷歌搜索了很多,我想这是最有意义的: novablog

但是: 这使用 System.Web.Helpers 创建令牌并验证它们。它们在 vnext 中不再可用。我现在不知道用什么来创建和验证令牌。

有什么想法吗?

【问题讨论】:

    标签: .net asp.net-web-api asp.net-core antiforgerytoken tag-helpers


    【解决方案1】:

    查看 MVC Github 存储库,ValidateAntiForgeryTokenAttribute 存在。

    还有asp-anti-forgerytaghelper

    【讨论】:

    • 谢谢!什么是标签助手?它是 @Html.AntiForgery 助手的新替代品吗?
    • TagHelper 是 html 中的助手,您仍然可以使用旧的 @Html 助手,也可以编写代码如:<form asp-anti-forgery ><form> 更多信息请参阅最后的Community Stand Up speeking about that
    【解决方案2】:

    以下是来自 ASP.NET 5 的 MusicStore 示例的示例:

    https://github.com/aspnet/MusicStore/blob/master/src/MusicStore/Controllers/ShoppingCartController.cs#L62

    来自上述链接的片段(请注意,如果您不喜欢上面的链接,您可以使用[FromServices] AntiForgery antiforgery 作为操作的参数):

    [HttpPost]
    public async Task<IActionResult> RemoveFromCart(int id)
    {
        var formParameters = await Context.Request.ReadFormAsync();
        var requestVerification = formParameters["RequestVerificationToken"];
        string cookieToken = null;
        string formToken = null;
    
        if (!string.IsNullOrWhiteSpace(requestVerification))
        {
            var tokens = requestVerification.Split(':');
    
            if (tokens != null && tokens.Length == 2)
            {
                cookieToken = tokens[0];
                formToken = tokens[1];
            }
        }
    
        var antiForgery = Context.RequestServices.GetService<AntiForgery>();
        antiForgery.Validate(Context, new AntiForgeryTokenSet(formToken, cookieToken));
        ......
    

    【讨论】:

    • 啊啊啊,我可以用一个完整的例子,太棒了!感谢您指出了这一点!最有帮助!
    • 您可以在here找到上面代码的客户端
    • 这个实现有一个问题:如果令牌被盗,它将对该用户永远有效!通常,cookie 部分必须放在 cookie 中,而另一部分必须放在标头(如果您发送 JSON)或表单数据中。那样的话,如果网站有适当的安全性,那么有人只能窃取表单数据令牌部分,该部分仅在用户登录时有效。
    • github链接坏了。
    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 2021-06-09
    • 2014-01-23
    • 1970-01-01
    • 2018-07-11
    • 2022-08-16
    • 2018-06-19
    • 2018-01-02
    相关资源
    最近更新 更多