gpt4 book ai didi

c# - 具有 ASP.NET 标识的 Entity Framework Multi-Tenancy

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:30 25 4
gpt4 key购买 nike

如果这是与其他内容的重复,请提前致歉 - 我看到很多帖子都围绕着类似的问题,但没有解决我的具体情况。

我们正在做的是使用 ASP.NET MVC 5 和 Identity Framework 以及 Entity Framework 生成 SaaS 系统。由于安全要求,我们需要使用多数据库模型。用户将通过主“帐户”数据库进行身份验证,这会将他们链​​接到租户,然后我们将在运行时修改连接字符串,以便 DbContext 可以为租户定位正确的数据库。到目前为止,我对此没有意见。

棘手的部分是每个用户可能链接到多个租户,并能够在它们之间切换。这意味着他们将需要为每个租户设置不同的角色/声明,具体取决于每个租户中分配的权限。我不确定如何将 dbo.AspNetRolesdbo.AspNetUserRoles 表移动到租户数据库中,或者即使这是正确的策略。

数据库结构(建议)

Accounts   <--all users in here
SL3-1111 <--DB for tenant ID #1111
SL3-2222 <--DB for tenant ID #2222

我猜我需要:

  1. 将 Roles 和 UserRoles 表移动到每个租户数据库,或者
  2. 以某种方式覆盖默认行为以填充我自己的声明

我计划一旦用户指定了他们希望使用的租户,该信息将作为声明存储在 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 表结构的限制。

关于c# - 具有 ASP.NET 标识的 Entity Framework Multi-Tenancy ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31002494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com