在 Azure API 管理中,当不需要订阅时,如何为 API 解决产品级策略?

Posted

技术标签:

【中文标题】在 Azure API 管理中,当不需要订阅时,如何为 API 解决产品级策略?【英文标题】:In Azure API Management How are product level policies resolved for APIs when subscriptions are not required? 【发布时间】:2019-08-15 15:36:22 【问题描述】:

我在 Azure API 管理中有以下设置:

两个产品:InternalStarter

一个 api:Finance,包含在上述两个产品中。 Finance api 也有 Subscription required 复选框清除,因此不需要订阅。

Internal 产品具有执行 JWT 验证的策略。 Starter 产品没有。

在 API 的测试选项卡中,我可以通过 Apply Product Scope 下拉菜单选择产品范围。大概这决定了应用哪些产品政策。

调用 API 时,如果我没有提供有效的令牌,JWT 验证就会启动并拒绝我的请求。但是,由于我没有用于识别产品的订阅密钥,它可能是 InternalStarter 产品 - 系统如何确定它应该应用包含 jwt-validation 规则而不是 @ 的 Internal 策略987654332@policy哪个没有?

【问题讨论】:

【参考方案1】:

当请求进来时,第一个 API 和操作被识别。然后 APIM 尝试识别订阅。如果提供了产品订阅密钥,则用于识别产品并执行其策略。如果提供了 API 订阅密钥,则会对其进行检查以匹配识别的 API,并且根本不会执行任何产品政策。

如果请求中不存在订阅密钥,APIM 会检查是否存在将 Subscription required 设置为 false 的产品,以及此类产品是否包含已识别的 API。如果有这样的匹配,将使用产品并执行其策略。如果未找到此类匹配项,APIM 将检查 API 是否已将 Subscription required 设置为 false,如果是,则调用将在没有产品的情况下继续。

“测试”选项卡使用特殊密钥 - 主密钥,除此之外,此密钥允许您强制将某个产品用于调用,即使 API 未包含在其中。这主要用于测试目的,并且不应真正在生产中使用主密钥。

【讨论】:

感谢您的全面解释。 你能指定记录在哪里吗? 我认为这在任何地方都没有明确记录。【参考方案2】:

答案是 Starter 产品虽然可在 API 屏幕中测试,但在产品级别被标记为“需要订阅”,这会覆盖 API 级别设置。因此,它不是符合条件的政策。

尝试更改此设置失败并出现错误 Product cannot be made open since it has APIs that are already part of an open product.,这很有意义并消除了任何歧义。

【讨论】:

以上是关于在 Azure API 管理中,当不需要订阅时,如何为 API 解决产品级策略?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Azure API 管理与 Paypal 集成

有没有办法通过 Azure API 管理中的订阅来改变速率限制的值

在 Azure API 管理服务上将多个产品添加到订阅

Azure 资源管理器 API 用户的订阅范围授权

为用户创建订阅的 Azure API 管理 REST 调用(缺失)

使用 JAVA API 获取我的 Azure 订阅中所有资源的详细信息