我有一个SignalR JavaScript客户端(https://domainA.com)与SignalR Api(https://domainB.com)交谈。信号器版本2.2.0。我需要通过cookie将令牌传递给Api。虽然这在dev中有效但在部署到Azure App Service时不起作用。 cookie不会随请求一起发送。
JavaScript代码
//Set cookie
document.cookie = "DomainAToken=" + token + "; domain=domainA.com; path=/";
//call signalr hub
$.connection.hub.start({
withCredentials: true
}).done(init);
我在Api上设置CORS策略。 Owin Startup:
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);
});
按如下方式返回响应标头。
Access-Control-Allow-Credentials:true Access-Control-Allow-Origin:https://domainA.com
在localhost中它可以工作,但在Azure上,没有设置cookie。有没有办法让cookies与信号器跨域工作?
答案 0 :(得分:0)
刚遇到可能是原因的事情......
如果您在默认的azurewebsites.net域中使用此功能,则无法使用的原因是浏览器阻止在某些域上设置Cookie。供参考,请参阅:
https://publicsuffix.org/list/effective_tld_names.dat
这也是答案:
Creating a javascript cookie on a domain and reading it across sub domains