identityserver4 - IdentityServer 用于多数据库应用程序
问题描述
我有 2 个具有不同业务逻辑的软件,不同的数据库,都是多租户,每个用户都有 TenantId 属性来识别他们组织的数据
dbo.Xpto.Where(x => x.TenantId == userLogged.TenantId);
我想统一登录和实现,我有疑问,如果每个软件都有不同identityserver
的用户,我将如何捕获用户?tenantId
tenantId
我想过添加声明,例如 newClaim ("SoftwareOne:TenantId", 123)
和new Claim ("SoftwareTwo:TenantId", "8f8b8d87-fc07-4508-a33a-2b5f55820836")
request byScope
解决方案
您需要看到authentication与authorization分开。
使用 IdentityServer 对用户进行身份验证和一般授权(我的意思是没有特定于上下文的声明)用户。而实际授权是在本地或由单独的授权服务器完成的。
我的设置是这样的:
身份上下文:用户 + 用户声明。仅用于身份验证。独立于上下文,例如作为一名自由顾问,我在不同的组织中担任特定的角色,而我的职业保持不变。
因此,专业声明将是 UserClaim,而Role将是授权声明。
授权上下文:用户(id = sub claim)+每个应用程序:角色、权限等。在单独的“本地”数据库或中央数据库中。上下文特定,仅用于授权。看看PolicyServer。
代替授权服务器或与授权服务器结合使用,您可以实现基于资源的授权。
业务上下文:用户(Id,Name,'外键'子声明,没有实际的数据库关系,因为表在上下文之外)+团队,配置文件,设置等。当用户表被省略时,链接到子声明值。
请在此处查看我的答案以获取更多信息。
推荐阅读
- python - Sympy 图:绘制具有多个自由变量的函数(python 3.6)
- windows-subsystem-for-linux - 如何在 Windows Subsystem for Linux (WSL) 中启用 Active Directory/LDAP/Kerberos?
- microsoft-dynamics - Dynamics 365:创建自定义 Web 应用程序 UI
- html - 适合没有定义父高度的图像
- r - ggplot 的 aes() 中的属性“color”破坏了我的 ggplot 代码的“geom_line()”部分
- java - 用于查找重复单词“\\b(\\w+)(\\s+\\1\\b)+”的 Java 正则表达式问题
- angular - 带有异步子路由器的命名路由器出口
- python - 有效地平均numpy数组重复行
- javascript - 用D3计算内存中节点的文本长度
- javascript - 单击 Firefox 中的链接时,有没有办法消除蓝色突出显示?