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