将表单authentication数据库合并在一起

我有一个基于ASP.Net的系统; 网站的相同副本在三台不同的服务器上运行,所有Windows 2008R2都运行IIS7.5。 每个站点都有自己的身份validation数据库,拥有自己的用户,angular色,configuration文件等。

我想将这些数据库合并在一起,这样三台服务器共享一个authentication数据库,然后用户可以login到三台服务器中的任何一台。

主要网站是迄今为止最大的用户群; 另外两个站点每个只有less数用户/configuration文件,因此如有必要,可以手动重新创build它们。 但是,我需要做什么来确保密码散列/ salt在每台服务器上都有效且可用?

是否只是在web.config中设置相同的MachineKey ? 我是否也需要在aspnet_Applications表中设置相同的ApplicationId

如果将较小的两个成员资格表合并到较大的表中,那么当您将Membership表迁移到较大的表中时,可以将新行的ApplicationID更改为具有与第一个相同的ApplicationID。 这样做后,您将有效地拥有3个应用程序共享的1个大(ger)应用程序用户。 既然你正在使用哈希,(我假设你的web.configvalidation= SHA1),你不应该担心机器密钥,因为它不用于validationlogin – 这就是盐的用途。 Machine Key用于encryptionSession,Form Data和ViewState等内容。 如果机器密钥对于每个应用程序保持不同,那么也可以。 (如果您在多个服务器上负载平衡单个应用程序,则需要它们保持一致。)

现在有一些注意事项。

  • 用户名在会员数据库中必须是唯一的,所以如果您在3个应用程序中有任何重复,则必须确定如何按照具体情况进行操作。 希望如果有重复,他们是重复在这两个应用程序的用户名相同的人,但事实并非如此。 (两个不同的用户可以在不同的应用上使用用户名“Ken”,在这种情况下,其中一个用户将不得不select一个新的用户名)。如果是同一个用户,他们可能会有不同的密码或电子邮件,一个必须赢。
  • 同一个用户在不同的应用上可能有两个不同的帐户。 你可能只想使用其中的一个。
  • 电子邮件也可能被configuration为独一无二的,如果是这样的话,您将遇到类似的问题,使用同一个电子邮件的不同用户名。 虽然这实际上可以帮助你,因为如果同一个用户有两个不同的帐户,它将更容易隔离。
  • angular色将具有不同的angular色ID,需要合并,UsersInRoles项也需要相应更新。
  • 如果您正在使用aspnet_Profile表,并且如果您的某些用户拥有多个应用程序中的帐户,则必须考虑如何合并数据。 实际上,所有的表都是如此,但是对于大多数其他表,您可能只需从更受欢迎的应用程序(最后logindate,IsUserLockedOut等)中select一个字段。但对于Profile数据,它必须合并,因为它包含多个名称/值对。
  • 这应该不用说,但你会想要做一些相当广泛的testing。 我的警告清单绝不是详尽无遗的。 加上这显然可能是自定义应用程序代码的重大改变。