Iis

為什麼禁用 IsolateApps 時 ASP.NET 會自動生成不同的機器密鑰?

  • May 9, 2015

我在 IIS 7.5 中託管了兩個 Web 應用程序。他們必須共享 ASP.NET Forms Authentication cookie。由於我不想將機器密鑰放在 Web.config 中(我沒有使用網路農場,並且我不希望密鑰在 web.config 文件中可見),我已將其設置為自動生成以下設置:

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" />

根據文件,這應該會導致 IIS 為兩個 Web 應用程序自動生成相同的機器密鑰。在我的 Windows 7 和 Windows 8 開發人員機器上,這按預期工作。任何一個 Web 應用程序都可以對使用者進行身份驗證,並且兩個應用程序都辨識相同的身份驗證 cookie。

但是,當我將此設置轉移到在 Windows Server 2008 R2 上執行的生產環境中時,這兩個應用程序將不會共享身份驗證 cookie。當 WebAppA 對使用者進行身份驗證時,WebAppB 無法解密 auth cookie 並強制使用者重新進行身份驗證。當他們這樣做時,新的身份驗證 cookie 對 WebAppA 無效。

我已經通過將兩個應用程序中的機器密鑰顯式設置為相同的密鑰來證明它使用單獨的機器密鑰:

<machineKey validationKey="F801AB..." decryptionKey="ADB3C1..." />

當我這樣做時,身份驗證就像在我的開發人員機器上一樣工作。

我的開發和生產環境之間的差異可能會導致這種情況嗎?

當 IIS 自動生成機器密鑰時,它儲存在HKEY_CURRENT_USER中。因此,要共享自動生成的機器密鑰,Web 應用程序必須以同一使用者身份執行。詳細資訊在這篇博文中。相關摘錄如下:

基本機器密鑰儲存在系統資料庫中的以下位置:

HKCU\Software\Microsoft\ASP.NET\4.0.30319.0\AutoGenKeyV4

請注意,此密鑰位於 HKEY_CURRENT_USER 配置單元中,因此生成的機器密鑰屬於執行應用程序配置文件的使用者。這意味著如果您在 IIS 中有兩個應用程序以相同的程序標識執行,它們將使用相同的機器密鑰!

就我而言,這兩個 Web 應用程序在不同的應用程序池中以不同的身份執行。因此,他們生成了不同的機器密鑰。在我的開發人員機器上,它們以相同的身份執行。

通過將兩個應用程序放在同一個應用程序池中(或以相同的身份執行兩個應用程序池),它們使用了相同的自動生成的機器密鑰。

引用自:https://serverfault.com/questions/690757