SignalR Cors Cookie未被发送

时间:2016-04-13 04:25:07

标签: jquery azure cookies cors signalr

我有一个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与信号器跨域工作?

1 个答案:

答案 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