繁体   English   中英

Antiforgery 在 asp.net core web api angular 中抛出错误的请求

[英]Antiforgery throws bad request in asp.net core web api angular

我正在尝试通过在启动文件中添加过滤器来向我的 asp.net core 3.1 web API 添加防伪。

options => options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute())

此 Web API 由托管在不同端口中的我的 angular 应用程序使用。 我已经完成了 Microsoft 文档中指定的所有配置,如下所示。

app.Use(next => context =>
        {
            string path = context.Request.Path.Value;
            if (path != null)
            {
                var tokens = antiforgery.GetAndStoreTokens(context);
                context.Response.Cookies.Append("XSRF-TOKEN",
                  tokens.RequestToken, new CookieOptions
                  {
                      HttpOnly = false,
                      Path = "/",
                  }
                );
            }
            return next(context);
        });

在服务中

services.AddAntiforgery(options =>
        {
            options.HeaderName = "X-XSRF-TOKEN";
        });

它生成两个令牌,一个是.Asp.NetCore.AntiForgery 和 XSRF-TOKEN。 我在我的客户端应用程序中获取此令牌并将其作为请求标头作为 x-xsrf-token 发送到 API,但每次都失败。 我已经设置了我的 cors 以允许任何来源。 我在我的 angular 应用程序中收到如下令牌。

let xsrfToken = this.xsrfTokenExtractor.getToken() as string;
  if(xsrfToken){
    request = request.clone({headers: request.headers.set("X-XSRF-TOKEN", xsrfToken)});
  }

让我向你解释我的流程。 我有一个身份服务器、Web API 和 angular 应用程序,所有这些都托管在不同的端口中。 完成后,angular 应用程序将重定向到身份服务器进行身份验证,它将重定向回我的客户端应用程序。 我已经在 Web API 中设置了这个 csrf。 所以基本上,身份验证是使用不记名令牌进行的。 我知道我们不需要 csrf 保护,因为我们已经使用不记名令牌作为我的身份验证机制。 但我也需要它为 csrf 工作。 有没有办法实现这一目标?

我有类似的流程,我遇到了类似的问题。 就我而言,我没有使用 Configure 方法,而是创建了一个单独的 Endpoint,它允许我请求 cookie。

var aft = _antiForgery.GetAndStoreTokens(HttpContext);
            Response.Cookies.Append("XSRF-TOKEN", aft.RequestToken, new CookieOptions
            {
                HttpOnly = false,
                Secure = true,
                Domain = config.Domain
            });

最初我在同一个请求中对 cookie 部分进行日志记录,这导致每个请求都被 400 Bad Request 令牌拒绝,但是一旦我将登录部分和 cookie 部分分开在两个单独的端点中并发出两个请求,一切按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM