gpt4 book ai didi

c# - 当 .NET 核心 API 返回带有 XSRF-TOKEN 的响应时,Angular(客户端)未将 XSRF-TOKEN 添加到 cookie

转载 作者:行者123 更新时间:2023-12-03 14:47:05 25 4
gpt4 key购买 nike

我正在使用 Angular10 和 .NET 核心 2.2。我已将 Startup.cs 配置为使用 XSRF-TOKEN 返回响应。后端正在返回它,但 Angular 不会将它传递给浏览器的 cookie。
引用 Microsoft 文档 https://docs.microsoft.com/en-us/aspnet/core/security/anti-request-forgery?view=aspnetcore-3.1#javascript-ajax-and-spas
Api returning XSRF-TOKEN with cookies
服务端代码

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

// on Configure

app.Use(next => context =>
{
string path = context.Request.Path.Value;
if (path != null && path.ToLower().Contains("/api"))
{
var tokens = antiforgery.GetAndStoreTokens(context);

context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken,
new CookieOptions() { HttpOnly = false });
}

return next(context);
});

最佳答案

就我而言,Angular 不会添加 XSRF-TOKEN cookie,因为我为客户端和 API 使用了不同的域。
要根据@David 评论解决此问题,我必须添加 withCredentials: true应我的要求
前任:

this._http.get<Array<string>>(`${environment.config.auth.BASE_API_URL}/Product/GetFeature`, { headers, withCredentials: true});
如果您为客户端 Angular 和服务器使用单个相同的域托管(在我的情况下是 asp.net 核心)那么您不需要在客户端添加任何配置,只有在默认 cookie 名称应为“XSRF-TOKEN”的情况下标题名称应为“X-XSRF-TOKEN”。

关于c# - 当 .NET 核心 API 返回带有 XSRF-TOKEN 的响应时,Angular(客户端)未将 XSRF-TOKEN 添加到 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63098901/

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