2013-03-10 222 views
2

我試圖配置DEV環境以支持在他們之間共享身份驗證和會話的子域。表單身份驗證和身份驗證票據Cookie域

目前,我在DEV機器上配置了IIS和hosts文件來處理對mydomain,sd1.mydomain,sd2.mydomain,sd3.mydomain的請求。 Web應用程序本身按預期工作,我可以瀏覽所有子域上的所有頁面,但需要驗證的頁面除外。當我嘗試登錄時,服務器端的所有內容都很完美(用戶發現,創建cookie並添加到響應中),但cookie未到達瀏覽器(我試過Chrome和IE)。

我有一個創建並存儲驗證票據的代碼,我在authentication.forms在web.config中設置域=「MYDOMAIN。」:

var now = DateTime.UtcNow.ToLocalTime(); 

var ticket = new FormsAuthenticationTicket(
1 /*version*/, _user.Username, now, now.Add(FormsAuthentication.Timeout), 
isPersistentCookie, _user.Username, FormsAuthentication.FormsCookiePath); 

var encryptedTicket = FormsAuthentication.Encrypt(ticket); 

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
cookie.HttpOnly = true; 
if (ticket.IsPersistent) 
{ 
    cookie.Expires = ticket.Expiration; 
} 
cookie.Secure = FormsAuthentication.RequireSSL; 
cookie.Path = FormsAuthentication.FormsCookiePath; 
if (FormsAuthentication.CookieDomain != null) 
{ 
    cookie.Domain = FormsAuthentication.CookieDomain; 
} 

_httpContext.Response.Cookies.Add(cookie); 

當我調試,上面的代碼工作正常時,用戶是正確的,並且具有正確域的cookie被添加到響應中。

如果我從web.config中刪除domain =「。mydomain」,身份驗證將起作用,但僅在mydomain上,而不在子域上。

我在做什麼錯了?

回答

2

卸下開始點,從domain=,你必須把它作爲domain=".mydomain.com"與第一點作爲這裏所說http://www.w3.org/Protocols/rfc2109/rfc2109(第7頁),感謝的@AlbatrossCafe

評論此設置上都cookie和身份驗證。

+1

謝謝,它解決了我的問題。不知道cookie域值需要「.com/.something」。 – 2013-03-10 21:22:18

+0

@AlexDn歡迎您:) – Aristos 2013-03-10 21:22:41

+0

網絡上的其他所有內容都指定您必須在域名前加點。 W3指定*明確指定的域必須始終以點開頭* http://www.w3.org/Protocols/rfc2109/rfc2109 – AlbatrossCafe 2015-11-03 00:27:34

0

沒有錯。如果該域未在cookie上提供,則cookie應該僅用於發佈域。

+0

我想設置域,但是當我這樣做時,cookie不會到達瀏覽器。然後它不發送請求和FormAuthentication不起作用。我設置域.mydomain,並希望在mydomain和sd1.mydomain上使用它。 – 2013-03-10 21:13:59