C# CSRF令牌在本地运行时可从cookie中获得,但在后端部署为Azure应用程序服务时找不到

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是否被添加,并确保

当我的前端连接到后端时,我在从cookie检索CSRF令牌时遇到问题。我的后端是C#,带有一个ASP.NET核心2.1 Web服务应用程序,使用Nancy模块。我的前端是使用Axios与后端通信的Typescript

在本地运行时,可以获得CSRF cookie,并提取令牌并将其发送回请求头中。连接到部署的Azure应用程序服务后端时,cookie仍然存在,但前端不再可见,因此无法将令牌发送回标头中

我已经用Postman和Chrome中的开发工具检查了响应,以验证cookie是否被添加,并确保在创建cookie时没有为cookie设置HttpOnly标志

下面是我如何添加CSRF 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添加了适当的域,我仍然收到同样的错误