2017-07-20 79 views
0

编辑添加额外的细节。ASP.NET身份Cookie未保存/设置在子域

我有一个web项目,我有效地用作授权服务器(例如example.com)。然后我有几个网站作为子域名(例如sub1.example.com,sub2.example.com)。登录授权服务器时,我目前无法获取.AspNet.Cookies cookie以保存子域名。我可以看到cookie返回响应,但没有设置。

我已经搜索并尝试了各种解决方案,如设置CookiePathCookieDomain。我已验证所有网站之间的Web.config文件匹配的计算机密钥。这是目前怎么我的cookie身份验证:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    LoginPath = new PathString("/Account/Login"), 
    CookieDomain = ".example.com", 
}); 

我有授权服务器上启用CORS,我能够接受的承载令牌,当我登录,我似乎无法得到cookie来被保存。

在此先感谢。

编辑:我在某处读到ARRAffinity cookie会混淆东西,所以我也禁用了它。我仍然无法看到子域中的cookie。

编辑2:添加Ajax调用的要求,在意见(密码和域名已经被改变的一致性与岗位):

$.ajax({ 
    url: 'https://example.com/auth/token', 
    method: 'POST', 
    data: { 
     grant_type: 'password', 
     username: '[email protected]', 
     password: '************' 
    }, 
    crossDomain: true 
}); 
+0

嗨!当你说cookie没有被设置时,你说的是浏览器没有发送它,对吧?你在'CookieDomain'中设置了什么值?你有没有尝试'mydomain.com'或'.mydomain.com'(注意开头的点)? –

+0

当我在fiddler中查看响应时,我可以看到从服务器返回的cookie。但是浏览器忽略了那个_specific_cookie的Set-Cookie头。我尝试过'mydomain.com'和'.mydomain.com',都没有什么不同。 – ipshing

+0

你能否提供一个代码样本来展示你如何创建cookie? –

回答

1

我会采取射击在答案这里。

默认情况下,当发出跨站点ajax请求时,浏览器将忽略cookie。有关此here的更多信息。

要允许使用cookie,你必须设置withCredentialstrue在您的要求,像这样(更多信息here):

$.ajax({ 
    url: 'https://example.com/auth/token', 
    method: 'POST', 
    data: { 
     grant_type: 'password', 
     username: '[email protected]', 
     password: '************' 
    }, 
    crossDomain: true, 
    xhrFields: { 
     withCredentials: true 
    } 
}); 

我本地测试这一点,这应该是不够的,如果只你需要的是用example.com进行验证,然后在与sub1.example.com交互时继续使用cookie。

如果你也想和cookie的请求example.com,不希望有你的反应忽略浏览器,根据this link你应该确保example.com也返回头Access-Control-Allow-Credentials: true

+0

是的!这正是问题所在。在请求中添加'withCredentials'并在我的'CorsPolicy'中设置'SupportsCredentials = true'将所有东西放在一起。谢谢。 – ipshing