angularjs - Web Api + HTML5(无 Razor)+ Angularjs + CSRF

标签 angularjs html asp.net-web-api

我有一个纯 HTML5(没有 Razor ),前端是 angularjs,后端是纯 asp.net Web api。我在网络领域看到的几乎所有示例都使用内置 MVC 解决方案的 @Html.AntiForgeryToken() 来处理 CRSF。有没有一种方法可以在不使用 Razor 的 @Html.AntiForgeryToken() 的情况下实现 CRSF?

谢谢

最佳答案

正如 Scott Allen 在 Twitter 上指出的那样,您可以在此处获得完整示例:https://github.com/aspnet/Antiforgery/tree/dev/samples/AntiforgerySample

在 Startup.cs 中,他们确保将 token 附加到 cookie 中的响应,使用 Angular 的默认 header 名称发送 XSRF token :

app.Use(next => context =>
{
    if (
        string.Equals(context.Request.Path.Value, "/", StringComparison.OrdinalIgnoreCase) ||
        string.Equals(context.Request.Path.Value, "/index.html", StringComparison.OrdinalIgnoreCase))
    {
        // We can send the request token as a JavaScript-readable cookie, and Angular will use it by default.
        var tokens = antiforgery.GetAndStoreTokens(context);
        context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken, new CookieOptions() { HttpOnly = false });
    }

    return next(context);
});

获取项目时,它们只是序列化:

if (string.Equals("GET", context.Request.Method, StringComparison.OrdinalIgnoreCase))
{
    var items = repository.GetItems();
    await context.Response.WriteAsync(JsonConvert.SerializeObject(items));
}

但在帖子中,他们确保验证随请求传递的 token :

// This will throw if the token is invalid.
await antiforgery.ValidateRequestAsync(context);

一个非常简约的示例,我可能会写博客/视频博客 ;-)

关于angularjs - Web Api + HTML5(无 Razor)+ Angularjs + CSRF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40002264/

相关文章:

javascript - 如何在 AngularJS 中保存页面

javascript - 之前为 ui-select 更改选择的选项

javascript - 下拉列表的多个条件

javascript - 更深入地理解 Promise

html - 相对位置不适用于显示表格单元格?

c# - 关于 OAUTH2 和自定义身份提供者的困惑

javascript - HTML 属性中的引号会破坏布局

javascript - 在视频和图像背景之间交替

javascript - 文件读取器 API 'load' 事件

javascript - 调试 MobileServiceClient 请求