2015-11-30 103 views
0

基于EntityFrameworkCustomUserService示例,我试图验证用户对单独的用户数据库。IdentityServer3自定义用户服务与自定义存储库

在工厂里,我注册的服务是这样的:

factory.UserService = new Registration<IUserService>(resolver => new CustomUserService()); 

但是,如果我想使用多个用户数据库,我怎么能注入,我要使用的存储库或连接字符串?

目标是让不同的客户端获得授权以使用来自同一授权服务器的资源(如API),但指向不同的用户存储库。所以,身份服务器会使用一个数据库来设置客户端,范围,重定向URI etxc。但要验证用户,我想使用不同的数据库,这取决于客户端。

有没有办法做到这一点?

感谢

+0

当您授权用户时,您如何识别客户端? –

回答

1

我们有一个非常类似的问题,并通过在呼叫/连接/令牌使用的acr_values即租户解决它,我们通过在除了用户名,密码等以下几点:

acr_values=tenant:YourTenantString 

YourTenantString将确定数据库环境,并从那里,你的用户服务中,您可以通过提取它:

var dbid = context.SignInMessage.Tenant; 

从DBID我们可以从配置中获取连接字符串

+0

为多租户门户动态传递连接字符串的最佳方式是什么?从我所知道的,我需要在工厂注册UserService之前设置连接字符串。有人可以提供一个例子,说明他们如何动态地将连接字符串传递给用户服务的存储库?我知道如何获取acr_value,但将连接字符串动态传递给我的实体模型让我难住。谢谢 – Keith