在ASP.NET Core和Angular中进行CSRF令牌验证可以通过以下步骤解决:
在ASP.NET Core中设置CSRF令牌验证:
在Startup.cs文件的ConfigureServices方法中添加以下代码来启用CSRF令牌验证:
services.AddAntiforgery(options =>
{
options.HeaderName = "X-XSRF-TOKEN";
});
在Startup.cs文件的Configure方法中添加以下代码来生成和设置CSRF令牌:
app.Use(next => context =>
{
string path = context.Request.Path.Value;
if (
string.Equals(path, "/", StringComparison.OrdinalIgnoreCase) ||
string.Equals(path, "/index.html", StringComparison.OrdinalIgnoreCase))
{
var tokens = antiforgery.GetAndStoreTokens(context);
context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken,
new CookieOptions() { HttpOnly = false });
}
return next(context);
});
在Angular中获取和设置CSRF令牌:
在app.module.ts文件中导入HttpClientModule:
import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http';
在imports数组中添加HttpClientModule和HttpClientXsrfModule:
imports: [
HttpClientModule,
HttpClientXsrfModule.withOptions({
cookieName: 'XSRF-TOKEN',
headerName: 'X-XSRF-TOKEN'
}),
]
在Angular的服务或组件中使用CSRF令牌:
在需要发送请求的服务或组件中导入HttpClient:
import { HttpClient } from '@angular/common/http';
在构造函数中注入HttpClient:
constructor(private http: HttpClient) { }
在发送请求之前,使用XSRF-TOKEN从cookie中获取CSRF令牌,并将其设置为请求的header中的X-XSRF-TOKEN字段:
const xsrfToken = this.cookieService.get('XSRF-TOKEN');
this.http.post(url, data, { headers: { 'X-XSRF-TOKEN': xsrfToken } })
.subscribe(response => {
// 处理响应
});
这些步骤可以帮助你在ASP.NET Core和Angular中进行CSRF令牌验证,并解决CSRF令牌验证失败的问题。请根据你的具体情况进行适当的调整和修改。