2011-04-23 161 views
2

我正在嘗試使用表單身份驗證,這將同時適用於我的頂級域名&子域。表單身份驗證和子域名

舉例來說,如果我有這個域名登錄:mydomain.com事後要www.mydomain.com我想有確定誰登錄到用戶的能力mydomain.com (這是同一個應用程序)。

我使用我的的web.config以下文件:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" domain="mydomain.com" timeout="2880" /> 
</authentication> 

這是一個MVC項目,我得到的用戶ID與下面API

HttpContext.Current.User.Identity.Name 

在執行openid登錄到用戶後,通過以下api完成表單身份驗證Cookie的創建:

FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 

我可以看到身份驗證Cookie正在發送到兩個域,但只有身份驗證的域才能識別用戶。

我做錯了什麼?

感謝, 利奧爾

+0

[跨子域的表單身份驗證]的可能重複(http://stackoverflow.com/questions/608120/forms-authentication-across-sub-domains) – rcdmk 2014-09-22 16:32:16

回答

3

確保您對這兩個應用程序具有相同的machine keys設置。如果身份驗證令牌使用應用程序1的機器密鑰加密,並且應用程序2具有不同的密鑰,則它將無法對其解密。

1

您需要在頂層域中發佈您的票證才能被子域識別。這是因爲Cookie的工作原理:

如果您在domain.com中設置cookie,它將在sub.domain.com上可見 但是,如果您在sub.domain.com上設置它,它將不可見domain.com

由於Cookie,這是一個安全問題,除了驗證/拒絕身份驗證Cookie的<form>元素設置之外,您必須考慮它,您需要擁有domain='domain.com' ,你已經做了。

除此之外,如果在子域上有不同的應用程序,則需要明確定義機器密鑰纔是相同的。你可以在這裏生成你自己的一些密鑰:http://aspnetresources.com/tools/machineKey