我正在尝试创建一个多租户SaaS网站,并且已经阅读了很多关于该主题的主题,但是仍然有一些我不确定的事情。
大多数示例使用Request.Url.Host
来确定租户。问题是检查租户的最佳位置在哪里,是Controller constructor
还是global.asax
?因为需要检查每个请求,我猜测租户/主机映射应该存储在某个哈希表中吗?
IIS和应用程序池如何适应所有这些,我是否仍然需要为每个租户提供一个IIS站点+应用程序池,但是将这条路径指向同一位置?或者我只需要一个站点+应用程序池?
对于每个租户网站的身份验证,我猜我们只需将cookie设置为租户域/子域名?
HttpCookie cookie = FormsAuthentication.GetAuthCookie(username, true);
cookie.Domain = "subdomain.domain.com"
您如何为特定租户缓存数据? HttpRuntime.Cache["CacheData"]
这个缓存不适用于每个租户吗?
答案 0 :(得分:1)
关于这一切的一些想法:
Request.Url.Host很好。您可以使用Global.asax或自己的(抽象)基本控制器(我总是称之为ControllerBase
)。我不建议你在你编写的每一个控制器中使用它 - 尝试将所有必需的东西放在某种配置类中并在BaseController的应用程序Start或on Demand上加载它 - 你可以改变这样一个基础的构造函数用于获取租户标识符的类。
您可以同时执行这两项操作 - 如果您只是将绑定添加到单个站点和应用程序池,这可能是最简单的。
这是一种方法,但您也可以进行某种基于声明的身份验证,其中包含目标租户
您可以创建一个依赖于您的租户的缓存(因为您可以定义依赖于登录用户的缓存。
答案 1 :(得分:0)