- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想设置一个 Multi-Tenancy ASP.NET MVC 应用程序。理想情况下,此应用程序应具有包含 {tenant}/{controller}/{action}/{id}
的路由,每个 tenant
代表应用程序的一个逻辑实例(简单地说独立的多用户帐户)
我仍然不清楚具体的细节是如何实现的。有任何指南可用于使用 ASP.NET MVC 设置此类 Multi-Tenancy 方案吗?
最佳答案
我目前正在开发一个类似的项目,使用 ASP.Net MVC、表单例份验证和用于成员/角色/配置文件的 SQL 提供程序。这是我正在采取的方法:
将默认路由注册为 `{tenant}/{controller}/{action}/{id}
更改标准 MVC 模板附带的 FormsAuthenticationService 的默认行为。它应该将身份验证票证的 UserData 设置为包含租户名称(来自您的路由)。
public void SignIn(string userName, bool createPersistentCookie, string tenantName)
{
var ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(30),
createPersistentCookie, tenantName);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
HttpContext.Current.Response.AppendCookie(cookie);
}
在您的 global.asax 文件中执行一些租户安全检查并允许在一个成员资格数据库中的租户之间进行用户分区
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
//Since this method is called on every request
//we want to fail as early as possible
if (!Request.IsAuthenticated) return;
var route = RouteTable.Routes.GetRouteData(new HttpContextWrapper(Context));
if (route == null || route.Route.GetType().Name == "IgnoreRouteInternal") return;
if (!(Context.User.Identity is FormsIdentity)) return;
//Get the current tenant specified in URL
var currentTenant = route.GetRequiredString("tenant");
//Get the tenant that that the user is logged into
//from the Forms Authentication Ticket
var id = (FormsIdentity)Context.User.Identity;
var userTenant = id.Ticket.UserData;
if (userTenant.Trim().ToLower() != currentTenant.Trim().ToLower())
{
//The user is attempting to access a different tenant
//than the one they logged into so sign them out
//an and redirect to the home page of the new tenant
//where they can sign back in (if they are authorized!)
FormsAuthentication.SignOut();
Response.Redirect("/" + currentTenant);
return;
}
//Set the application of the Sql Providers
//to the current tenant to support partitioning
//of users between tenants.
Membership.ApplicationName = currentTenant;
Roles.ApplicationName = currentTenant;
ProfileManager.ApplicationName = currentTenant;
}
对每个租户数据进行分区。这里有两个选项:
4a。为每个租户使用单独的数据库。这为您的租户提供了最佳的数据安全性。在共享成员资格数据库中,添加一个以每个租户的唯一 appid 为键的表,并使用该表来存储和检索基于当前租户的连接字符串。
4b。将所有数据存储在一个数据库中,并为每个表设置唯一的租户 ID。这为您的租户提供的数据安全性稍差,但仅使用一个 SQL Server 许可证。
关于asp.net-mvc - 使用 ASP.NET MVC 设置路由 {tenant}/{controller}/{action}/{id}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1699913/
我正在尝试与 Outlook 的 API 集成(更具体地说,我想列出用户的联系人,并能够对他们进行一些 CRUD)。 我在 Azure 上创建了一个 Azure 帐户、一个 Office 365 开发
我开始在我的项目中使用 django-tenant-schemas,所有数据表(用户等)完全分离。 我的要求是我可以在私有(private)服务器上为单个客户部署相同的代码库,也可以在云上为多个客户部
我已经完成了单租户身份验证,这对我来说效果很好。现在我正在将应用程序更改为 Multi-Tenancy 身份验证。我已将应用程序从 azure 的单租户更改为 Multi-Tenancy 。但我无法在
我正在尝试使用 Microsoft Graph API 访问电子邮件。当我尝试访问电子邮件时,出现以下错误。 Microsoft.Graph.ServiceException: 'Code: Orga
登录 Azure 网站后收到此错误: AADSTS50194: Application 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx' is not configur
我想从控制台应用程序定期访问 Microsoft Graph,以便将邮件从 Outlook 邮箱复制到数据库。为了以编程方式进行身份验证,我必须使用 Microsoft Graph 的“客户端凭据流”
在尝试使用 prefect server config 生成的 Docker Compose 文件为跨多个代理的 Flow 执行设置 Prefect 0.14.15 时,我惊讶地发现 Prefect
所以我正在开发一个具有多个客户端的应用程序。在每种情况下,用户都可以访问多个具有不同角色的客户端。例如,用户 A 有 ROLE_XX 为 客户端 C1 ,但是 ROLE_YY 为 客户端 C2 . 据
我目前正在制作一个将订阅作为 Multi-Tenancy 应用程序出售的 web 应用程序。我使用的技术是导轨。 但是,它不仅仅是使用当前应用程序的孤立租户。 每个租户创建产品并将其发布到他们的个人应
我试图在STS中使用带有Grails的Multi-Tenant插件。为此,我在BuildConfig.groovy中输入了一个条目,该条目编译为“:multi-tenant-single-db:0.8
我正在使用 Multi-Tenancy 架构设置 django。我浏览了https://django-tenant-schemas.readthedocs.io/en/latest/install.h
在我的终端我可以执行1)第一个命令 python manage.py tenant_command rebuild_index 2)第二个命令。 终端会询问我应该执行哪个模式。为此,我输入名为 xxx
本文整理了Java中com.github.robozonky.app.tenant.ZonkyApiTokenSupplier类的一些代码示例,展示了ZonkyApiTokenSupplier类的具体
我已经安装了 keycloak-angular 包,我使用它就像这样的描述: https://www.npmjs.com/package/keycloak-angular 问题是在我的应用程序中我想要
我正在尝试启动 Prefect 代理,以完成与 Prefect 服务器的设置。我没有使用 prefect server start 进行开箱即用的设置,而是使用 prefect server conf
我们计划将 Azure Service Fabric 用于面向数据的 Multi-Tenancy 应用程序。通常有 100 多个客户,每个客户有 5 - 100 个用户。 查看文档,我得出的结论是,最
我正在尝试在我的应用程序模型上使用 manage.py dumpdata,但我无法在我的转储文件中看到 json 数据,因为我正在使用 django-tenant-schemas 应用程序来管理各种客
我们正在为我们正在构建的自定义 Saas 应用程序评估 Shiro。似乎一个伟大的框架可以完成我们想要的 90% 的工作,开箱即用。我对 Shiro 的理解是基本的,这就是我想要完成的。 我们有多个客
当我尝试使用个人帐户连接 Microsoft Graph 时,我收到以下错误消息:AADSTS7000012:为其他租户获得了授权。 我正在学习本教程 https://github.com/Azure
我正在关注这个:https://learn.microsoft.com/en-us/graph/toolkit/get-started/build-a-web-app 正如所料,我的代码非常简单。我有
我是一名优秀的程序员,十分优秀!