Asp.net core IdentityServer多租户实现
Asp.net core IdentityServer多租户实现,asp.net-core,asp.net-identity,identityserver4,Asp.net Core,Asp.net Identity,Identityserver4,我知道已经有很多线程面临着与IdentityServer4类似的问题,但它们都只处理部分问题。问题在于如何使用Identity server 4实现多租户。
我的应用程序的设置如下所示:
不同的租户由不同的子域分隔,如:
租户1.application.com
租户2.application.com
注意:在后台,所有子域都由同一个应用程序处理。应用程序将使用访问令牌调用一些附加服务
所有子域的身份验证都由同一identityserver实例处理。我已经通过实现相同的方法完成了这项工作,如
我知道已经有很多线程面临着与IdentityServer4类似的问题,但它们都只处理部分问题。问题在于如何使用Identity server 4实现多租户。
我的应用程序的设置如下所示:
不同的租户由不同的子域分隔,如:
- 租户1.application.com
- 租户2.application.com
注意:在后台,所有子域都由同一个应用程序处理。应用程序将使用访问令牌调用一些附加服务
所有子域的身份验证都由同一identityserver实例处理。我已经通过实现相同的方法完成了这项工作,如
这里是我的场景的一些附加信息:
可以授权一个用户访问一个或多个租户。如果用户未经身份验证并尝试访问tenant1.application.com,则会将其重定向到登录页面,并返回原始请求的返回url。我已经通过acr_值将租户传递给identityserver。
如果用户在访问登录时没有先前请求的特定于租户的应用程序页面,则应将其重定向到租户选择,在该页面中,他选择了想要访问的租户(已经阅读了关于抽象方法的内容)
如果用户已经在tenant1.application.com上进行了身份验证,并且正在切换到tenant2.application.com,则如果用户已获得租户授权(SSO),则应立即登录,而无需另一个登录要求。
此访问控制存储在数据库中的一个简单用户表中
现在是实际问题
基地已经在工作,但我无法控制租户特定的授权。如果我是一个已通过身份验证且仅为tenant1.application.com授权的用户,并且我正在切换到tenant2.application.com,则identity server将在不拒绝其他登录或访问的情况下授权该用户。
我在哪里可以检查用户是否为特定租户授权
另一点是,我如何传递acr_值或我能够设置acccss令牌的tenantId的概要文件服务的租户选择的选定租户?我尝试使用一个临时声明,但由于HttpContext中缺少用户的登录原因,该声明不起作用(如下所示)
如有任何细节遗漏或含糊不清之处,请随时询问