在引入IdentityServer4之后如何处理现有应用程序中的现有用户表

时间:2017-10-23 14:39:52

标签: identityserver4

我们有几个现有的应用程序,每个都有自己的数据库(和自己的用户表,因为不同的应用程序有不同的客户)。每个应用程序都有自己的登录/更改密码/重置密码/忘记密码等。现在我们要构建一个带有IdentityServer4的中央身份验证/授权服务器,其中现有应用程序和未来的新应用程序都可以使用,不再需要执行功能谎言登录/一次又一次地更改密码/重置密码/忘记密码。

所以我的问题是我们应该如何处理那些现有的用户表?我可以看到两个选项:

  1. 保留现有用户表 当客户尝试登录到应用程序时,他将被重定向到身份服务器,它将查找现有的用户表。当不同应用程序的不同客户出现时,它将查找不同的现有用户表。

  2. 将所有现有用户表合并到身份服务器中新数据库中的单个用户表,并删除所有这些现有用户表。 但在这些应用程序中,用户登录后,程序可能仍需要访问这些用户表。如果我们合并到身份服务器中的新表,我们如何解决这个问题?我们无法直接访问身份服务器中的那个用户表,对吗?

  3. 我觉得选择2是正确的方法,但不知道究竟为什么以及如何。有谁可以向我解释一下?感谢。

1 个答案:

答案 0 :(得分:0)

以下是我的建议:

  1. 创建新用户表
  2. 为旧应用用户表创建新用户
  3. 填充新用户表
  4. 创建新用户表

    使用各个应用程序用户表中的所有公共字段创建一个新用户表。像这个例子。

    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
    )
    

    填充新用户表

    当用户尝试登录时首先搜索新表。如果没有记录,则搜索每个应用程序的用户表以查看是否找到匹配项。如果没有匹配提示用户按照您的注册过程。如果找到匹配项,请在USERSUSER_APPS表中创建新记录。向用户显示辅助屏幕,并询问用户是否使用其他具有不同用户ID和密码组合的应用程序。如果他们有其他帐户,请尝试对其进行身份验证。如果成功,则在USER_APPS表中输入相应的记录。您将继续此流程,直到用户没有其他应用程序登录。完成后,请他们更新密码。 作为更新密码逻辑的一部分,您可能希望更新已在USER_APPS表中映射的所有应用程序密码。

    按照我在this question上的说明,了解如何让IdentityServer4使用现有数据库对用户进行身份验证。