我想在身份服务器4上对用户进行身份验证。我想创建一个身份服务器实例来处理来自不同数据库中用户的许多不同应用程序的请求。例如:
App 1 -> users at database A
App 2 -> users at database A
App 3 -> users at database B
App 4 -> users at database C
我是否应该将所有数据库(A,B,C)中的所有用户一起加载到身份服务器并针对所有用户验证所有应用?如果多个数据库中存在相同的用户名,该怎么办?
是否可以在用户处添加范围,以便根据应用程序用户范围过滤将要验证的用户?
答案 0 :(得分:0)
这已经晚了几年,但假设登录流程都使用 AccountController
而不是 ExternalController
进行身份验证,一种选择是创建您自己的 UserStore
来实现ValidateCredentials
、FindBySubjectId
和 FindByUsername
方法。在该类中,您将通过依赖注入传入各种 DbContext 以供上述三个函数使用。然后,当您调用任何 Find 或 Validate 函数时,您传入常规参数(即用于验证的用户名/密码、用于按用户查找的用户名和用于按主题查找的主题 ID)以及 clientId
。在 AccountController
中,您将在其中调用这些函数,您可以通过 clientId
从上下文中获取 _interaction.GetAuthorizationContextAsync(model.ReturnUrl)?.Client.ClientId
,其中 _interaction
对象是对 {{ 1}}。使用所有这些值,您可以通过首先检查 IAuthenticationSchemeProvider
然后针对与该 clientId
关联的数据库执行查询的方法检查验证和查找。