Authentication

將表單身份驗證數據庫合併在一起

  • July 7, 2015

我有一個基於 ASP.Net 的系統;該站點的相同副本在三台不同的伺服器上執行,所有伺服器均執行 IIS7.5 的 Windows 2008R2。每個站點都有自己的身份驗證數據庫,有自己的使用者、角色、配置文件等。

我想將這些數據庫合併在一起,這樣三個伺服器共享一個身份驗證數據庫,然後使用者可以登錄到三個伺服器中的任何一個。

主站點擁有迄今為止最大的使用者群;其他兩個站點每個只有少數使用者/配置文件,因此如有必要,可以手動重新創建它們。但是,我需要做些什麼來確保密碼雜湊/鹽在每台伺服器上都是有效且可用的?

這只是在MachineKeys 中設置相同的情況web.config嗎?我還需要在表中設置相同ApplicationId的 s嗎?aspnet_Applications

如果將較小的兩個成員表合併到較大的表中,則在將成員表遷移到較大的表時,可以將新行的 ApplicationID 更改為與第一行具有相同的 ApplicationID。這樣做之後,您將有效地擁有 1 個大(ger)使用者應用程序,由 3 個應用程序共享。由於您使用的是散列(我假設您的 web.config 具有驗證 = SHA1),您不必擔心機器密鑰,因為它不用於驗證登錄 - 這就是鹽的用途。機器密鑰用於加密會話、表單數據和視圖狀態等內容。如果每個應用程序的機器密鑰保持不同,那也沒關係。(如果您要跨多個伺服器對單個應用程序進行負載平衡,則需要它們相同。)

現在有一些警告。

  • 使用者名在會員數據庫中必須是唯一的,因此如果您在 3 個應用程序中有任何重複項,則必鬚根據具體情況確定如何進行。希望如果有重複,他們是同一個人在兩個應用程序上重複使用者名,但情況不一定如此。(兩個不同的使用者可以在不同的應用程序上使用使用者名“Ken”,在這種情況下,其中一個必須選擇一個新使用者名。)如果是同一個使用者,他們可能有不同的密碼或電子郵件,所以一個人將不得不勝出。
  • 同一個使用者可能在不同的應用上有兩個不同的帳戶。您可能只想使用其中之一。
  • 電子郵件也可以配置為唯一的,如果是這樣,您將遇到類似的問題,即不同的使用者名具有相同的電子郵件。儘管這實際上可能對您有所幫助,因為如果同一使用者有兩個不同的帳戶,則隔離起來會更容易。
  • 角色將具有不同的 RoleID,需要合併,並且 UsersInRoles 條目也需要相應更新。
  • 如果您使用的是 aspnet_Profile 表,並且如果您的某些使用者在超過 1 個應用程序中擁有帳戶,則您必須弄清楚如何合併數據。這實際上適用於所有表,但對於大多數其他表,您可能只從更流行的應用程序中選擇一個欄位(上次登錄日期、IsUserLockedOut 等)。但對於配置文件數據,它必須合併,因為它包含多個名稱/值對。
  • 這應該是不言而喻的,但你會想要做一些相當廣泛的測試。我的注意事項清單絕不是詳盡無遺的。加上這顯然可能是自定義應用程式碼的重大變化。

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