SignalR Cors Cookie 未发送

Posted

技术标签:

【中文标题】SignalR Cors Cookie 未发送【英文标题】:SignalR Cors Cookie not being sent 【发布时间】:2016-08-03 23:14:14 【问题描述】:

我有一个 SignalR javascript 客户端 (https://domainA.com) 与 SignalR Api (https://domainB.com) 交谈。 Signalr 版本 2.2.0。我需要通过 cookie 将令牌传递给 Api。虽然这在开发中有效,但在部署到 Azure 应用服务时不起作用。 cookie 没有与请求一起发送。

JavaScript 代码

//Set cookie
document.cookie = "DomainAToken=" + token + "; domain=domainA.com; path=/";

//call signalr hub
$.connection.hub.start(
    withCredentials: true
).done(init);

我正在 Api 上设置 CORS 策略。欧文启动:

var policy = new CorsPolicy

    AllowAnyHeader = true,
    AllowAnyMethod = true,
    SupportsCredentials = true
;

policy.Origins.Add("https://domainA.com");

app.Map("/signalr", map =>
    
    map.UseCors(new CorsOptions
    
        PolicyProvider = new CorsPolicyProvider
        
            PolicyResolver = context => Task.FromResult(policy)
        
    );
    map.RunSignalR(hubConfiguration);
);

返回响应头如下。

访问控制允许凭据:true 访问控制允许来源:https://domainA.com

在 localhost 中它可以工作,但在 Azure 上,cookie 未设置。有没有办法让 cookie 与 signalr 跨域工作?

【问题讨论】:

【参考方案1】:

刚刚遇到了可能是原因的事情..

如果您在默认的 azurewebsites.net 域上使用它,它不起作用的原因是浏览器阻止在某些域上设置 cookie。参考请看:

https://publicsuffix.org/list/effective_tld_names.dat

也是这个答案:

Creating a javascript cookie on a domain and reading it across sub domains

【讨论】:

是的,使用自定义 dns 是我解决问题的方法。它不适用于 azurewebsites.net。正如 Marco 所说,如果您发布答案的基本部分,我很乐意将其标记为正确答案。

以上是关于SignalR Cors Cookie 未发送的主要内容,如果未能解决你的问题,请参考以下文章

浏览器未在启用 CORS 的情况下跨域跨域发送 cookie

CORS - 服务器端 cookie 未保存在 chrome 浏览器上

Firefox 未设置通过 XHR CORS 请求接收的 Cookie

如何通过 CORS 传递 cookie?

CORS AngularJS 不使用 POST 或 DELETE 发送 Cookie/凭据,但 GET OK

如何通过CORS传递cookie?