在多租户环境中处理重复和跨租户帐户

时间:2015-06-30 19:33:21

标签: design-patterns multi-tenant

是否有一种很好的“审查”方式来处理为不同租户提供同一帐户的多个副本?是否有一些推荐的设计模式?

在我的情况下,我们的应用程序根据URL路由租户:

https://ten_a.software.com  --> selects "ten_a" tenant
https://ten_b.software.com  --> selects "ten_b" tenant

我遇到了这个问题:

拥有ten_a帐户的Bob尝试登录ten_b.software.com,甚至softare.com。如果Bob只是在他的浏览器中键入URL,那么让他知道使用正确的地址并不多,但当另一个实体尝试通过OAuth2交换验证Bob时,这会变得更加复杂。该第三方可能不知道哪个租户指示其身份验证请求。我在这里只看到两个解决方案:

  1. 要求Bob输入他的租户信息以及他的用户名/密码。大减是用户体验和UI开销。
  2. 根据用户名实施租户路由器。这里的大减去这似乎是一个雷区。当Bob在两个不同的租户上拥有一个帐户时,情况会变得更加复杂。
  3. 我在这里遗漏了什么吗?

1 个答案:

答案 0 :(得分:1)

我在这里扭曲你的问题。假设Bob在ten_aten_b上都有帐户?

如果要向Bob提供一个网络范围的帐户,该帐户可以将Bob的特定于租户的帐户链接在一个用户下,这将简化对第三方身份验证的支持。在一个模棱两可的情况下,仍然会有UI开销,因为Bob必须选择正确的租户,但那是必要的恶意。

如果问题是Bob @ ten_a与Bob @ ten_b不同,那么URL路由变得至关重要,特别是考虑到OAuth支持。仅在Bob访问特定租赁时启用OAuth(例如ten_a.software.com)。尝试使用OAuth登录software.com会失败。

如果Bob忘记了特定于租户的URL,则应该是租户管理员有责任提醒他。

这大致是Google Apps在我多年前拥有帐户时仍在使用的模式。