我試圖跨多個服務器和子域設置表單身份驗證。我已經成立了像這樣每個應用程序的靜態機鍵:在多個服務器和子域上設置持久表單身份驗證
<system.web>
<machineKey validationKey="574...7A7"
decryptionKey="2C3...A0D"
validation="HMACSHA256"
decryption="AES" />
</system.web>
...和我的窗體身份驗證配置爲每個應用程序相同的:
<forms loginUrl="/login" timeout="2880" defaultUrl="/" path="/" name=".SHAREDAUTH" domain="domain.com" protection="All" />
我也試過前綴我的域名有一段時間,正如我見過一些人提出的那樣,但那也沒有效果。
這對我的本地機器正常工作,在IIS中爲每個子域設置單獨的網站。它也適用於我們的開發服務器,即所有站點仍駐留在單臺計算機上。但是,當我部署到臨時環境時,跨域身份驗證停止工作。在那個環境中,我有一臺運行在單臺服務器上的主站點(登錄發生處),以及兩臺負載平衡服務器上運行的輔助站點(我的身份驗證應持續存在)。所有都在Windows 7(本地)或Server 2008 R2(開發和分期)的IIS 7下運行。
我驗證了機器密鑰是相同的通過編碼在主站點上的字符串與MachineKey.Encode
並用MachineKey.Decode.
輔助服務器我也驗證了.SHAREDAUTH cookie被傳遞到請求中的第二應用的結果進行解碼,通過檢查Firefox和Chrome報告的請求標頭,並將調試器掛接到Application_BeginRequest
和Application_AuthenticateRequest.
,我可以在Application_BeginRequest
執行期間看到cookie,但在調用Application_AuthenticateRequest
時它不見了。從我可以收集的信息來看,這似乎意味着身份驗證票證的反序列化失敗了,但我無法弄清楚爲什麼會出現在多服務器環境中,而不是單個服務器環境,除了不同的機器密鑰,我已經證實並非如此。
我也有一個自定義MembershipProvider和RoleProvider設置,並且這些工作在每個站點上獨立運行。
我錯過了什麼?
請不要在「ASP.Net C# - 」等前加字幕。這就是標籤的用途。 – 2012-02-14 20:06:49
對於那些有同樣問題的人,我在這篇文章中做了一些提示:http://stackoverflow.com/questions/8361323/net-2-0-web-app-authentication-failing-the-ticket-supplied-是無效的問候 – user1482638 2012-06-26 12:07:35