我们有几个现有的应用程序,每个都有自己的数据库(和自己的用户表,因为不同的应用程序有不同的客户)。每个应用程序都有自己的登录/更改密码/重置密码/忘记密码等。现在我们要构建一个带有IdentityServer4的中央身份验证/授权服务器,其中现有应用程序和未来的新应用程序都可以使用,不再需要执行功能谎言登录/一次又一次地更改密码/重置密码/忘记密码。
所以我的问题是我们应该如何处理那些现有的用户表?我可以看到两个选项:
保留现有用户表 当客户尝试登录到应用程序时,他将被重定向到身份服务器,它将查找现有的用户表。当不同应用程序的不同客户出现时,它将查找不同的现有用户表。
将所有现有用户表合并到身份服务器中新数据库中的单个用户表,并删除所有这些现有用户表。 但在这些应用程序中,用户登录后,程序可能仍需要访问这些用户表。如果我们合并到身份服务器中的新表,我们如何解决这个问题?我们无法直接访问身份服务器中的那个用户表,对吗?
我觉得选择2是正确的方法,但不知道究竟为什么以及如何。有谁可以向我解释一下?感谢。
答案 0 :(得分:0)
以下是我的建议:
创建新用户表
使用各个应用程序用户表中的所有公共字段创建一个新用户表。像这个例子。
CREATE TABLE [USERS](
[ID] [bigint] IDENTITY(1,1) NOT NULL
[FIRST_NAME] [char](15) NOT NULL,
[LAST_NAME] [char](30) NOT NULL,
[PASSWORD] [char](15) NOT NULL,
[PHONE] [char](12) NOT NULL,
[PHONE_EXT] [char](4) NOT NULL,
[EMAIL] [char](50) NOT NULL,
[STATUS] [char](1) NOT NULL,
[UPD_TSTAMP] [datetime] NOT NULL,
[UPD_USER] [char](8) NOT NULL
)
如果您的应用程序具有在所有应用程序中不常见的其他字段,您可以编写代码以在相应的应用程序中查找这些详细信息。您不希望将其包含在公用表中。
为旧应用用户表创建新用户
此表允许您继续在应用程序中使用可能与旧用户ID绑定的任何特殊逻辑。
这将允许您做的第二件事是在迁移过程中跟踪新用户ID到旧用户ID的映射。
警告 - 您应该确保现有的用户ID属于同一类型。此示例将假设它们都是bigint
类型。
UserID
是第一个表格中Users.ID
列的外键。
CREATE TABLE [USER_APPS](
UserID [bigint] NOT NULL,
AppName [char](30) NOT NULL,
AppUserID [bigint] NOT NULL
)
填充新用户表
当用户尝试登录时首先搜索新表。如果没有记录,则搜索每个应用程序的用户表以查看是否找到匹配项。如果没有匹配提示用户按照您的注册过程。如果找到匹配项,请在USERS
和USER_APPS
表中创建新记录。向用户显示辅助屏幕,并询问用户是否使用其他具有不同用户ID和密码组合的应用程序。如果他们有其他帐户,请尝试对其进行身份验证。如果成功,则在USER_APPS
表中输入相应的记录。您将继续此流程,直到用户没有其他应用程序登录。完成后,请他们更新密码。
作为更新密码逻辑的一部分,您可能希望更新已在USER_APPS
表中映射的所有应用程序密码。
按照我在this question上的说明,了解如何让IdentityServer4使用现有数据库对用户进行身份验证。