2017-07-20 63 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