首页 > 解决方案 > IdentityServer 用于多数据库应用程序

问题描述

我有 2 个具有不同业务逻辑的软件,不同的数据库,都是多租户,每个用户都有 TenantId 属性来识别他们组织的数据

dbo.Xpto.Where(x => x.TenantId == userLogged.TenantId);

我想统一登录和实现,我有疑问,如果每个软件都有不同identityserver的用户,我将如何捕获用户?tenantIdtenantId

我想过添加声明,例如 newClaim ("SoftwareOne:TenantId", 123)new Claim ("SoftwareTwo:TenantId", "8f8b8d87-fc07-4508-a33a-2b5f55820836")request byScope

标签: identityserver4

解决方案


您需要看到authentication与authorization分开。

使用 IdentityServer 对用户进行身份验证和一般授权(我的意思是没有特定于上下文的声明)用户。而实际授权是在本地或由单独的授权服务器完成的。

我的设置是这样的:

  • 身份上下文:用户 + 用户声明。仅用于身份验证。独立于上下文,例如作为一名自由顾问,我在不同的组织中担任特定的角色,而我的职业保持不变。

    因此,专业声明将是 UserClaim,而Role将是授权声明。

  • 授权上下文:用户(id = sub claim)+每个应用程序:角色、权限等。在单独的“本地”数据库或中央数据库中。上下文特定,仅用于授权。看看PolicyServer

    代替授权服务器或与授权服务器结合使用,您可以实现基于资源的授权

  • 业务上下文:用户(Id,Name,'外键'子声明,没有实际的数据库关系,因为表在上下文之外)+团队,配置文件,设置等。当用户表被省略时,链接到子声明值。

请在此处查看我的答案以获取更多信息。


推荐阅读