Azure API 网关根据租户 ID 将 url 重新路由到不在 Azure 上托管的后端应用程序?

Posted

技术标签:

【中文标题】Azure API 网关根据租户 ID 将 url 重新路由到不在 Azure 上托管的后端应用程序?【英文标题】:Azure API gateway reroute urls based on tenant Id to backend application which are not hosted on Azure? 【发布时间】:2020-05-31 11:08:37 【问题描述】:

我有以下要求。

目前,我们为每个租户提供不同的后端公共 API 应用程序(不在 Azure 中)。我们正在构建一个移动应用程序。为此,我们提出了一个集成层,我们使用 Azure Logic Apps 从后端 API 应用程序调用多个 API。

此逻辑 APP url 将进一步与 API 管理集成。

但我们正在寻找一种可能性,根据我们作为查询字符串参数传递的租户 ID,将请求重新路由到相关的后端 API 应用程序。

谁能帮我了解 Azure API 网关是否支持将 URL 重新路由到外部面向公众的应用程序(支持的应用程序不在 Azure 中)?

我们计划将后端应用程序移至 AZURE,但不在附近。与此同时,我们想要一个解决方案。

目前我们将主机名和租户 ID 存储在表存储中。因此,根据租户 ID,我们正在获取主机名并使用相关主机名形成 URL。

任何其他替代想法也非常值得赞赏。如果您需要任何其他信息,请告诉我?

【问题讨论】:

【参考方案1】:

我相信您采用的方法是正确的。在 APIM 中也可以通过使用set-backend-service 策略来实现。

您可以使用send-request 策略从 APIM 中的表存储中获取主机名(cache the result 以获得更好的延迟)。

或者您可以使用Named Values 来存储映射并完全删除表存储。

【讨论】:

目前我们正在一个单独的逻辑应用程序中执行所有这些基于租户的映射,并将其作为基本 API 的一部分进行调用,该 API 将执行多个后端请求并聚合结果并将其发送回。但是所有这些我们都可以在 APIM 策略级别上做。所以我的问题是,在 APIM 策略中做所有这些事情而不是在逻辑应用程序/持久功能中做这些事情会有什么优势吗?它只是一种味道吗? 虽然有可能,但 APIM 最适合作为具有安全性、速率限制等功能的 API 的前端,并且不应该像聚合那样涉及大量处理。如果意图只是像您的原始帖子一样基于密钥进行路由,应该没问题。但是,如果您需要任何类型的处理,最好使用函数/逻辑应用程序,如果需要,只需在它们前面加上 APIM。

以上是关于Azure API 网关根据租户 ID 将 url 重新路由到不在 Azure 上托管的后端应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 abp 的 ocelot 时如何将租户 ID 发送到下游服务

Azure API - 无法从 API 管理访问 API 网关 URL

如何将请求路由到正确的租户 API 网关?

AZURE - 如何将资源从租户迁移到另一个租户

Microsoft Azure API 列出所有租户

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