【发布时间】:2021-11-29 14:48:28
【问题描述】:
我正在开发托管在 azure app 服务上的多租户 Web 应用程序。 它有两部分,一是后端服务,它具有使用 .NET CORE 开发的纯 API,二是使用这些 API 并使用 Angular 开发的前端。
我们使用单实例,每个租户的数据库概念,每个用户都将拥有自己的数据库。 因此会有一个目录 Db ,其中将保存有关每个客户的租户 ID、租户的数据库连接字符串、客户 ID 等信息。
我们现在不想使用 Azure AD,因为我们的 API 连接到不同的 ERP 来验证用户和数据。
为了实现多租户,我们考虑了两种方式
-
称为 TenantKey 的唯一秘密 ID(我们将在 TenanatId 上使用一些散列函数)
所以每次他们登录时,他们都需要输入这个 TenantKey 以及 UserId 和 password ,所以我们根据那个 TenantKey 验证这个用户,并根据这个获取数据库连接字符串。 我们通过使用从 CatalogDb 获取的连接字符串连接到他们自己的数据库来验证用户。 一旦我们验证,我们就会生成 JWT 令牌,并且租户自己的 Db 的这个 Connection 字符串存储为 Claim,并且每次用户使用这个令牌调用任何 API 时都会使用。
这很好,但是
- 用户每次登录时都必须记住并输入此 TenanatKey 以及 UserId 和密码...这可能对用户不友好...
- 由于它是多租户应用程序,如果其他租户知道 TenantKey,只要他们知道凭据,他们就可以访问信息(很少见,但可能)
- 自定义域
由于 Azure 提供了将自定义域添加到 Azure App 服务的方法,通过它我们可以识别租户而不是 TenatKey,我们将使用此自定义域在目录 Db 中查找连接字符串,创建 JWT 令牌并存储为声明并使用它
所以问题是,有什么方法可以保护这些自定义域,以便只有特定客户可以访问它?就像在他们的 VPN 中一样? 听说 App 服务最多可以添加 500 个域?如果需要,有什么办法可以延长吗? 我们将有负载均衡器,这个客户域会对此有什么影响吗?
【问题讨论】:
标签: dns azure-web-app-service vpn multi-tenant custom-domain