[英]asp.net MVC Multi-tenancy: Is there a way to override/influence User.Identity.IsAuthenticated?
[英]Entity Framework Multi-Tenancy with ASP.NET Identity
如果这是其他内容的重复,请提前道歉-我看到很多帖子都围绕着类似的问题,但没有任何内容可以解决我的具体情况。
我们正在做的是使用ASP.NET MVC 5和Identity Framework以及Entity Framework生产SaaS系统。 由于安全性要求,我们需要使用多数据库模型。 用户将通过一个“帐户”主数据库进行身份验证,该数据库将其链接到一个租户,然后我们将在运行时修改连接字符串,以便DbContext可以为该租户定位正确的数据库。 到目前为止,我对此表示满意。
棘手的部分是每个用户都可以链接到多个租约,并且可以在它们之间切换。 这意味着,根据每个租户中分配的权限,每个租户将需要一组不同的角色/声明。 我不确定的是如何将dbo.AspNetRoles
和dbo.AspNetUserRoles
表移动到租户数据库中,即使这是正确的策略也是如此。
Accounts <--all users in here
SL3-1111 <--DB for tenant ID #1111
SL3-2222 <--DB for tenant ID #2222
我想我需要:
我计划一旦用户指定了他们希望使用的租户,该信息将作为声明存储在cookie中,并随每个请求以正确的数据库为对象进行读取。
我认为您需要扔掉大部分ASP.NET Identity并使用OWIN自己制作。 首先,OWIN中间件尤其是ASP.NET MVC可以与您创建的任何ClaimsIdentity一起使用。
var identity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()));
// add any other claims here
var context = HttpContext.Current.GetOwinContext();
var authentication = context.Authentication;
var properties = new AuthenticationProperties();
properties.IsPersistent = true;
authentication.SignIn(properties, identity);
将此添加到您的Application_Start配置代码中:
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
用户登录后,可以用所需的任何声明填充ClaimsIdentity,并且可以拥有适合您的应用程序的任何数据库结构,而没有默认ASP.NET Identity表结构的限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.