【问题标题】:Q: Multi-Tenant Azure API Management Design问:多租户 Azure API 管理设计
【发布时间】:2022-02-08 04:10:11
【问题描述】:

我在 Azure APIM 上实现了一些受订阅密钥保护的 API,并且一切正常。

我确实有一个限制,因为不能修改客户端应用程序(*),我只能将 URL 设置为参数(即:没有额外的标头)。我通过实现一个客户可以在本地部署并添加订阅密钥的小型代理应用程序来解决这个限制。换句话说,客户端应用程序连接到本地 URL,然后代理调用 API。这也很好用。

不过,我想为潜在客户提供更简单的评估,而无需部署代理。我想我可以为每个客户提供他们自己的租户 URL(例如:guid.mydomain.com),然后在 Azure APIM 上使用该信息来查找身份验证密钥并调用后端 API。这是我想不通的部分。

我正在寻找替代设计理念或如何使其发挥作用的提示。

有什么想法吗?

马可

(*) 它属于另一家公司。

【问题讨论】:

  • 我仍然不确定您要实现什么目标,但 apim 中有多个自定义域可用于高级层中的网关端点。 docs.microsoft.com/en-us/azure/api-management/…
  • 谢谢,我知道了。我希望允许潜在客户通过 guid.mydomain.com 之类的子域访问 API,并使用 guid 查找订阅密钥,然后将其传递给后端 API。
  • 如果您使用通配符证书,您可以这样做,但您必须为每个客户端创建一个自定义域,这根本不是有效的方法,您会遇到限制。为什么不将订阅作为路径或查询参数发送(i.r /subscriptionKey 或 ?subscriptionKey = key)。 APIM 使您可以选择将密钥作为查询参数或作为标头发送。在 api 设置下查看该选项。
  • 谢谢,但查询参数不是一个选项。客户端应用程序需要一个解析为 IP 地址的 URL。事实上,这个想法是创建子域,而不是每个租户不同的域。

标签: azure api multi-tenant azure-api-management


【解决方案1】:

对于那些可能感兴趣的人,我通过添加一组新的 azure 函数和子域的自定义通配符证书解决了这个问题。

在 azure 函数中,可以在 HttpRequest.Host 属性中找到域和子域信息。在我的例子中,子域等同于租户 ID,然后我可以使用它来检索订阅密钥并调用 APIM API。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多