gpt4 book ai didi

c# - antiforgeryToken 以保护从 angularjs 应用程序调用的 web api 上的某些操作

转载 作者:太空宇宙 更新时间:2023-11-03 13:13:23 25 4
gpt4 key购买 nike

我在 visualstudio.net 2013 中有两个 Web 项目。

  • 一个项目是一个带有 Controller 和 Action 的 WebApi2(简单)
  • 第二个项目是一个没有 MVC 或 WebApi 的纯 angularjs 应用程序(我从一个空的 Web 项目开始)

angularjs 应用程序正在调用在 webApi2 应用程序上运行的服务。

我想知道是否可以使用 AntiforgeryToken 保护我的 webapi2 应用程序中 Controller 的某些操作。 (antiforgeryToken 属性)我在网上找到了一些帖子,但他们要求在我的 Angular 应用程序中使用 AntiForgery.GetTokens,因此,我必须安装所有 mvc 和 razor ... nuget 包。(参见这篇文章:http://www.fredonism.com/archive/protect-your-web-api-from-csrf-attacks.aspx)

我想避免这种情况,或者是否有使用此防伪 token 并安装最少的 nuget 包的解决方案?

换句话说:是否可以在不使用 MVC 的情况下使用防伪 token 保护我的一些 webapi Controller 操作。

问候

最佳答案

虽然现在问这个问题为时已晚,但这可能会在将来使其他人受益。

首先创建一个中间件来处理web api项目中的请求。

public class AntiForgeryMiddleware
{
private readonly RequestDelegate next;
private readonly string requestTokenCookieName;
private readonly string[] httpVerbs = new string[] { "GET", "HEAD", "OPTIONS", "TRACE", "POST" };

public AntiForgeryMiddleware(RequestDelegate next, string requestTokenCookieName)
{
this.next = next;
this.requestTokenCookieName = requestTokenCookieName;
}

public async Task Invoke(HttpContext context, IAntiforgery antiforgery)
{

string path = context.Request.Path.Value;

if (path != null && path.ToLower().Contains("yourMethodThatGeneratesTheToken"))
{
if (httpVerbs.Contains(context.Request.Method, StringComparer.OrdinalIgnoreCase))
{
var tokens = antiforgery.GetAndStoreTokens(context);

context.Response.Cookies.Append(requestTokenCookieName, tokens.RequestToken, new CookieOptions()
{
HttpOnly = false
});


}
}

context.Response.Headers.Add("Access-Control-Allow-Credentials", "true");

await next.Invoke(context);
}
}

在 Startup.cs 的 Configure 方法中添加中间件

app.UseAntiforgeryTokenMiddleware("X-XSRF-TOKEN");

在您的 Angular 拦截器中,您可以通过获取 cookie 如下设置 header 。

var xsrfToken = this.cookieService.get("X-XSRF-TOKEN");
req.headers.set('X-XSRF-TOKEN', xsrfToken)

为了保存 cookie,您需要在拦截器顶部添加 req = req.clone({ withCredentials: true });

关于c# - antiforgeryToken 以保护从 angularjs 应用程序调用的 web api 上的某些操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27529800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com