C# CSRF令牌在本地运行时可从cookie中获得,但在后端部署为Azure应用程序服务时找不到
当我的前端连接到后端时,我在从cookie检索CSRF令牌时遇到问题。我的后端是C#,带有一个ASP.NET核心2.1 Web服务应用程序,使用Nancy模块。我的前端是使用Axios与后端通信的Typescript 在本地运行时,可以获得CSRF cookie,并提取令牌并将其发送回请求头中。连接到部署的Azure应用程序服务后端时,cookie仍然存在,但前端不再可见,因此无法将令牌发送回标头中 我已经用Postman和Chrome中的开发工具检查了响应,以验证cookie是否被添加,并确保在创建cookie时没有为cookie设置HttpOnly标志 下面是我如何添加CSRF cookie的代码示例:C# CSRF令牌在本地运行时可从cookie中获得,但在后端部署为Azure应用程序服务时找不到,c#,asp.net-core,azure-web-app-service,csrf,nancy,C#,Asp.net Core,Azure Web App Service,Csrf,Nancy,当我的前端连接到后端时,我在从cookie检索CSRF令牌时遇到问题。我的后端是C#,带有一个ASP.NET核心2.1 Web服务应用程序,使用Nancy模块。我的前端是使用Axios与后端通信的Typescript 在本地运行时,可以获得CSRF cookie,并提取令牌并将其发送回请求头中。连接到部署的Azure应用程序服务后端时,cookie仍然存在,但前端不再可见,因此无法将令牌发送回标头中 我已经用Postman和Chrome中的开发工具检查了响应,以验证cookie是否被添加,并确保
protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
base.ApplicationStartup(container, pipelines);
Nancy.Security.Csrf.Enable(pipelines);
var corsURL = ConfigurationManager.AppSettings["CorsURL"];
pipelines.AfterRequest.AddItemToEndOfPipeline(context =>
{
var ncsrfCookie = new NancyCookie("default", "default");
if (context.Items.ContainsKey("NCSRF"))
ncsrfCookie = new NancyCookie("NCSRF", context.Items["NCSRF"].ToString(), false, false);
if(ncsrfCookie.Name != "default" && context.Response.Cookies.Contains(ncsrfCookie) == false)
context.Response.Cookies.Add(ncsrfCookie);
context.Response.Headers.Add("Access-Control-Allow-Origin", corsURL);
context.Response.Headers.Add("Access-Control-Allow-Credentials", "true");
context.Response.Headers.Add("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, NCSRF");
});
}
以下是在前端提取令牌的代码:
getCsrfCookie(): string{
try{
console.log(document.cookie);
var csrfCookies = document.cookie.split(';');
console.log(csrfCookies);
var filteredCookies = csrfCookies.filter((item) => item.includes('NCSRF='));
console.log(filteredCookies);
var value = filteredCookies[0].replace("NCSRF=", "");
return decodeURIComponent(value);
}
catch(err){
throw new Error("Error with NCSRF: " + err);
}
}
控制台日志用于调试,document.cookie的输出当前是由Axios添加的单个cookie
我尝试过做一些研究,大多数建议是确保httponly标志设置为false,这是在创建cookie时完成的。听起来像是CORS问题-比较发送的cookie的域名,它可能与您的域不同。我继续向cookie添加了适当的域,我仍然收到同样的错误