![](/img/trans.png)
[英]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.