2016-07-30 37 views
0

我正在寻找使用身份服务器和多租户的asp.net身份。这个想法是,每个租户将拥有自己的数据库或共享数据库与用户的详细信息。Identityserver identitydb每个房客的上下文

决定应对哪个数据库标识服务器进行身份验证时。我穿过租户acr_value允许登录界面显示的租户正在登录,我已经创建了自己的中间件注入到构造为我的DbContext

public MyDbContext(DbContextProvider contextProvider) {} 


    public DbContextProvider (IHttpContextAccessor context, IdentityServerContext ctx) 
    { //we can get the host/acr_values in here } 

问题是,当identityserver重定向连接/令牌或用户信息 - 再也无法识别客户端了,没有redirect_uri或租户,这意味着我无法生成我需要的连接字符串。

是我在想什么?

回答

0

就我这2分钱。不要使用不同的用户数据库。我个人不会这样做多租户应用程序。您应该为每个用户在其某个列中具有其数据库名称的情况建立一个通用用户数据库。成功登录后,只需将用户连接到他们的数据库。

使用这种方法,您的应用程序可以表现为公共应用程序,任何用户都可以自行注册。因为,你有一个普通的用户数据库,你需要做的就是在用户注册时运行一些验证,并针对该用户或公司生成一个新的数据库。

您将完全控制所有用户。如果您想对特定用户执行任何操作,则可以使用此方法轻松完成此操作。您可以将它想象为我们规范化数据库以减少数据冗余。同样,通过制作一个通用的用户数据库,每个用户都有一个列来指定他的数据库,这使得它更加灵活。

+0

这原本是我计划实现它的原因 - 然而,有些客户非常关心将他们的数据与其他用户分开,这意味着我无法将用户数据存储在共享数据库中 – kiwijus

+0

您的客户甚至想要分开他们的登录用户名和密码哈希值是分开的? –

2

我不会用DI来解决问题。

在用户服务中,使用acr值来确定要去哪个用户DB。更容易 - 而且不那么神奇。