【ASP.NET Identity】在多個應用程式中使用 Identity

  • 1504
  • 0
  • 2017-08-14

  某次專案上線後,使用者反饋了一個問題:明明就登入了,卻還是會一直被導向登入頁面。

  檢查了一下確定是自己在 Identity 使用上有所遺漏,先寫下來增加記憶。

1、發生原因

  專案使用了網路負載平衡,藉由負載平衡器導向兩台應用程式所在主機。

  應用程式中的 ASP.NET Identity 使用所在主機的金鑰對 cookie 進行加解密。

  若下次通過負載平衡器連線應用程式時導向不同主機,應用程式中的 ASP.NET Identity 使用所在主機的金鑰對 cookie 進行解密,解密就會失敗。

  解密失敗自然就被導向登入頁了…

2、解決方法

  給定應用程式同一組金鑰與加解密驗證方法,讓應用程式中的 ASP.NET Identity 使用給定的金鑰與加解密驗證方法對 cookie 進行加解密。

3、電腦金鑰

  在 IIS 管理員中,依序點選「應用程式」 → 「電腦金鑰」,進入「電腦金鑰」設定頁面。

由應用程式進入設定頁面為設定單一應用程式;由 IIS 根目錄進入設定頁面為設定整個站台。

01:Website_MachineKey

4、產生金鑰

02:Generate_MachineKey

4.1 驗證設定

  驗證方法、加密方法、驗證金鑰及解密金鑰。

4.2 產生金鑰

  選擇「驗證方法」、「加密方法」,按下【產生金鑰】。

要取消勾選「在執行階段自動產生」。
4.3 套用

  按下【套用】寫入應用程式的 Web.config 設定檔。

5、查看 Web.config,套用至其他應用程式

  開啟應用程式 Web.config,多了一個 machineKey 的節點元素,將此節點元素複製到各個應用程式設定檔即可(表示這些應用程式使用同一組金鑰與加解密驗證方法)。

由於一組 machineKey 節點就將金鑰與加解密驗證方法設定完成,所以複製別人產生好的金鑰也是可以直接使用的,只是安全性上就見仁見智了…

03:Config_MachineKey

嘗試將自己的理解寫成文字紀錄,資料來源均來自於網路。

如有理解錯誤、引用錯誤或侵權,請多加指正與告知,讓我有更多的進步與改進的空間,謝謝!