2017-05-25 84 views
0

我有一種情況,我嘗試在子域之間使用單個Http唯一身份驗證cookie。可以在子域中發送共享Cookie

我已驗證身份驗證響應設置了Cookie,我在響應中將域看作.mydomain.com。如果我在Chrome中打開cookie查看器(設置 - >顯示高級設置 - >內容設置 - >所有cookie和站點數據...),我會看到我的auth cookie存儲在mydomain.com下(不是領先的'。',不知道爲什麼)。

然而,當我做一個簡單的GET請求回我的身份驗證服務器,以獲得一個完整的授權令牌,身份驗證cookie不會被髮送:

//Sent from http://app.mydomain.com 
$.get('http://auth.mydomain.com', null, function(fullAuthorizeTok) {}); 

是無法發送cookie即使在交子像這樣的域名請求?

我使用Http-Only身份驗證Cookie來防範XSS攻擊,然後使用在強效操作中手動提交的授權令牌來防範XSRF攻擊。這一點是應用程序已經過身份驗證的部分,並且正在從服務器請求授權令牌,我希望這可以從客戶端JS獲得。

回答

0

請求必須明確跨域才能發送cookie。我認爲如果瀏覽器在所述子域之間共享,它將隱式地發送跨子域的cookie,但事實並非如此。請求需要如下所示:

$.ajax({ 
    url: 'http://auth.mydomain.com', 
    method: 'GET', 
    crossDomain: true, 
    data: {}, 
    xhrFields: { 
     withCredentials: true 
    }, 
    success: function (tokenStr) { 
     //Do Stuff 
    }, 
    error: function (jqXHR, type, exception) { 
     alert('Oh Dear.'); 
    } 
}); 

當然,響應應該包含適當的CORS標頭。

作爲一個側面說明。如果它們不共享相同的父域,則這不適用於跨域。因此,您可以將cookie從「app.mydomain.com」發送到「auth.mydomain.com」,但不發送到「auth.mydomain2.com」。