限制 Azure 应用服务自定义域访问特定租户

Posted

技术标签:

【中文标题】限制 Azure 应用服务自定义域访问特定租户【英文标题】:Restrict azure app service Custom domain access to specific tenant 【发布时间】: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 令牌并存储为声明并使用它

所以问题是,有什么方法可以保护这些自定义域,以便只有特定客户可以访问它?就像在他们的 *** 中一样? 听说 App 服务最多可以添加 500 个域?如果需要,有什么办法可以延长吗? 我们将有负载均衡器,这个客户域会对此有什么影响吗?

【问题讨论】:

【参考方案1】:

将您的多租户应用限制为特定租户

有两个步骤可以开始使用租户限制。

首先,确保您的客户端可以连接到正确的 地址。 其次,配置您的代理基础架构。

要使用租户限制,您的客户端必须能够连接到以下 Azure AD URL 以进行身份​​验证:login.microsoftonline.com、login.microsoft.com 和 login.windows.net。此外,要访问 Office 365,您的客户端还必须能够连接到在 Office 365 URLs and IP address ranges 中定义的完全限定域名 (FQDN)、URL 和 IP 地址

有关如何配置代理和上述过程的信息,请参考here。

配置后输出如下:


将您的多租户应用限制为特定用户

如果应用受 Azure AD 保护,则所有成功进行身份验证的用户都可以使用它。但我们将有限制特定用户访问的要求。传统上,这可以根据角色在应用程序中完成。

租户管理员和开发人员还可以使用此内置 Azure AD 功能将应用限制为租户中的一组特定用户或安全组。

第 1 步

以全局管理员身份登录Azure 门户。在顶部的 Azure 栏中搜索“Azure Active Directory”。

第 2 步 从属性左窗格中查找“企业应用程序”,如下所示,

第 3 步

查找您想要的 AD 应用程序,如果您没有找到您的应用程序,请从“应用程序类型”下拉列表中选择“所有应用程序”并使用其他过滤器来查找该应用程序。

第 4 步

选择应用程序后,在左侧菜单中选择“属性”并将“需要用户分配”选项启用为“是”,然后单击“保存”以更新此配置更改。

第 5 步

进行用户分配:在应用程序的左侧导航菜单中选择“用户和组”。点击顶部的“添加用户”。

第 6 步

它将带您进入下一页,您可以在其中选择可以访问使用此特定 Azure AD 应用身份验证实现的应用服务的用户。

现在,当任何有效的 AD 用户尝试登录您的 Azure 应用服务时,该用户将成功通过身份验证,但何时允许用户仅根据我们现在所做的配置授权应用程序。

有关详细信息,请参阅 Microsoft 文档中的 here。


听说一个应用服务最多可以添加 500 个域?如果需要,有什么方法可以扩展吗?

是的,你听到的是正确的!

您可以尝试联系 Azure 支持以增加限制:

在 Azure 门户中导航到您的订阅 点击Usage + Quota 点击Request increaseQuota Type 字段中选择Other Request 填写请求的所有其他字段

【讨论】:

您好@RashmiMS,如果回答对您有帮助,请您Accept it as an Answer,以便遇到相同问题的其他人可以找到此解决方案并解决他们的问题。

以上是关于限制 Azure 应用服务自定义域访问特定租户的主要内容,如果未能解决你的问题,请参考以下文章

Azure Front Door、应用服务访问限制和 AD 身份验证

限制 Azure 应用程序访问 OneDrive 中的特定文件夹

将Azure SQL Server的访问权限限制为特定的azure Web应用程序

在没有 Office 365 订阅的情况下使用 Azure 多租户应用程序访问用户日历信息

使用不同租户上的 Azure Active Directory 访问 Azure Service Fabric 应用程序上的 Key Vault

django 上多租户应用程序的最佳架构