每个租户

时间:2016-07-30 09:09:38

标签: asp.net-mvc asp.net-identity identityserver4

我正在考虑使用具有多租户的身份服务器和asp.net身份。这个想法是每个租户都有自己的数据库或共享数据库与用户的详细信息。

决定应对哪个数据库身份服务器进行身份验证。我通过租户acr_value,它允许登录屏幕显示哪个租户正在登录,我创建了自己的中间件,注入到我的dbcontext的构造函数中

    public MyDbContext(DbContextProvider contextProvider) {}


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

问题是当identityserver重定向到connect / token或userinfo时 - 再也没有任何东西可以识别客户端,没有redirect_uri或tenant,这意味着我无法生成我需要的连接字符串。

我在想什么?

2 个答案:

答案 0 :(得分:2)

我不会使用DI来解决问题。

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

答案 1 :(得分:0)

这就是我的2美分。不要使用不同的用户DB。我个人不会制作这样的多租户应用程序。您应该为每个用户在其一个列中创建其数据库名称的公共用户数据库。成功登录后,只需将用户与其数据库连接即可。

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

您可以完全控制所有用户。如果您想对特定用户执行任何操作,您可以使用此方法轻松完成此操作。您可以将其视为我们规范化数据库以减少数据冗余。类似地,通过创建一个通用的用户数据库并且每个用户都有一个列来指定他的数据库,您可以使其更加灵活。