我有2个软件,它们具有不同的业务逻辑,不同的数据库,并且都是多租户,每个用户都具有TenantId属性来标识其组织的数据
$('#seatRed').click(function(){
$('.seat').hide();
$('#redBack').show().addClass('color-overlay');
})
$('#seatBlack').click(function(){
$('.seat').hide();
$('#blackBack').show().addClass('color-overlay');
})
$('#seatBlue').click(function(){
$('.seat').hide();
$('#blueBack').show().addClass('color-overlay');
})
$('#seatTeal').click(function(){
$('.seat').hide();
$('#tealBack').show().addClass('color-overlay');
})
$('#seatWhite').click(function(){
$('.seat').hide();
$('#whiteBack').show().addClass('color-overlay');
})
$('#seatWw').click(function(){
$('.seat').hide();
$('#wwBack').show().addClass('color-overlay');
})
$('#frameRed').click(function(){
$('.frame').hide();
$('#redFrame').show().addClass('color-overlay');
})
$('#frameBlack').click(function(){
$('.frame').hide();
$('#blackFrame').show().addClass('color-overlay');
})
$('#frameBlue').click(function(){
$('.frame').hide();
$('#blueFrame').show().addClass('color-overlay');
})
$('#frameTeal').click(function(){
$('.frame').hide();
$('#tealFrame').show().addClass('color-overlay');
})
$('#frameWhite').click(function(){
$('.frame').hide();
$('#whiteFrame').show().addClass('color-overlay');
})
$('#frameWw').click(function(){
$('.frame').hide();
$('#wwFrame').show().addClass('color-overlay');
})
我想统一登录并实施dbo.Xpto.Where(x => x.TenantId == userLogged.TenantId);
,我对此感到怀疑,如果每个软件中的identityserver
用户不同,我该如何捕获用户tenantId
?
我考虑添加版权声明,例如新的tenantId
和Claim ("SoftwareOne:TenantId", 123)
并由new Claim ("SoftwareTwo:TenantId", "8f8b8d87-fc07-4508-a33a-2b5f55820836")
请求
答案 0 :(得分:0)
您需要查看身份验证与授权分开。
使用IdentityServer进行身份验证并一般授权(并且我的意思是没有特定上下文的声明)用户。实际的授权是在本地或由单独的授权服务器完成的。
我的设置如下:
身份上下文:用户+用户声明。仅用于身份验证。 与上下文无关,例如作为自由顾问,我在不同的组织中扮演着特定的角色,而我的职业却保持不变。
因此 profession 声明将是UserClaim,而 Role 则是授权声明。
授权上下文:用户(id =子声明)+每个应用程序:角色,权限等。在单独的“本地”数据库或中央数据库中。 特定于上下文,仅用于授权。看看PolicyServer。
您可以实现resource-based authorization而不是授权服务器,也可以与授权服务器结合使用。
业务环境:用户(Id,名称,“外键”子声明,由于表不在上下文中而没有实际的数据库关系)+团队,个人资料,设置等。省略了用户表时链接到子声明值。
有关其他信息,请参见我的答案here。