C# 多租户MVC应用程序有时提供错误的租户
我有一个支持多租户的标准ASP.NET MVC应用程序。这段代码已经在生产中几个月了,我发现在完全随机的时间间隔内(永远无法重现这个问题),有时会从错误的租户那里为另一个租户获取数据 例如,Tenant1登录,但他们从我们的web应用程序收到一个cookie,其中包含来自Tenant2数据库的信息 My base Controller使用以下代码提取所需的租户:C# 多租户MVC应用程序有时提供错误的租户,c#,asp.net-mvc-4,multi-tenant,C#,Asp.net Mvc 4,Multi Tenant,我有一个支持多租户的标准ASP.NET MVC应用程序。这段代码已经在生产中几个月了,我发现在完全随机的时间间隔内(永远无法重现这个问题),有时会从错误的租户那里为另一个租户获取数据 例如,Tenant1登录,但他们从我们的web应用程序收到一个cookie,其中包含来自Tenant2数据库的信息 My base Controller使用以下代码提取所需的租户: protected override void Initialize(RequestContext requestContex
protected override void Initialize(RequestContext requestContext)
{
string tenant = String.Empty;
tenant = requestContext.Request.Headers["Host"].Split(':')[0];
if (tenant.Contains(".")) tenant = tenant.Substring(0, tenant.IndexOf("."));
base.Initialize(requestContext);
}
这在99.9%的情况下有效。所以我无法想象这是个问题。我唯一能确定可能出错的地方是在自定义cookie中存储值时。我必须使用HttpContext.Current才能访问当前请求并提取租户
在上面的代码中,或者在我使用的HttpContext.Current中,有人能看到任何可能导致为任何特定请求提取错误租户的内容吗
问题可能发生在数据层附近,但是租户总是传递到数据层,以便将查询指向正确的数据库,因此我确信有时返回的租户是错误的
非常感谢,,
Gary这原来是实体框架中的一个bug。实际上,如果发生迁移或长时间运行的任务,缓存连接字符串将允许错误的连接为另一个传入线程提供服务 确保已更新到6.1.2或更高版本 干杯,
Gary如何分析SQL Server查询。然后识别调用此查询的DAL/服务。这有助于跟踪记录的来源;我希望您对用户所属租户的检查比头变量多。。。这听起来像是一个等待被利用的安全漏洞…:)你好,努赛特。在这方面你有什么建议吗?否则如何根据入站URL请求确定租户?那么,人们到底是如何操作的呢?你是如何从url解析租户的?我无法确定在何处保存租户url,以便在应用程序的其余部分中可用。@Picflight:我的所有控制器都从BaseController继承。我重写了Initialize方法,在那里我在BaseController上设置了一个公共属性,如下所示:string domain=string.Empty;domain=httpContextBase.Request.Headers[“Host”].Split(“:”)[0];如果(domain.Contains(“.”)domain=domain.Substring(0,domain.IndexOf(“.”));