将多个产品添加到 Azure API 管理服务上的订阅
Add multiple products to subscription on Azure API Management Service
在我们开发 SaaS API 时,我们正在使用 Azure API 管理服务来管理 API。
我们定义了 API 产品,如下所述:
- 组织(产品)该产品包含用于管理组织的 API 集。
- Inventory(产品)该产品包含 API 套来管理库存和库存。
- 员工(产品)该产品包含一组 API 来管理员工。
我想用 Azure API 管理服务实现的是-
- 我不想为单独的产品创建单独的订阅。
- 我想将多个产品添加到一个订阅中。
- 这样我就可以使用单个订阅密钥访问所有 API 不同产品。
这可能吗?
提前致谢。
PS:请参阅下图了解我想要实现的目标。
不,据我所知,你所寻求的是不可能的。
Azure API 管理层目前提供以下订阅范围
1) 所有 APIs:此范围提供对 APIM 托管的所有 APIs 的访问
2) 单个 API:此范围提供对单个 API 托管 APIM 的访问
3) 产品:当 API 在产品中分组时,此范围允许提供对组的访问。该范围仅支持每个订阅一个产品
因此理论上,当您想要向不同的用户授予对不同 API 的访问权限时,您将必须为用户创建单独的产品并分配对产品的订阅。
API 管理支持访问组。产品可以在访问控制下设置访问组。这将使只有属于该组成员的用户才能在 ApiManagement 中看到它。这样做,您可以只为所有 API 创建一个订阅,并使用访问策略进行过滤,以验证您只能使用允许的 API,因为访问组。
我在 API 上使用了以下策略来确保用户具有访问权限以及 AllApis 订阅:
<choose>
<when condition="@(context?.User?.Groups == null || !(context.User.Groups.Any(q => q.Id == context?.Api?.Id)))">
<return-response>
<set-status code="401" reason="Unauthorized" />
<set-header name="WWW-Authenticate" exists-action="override">
<value>Unauthorized. Subscription key not valid for this API."</value>
</set-header>
</return-response>
</when>
</choose>
总而言之,这最终实现了对 API 的自定义访问,仅使用一个订阅密钥。您可以选择用户和 API 访问的任意排列。
在我们开发 SaaS API 时,我们正在使用 Azure API 管理服务来管理 API。
我们定义了 API 产品,如下所述:
- 组织(产品)该产品包含用于管理组织的 API 集。
- Inventory(产品)该产品包含 API 套来管理库存和库存。
- 员工(产品)该产品包含一组 API 来管理员工。
我想用 Azure API 管理服务实现的是-
- 我不想为单独的产品创建单独的订阅。
- 我想将多个产品添加到一个订阅中。
- 这样我就可以使用单个订阅密钥访问所有 API 不同产品。
这可能吗?
提前致谢。
PS:请参阅下图了解我想要实现的目标。
不,据我所知,你所寻求的是不可能的。
Azure API 管理层目前提供以下订阅范围
1) 所有 APIs:此范围提供对 APIM 托管的所有 APIs 的访问 2) 单个 API:此范围提供对单个 API 托管 APIM 的访问 3) 产品:当 API 在产品中分组时,此范围允许提供对组的访问。该范围仅支持每个订阅一个产品
因此理论上,当您想要向不同的用户授予对不同 API 的访问权限时,您将必须为用户创建单独的产品并分配对产品的订阅。
API 管理支持访问组。产品可以在访问控制下设置访问组。这将使只有属于该组成员的用户才能在 ApiManagement 中看到它。这样做,您可以只为所有 API 创建一个订阅,并使用访问策略进行过滤,以验证您只能使用允许的 API,因为访问组。
我在 API 上使用了以下策略来确保用户具有访问权限以及 AllApis 订阅:
<choose>
<when condition="@(context?.User?.Groups == null || !(context.User.Groups.Any(q => q.Id == context?.Api?.Id)))">
<return-response>
<set-status code="401" reason="Unauthorized" />
<set-header name="WWW-Authenticate" exists-action="override">
<value>Unauthorized. Subscription key not valid for this API."</value>
</set-header>
</return-response>
</when>
</choose>
总而言之,这最终实现了对 API 的自定义访问,仅使用一个订阅密钥。您可以选择用户和 API 访问的任意排列。