为什么在多租户 Web 应用程序中使用子域来指定租户?

发布于 2024-10-17 14:35:19 字数 650 浏览 3 评论 0原文

问题

  1. 为什么某些多租户 Web 应用程序使用子域来指定租户,而其他应用程序则不然?
  2. 是否有技术、隐私或安全方面的原因?
  3. 它是否取决于用于开发 Web 应用程序的语言或框架?
  4. 这仅仅是风格或开发人员选择的问题吗?

使用子域指定租户的示例 Web 应用程序

不使用子域指定租户的 Web 应用程序示例

Questions

  1. Why do some multi-tenant web applications use subdomains to designate the tenant while others do not?
  2. Are there technical, privacy, or security reasons?
  3. Is it dependent on the language or framework used to develop the web application?
  4. Is it simply a matter of style or developer's choice?

Example Web Applications Using Subdomains to Designate Tenants

Example Web Applications Not Using Subdomains to Designate Tenants

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

对风讲故事 2024-10-24 14:35:20

在 HTTP 级别上确定租户的方法有多种:

  • 域 - 租户由整个 Host 标头确定
  • 子域 - Host 标头的子域部分、
  • 基于路径 - 路径段,通常由前缀 host.com/tenantId/...
  • 基于 cookie - cookie 值包含租户 id(好的框架对此进行加密!)
  • 基于用户 - 用户会话或服务器上的一些数据记录

以下是问题的答案:

  1. 如果您想让用户感受到完全隔离的租户,那么(子)域多租户是很好的选择。客户可能需要自定义欢迎和登录页面、单独的用户群等。另一方面,基于路径的多租户对于不固定于单租户命名空间的用户来说是有好处的。它主要由 Facebook、GitHub 等社交网络使用。

  2. (子)域可以为您提供更好的 cookie 隔离和安全控制、跨源资源共享 (CORS)。它使跨租户 CSRF 或 XSS 变得更加困难。此外,如果您可以控制 DNS 或负载均衡器,您可以将租户分配给不同的 IP(例如地理路由)或不同版本的应用程序(例如 beta 租户)。您可以为最重要的租户分配单独的应用程序实例或服务器。这样您就可以获得一个廉价的工具来控制单点故障的风险,并且所有鸡蛋都放在一个篮子里。

  3. 任何允许您访问 HTTP 标头 (Host) 的 Web 框架都支持子域。任何严肃的 MVC Web 框架都应该直接或通过插件为您提供子域作为操作参数。

  4. 这绝对是一个设计选择。如果您想知道最好的方法,请考虑您希望为租户提供何种程度的隔离。如果你决定了,但你会发现方式不对,那么你可以借助 HTTP 301 重定向迁移到另一个级别。

There are several ways to determine tenant on HTTP level:

  • domain - tenant is determined by whole Host header
  • sub-domain - sub-domain part of Host header,
  • path based - path segment, usually by prefix host.com/tenantId/...
  • cookie based - cookie value contains tenant id (good framework encrypts this!)
  • user based - user session or some data records on server

Here are an answers to your questions:

  1. (Sub-)domain multi-tenancy is good if you want to give an user a perception of fully isolated tenancy. The customer may want custom welcome and login page, separate user-base etc. On the other hand the path based multi-tenancy is good for the users who are not fixed to single tenant namespace. It is mostly used by social networks like Facebook, GitHub etc.

  2. (Sub-)domains can give you better isolation and security control for cookies, cross-origin resources sharing (CORS). It makes cross-tenant CSRF or XSS a bit harder. Moreover if you have control over DNS or Load-balancer you can assign tenants to different IPs (think geo-routing) or to various versions of application (e.g. beta tenants). You can assign a separate app instance or server for your most important tenants. This way you get a cheap tool to control risk of single point of failure and all eggs in one basket.

  3. Any web-framework which gives you an access to HTTP headers (Host) is sub-domains capable. Any serious MVC web-framework should give you sub-domain as action parameter directly or by plugin.

  4. It is definitely a design choice. If you want to know the best way think what level of isolation you want for your tenants. If you decide but you will find that the way is not right then you can migrate to another level with help of HTTP 301 redirection.

微暖i 2024-10-24 14:35:20
  1. 见下文。
  2. Cookie 是最明显的,第二个是您可以更改子域的 DNS 设置,但不能更改路径的 DNS 设置
  3. (否,
  4. 部分),请参见上文。
  1. See below.
  2. Cookies would be the most obvious, with the second being that you can change DNS settings for a subdomain but not for a path
  3. No
  4. Partially, see above.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文