1

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

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

    public MyDbContext(DbContextProvider contextProvider) {}


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

问题是当身份服务器重定向到连接/令牌或用户信息时 - 不再有任何东西可以识别客户端,没有 redirect_uri 或租户,这意味着我无法生成我需要的连接字符串。

我想的可能吗?

4

2 回答 2

2

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

在用户服务中,使用 acr 值来确定要转到哪个用户数据库。更容易 - 更少的魔法。

于 2016-08-14T08:47:57.587 回答
0

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

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

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

于 2016-07-30T09:24:30.133 回答