【问题标题】:Specific API is added to multiple Products in API Management, want to set 'Subscription required' on API level特定 API 已添加到 API 管理中的多个产品中,希望在 API 级别设置“需要订阅”
【发布时间】:2021-08-21 06:47:00
【问题描述】:

我的 API 管理实例中有几个产品,我们称它们为 Product 1Product 2
这两款产品都添加了一个名为Inventory的API。

对于Product 1,我已将Subscription required 设置为true
对于Product 2,我已将Subscription required 设置为false

到目前为止,这很好用。

现在,我还在 Inventory API 上将 Subscription required 标志设置为 true。我想强制人们在调用此 API 时指定有效的订阅密钥。 不过,我注意到的是,API 级别的这个标志没有被强制执行(正确吗?)。 我仍然能够在没有订阅密钥的情况下调用 Inventory API。

我的猜测是,Product 2 政策推翻了在 API 级别设置的Subscription required 设置。这是正确的吗?
我的实际问题是,如何强制执行始终需要有效订阅密钥同时仍然拥有“开放”产品的特定 API?

【问题讨论】:

  • Emm,根据我的搜索,我发现产品用于grouping apis to publish,那么如何在两个产品中制作一个api,一个需要订阅密钥而另一个不需要?一个api只有一个url。我的测试结果是,当检查Subscription required时,url需要订阅密钥,而不检查时不需要密钥。 i.stack.imgur.com/zwbpM.png我忽略了一些重要的事情吗?
  • 我们确实在使用它来对 API 进行分组。我们有几个 API 的“客户”,并为每个客户创建了一个产品。目前,我们正在过渡到使用订阅,并且我们有 1 个不需要订阅的产品。但是,我们希望有几个 API 具有有效的订阅密钥。我们希望这些 API 在产品内部用于管理目的,但为访问这些 API 的各个用户/进程授予订阅。
  • 您是否创建了多个具有相同后端端点的 api 实例?
  • 目前我们使用的是相同的 API 实例。但我认为你在做某事。我们可以(或者应该)创建多个 API 实例来规避这个问题。不过,这不是我们目前可以接受的解决方案/解决方法。我希望特定 API 的(更精细的)设置会覆盖产品中的设置。

标签: azure azure-api-management


【解决方案1】:

只要 API 附加到开放产品,您就可以随时调用它而无需订阅,这是设计使然。如果您想强制发送订阅密钥,您必须将其从该开放产品中删除或将其标记为需要订阅。

由于以下原因,添加策略确实效率低下且肮脏

  1. 您需要跟踪所有订阅键值(删除、添加、重新生成...等)。

  2. 检查策略之前的所有其他策略将被执行 在请求被拒绝之前。

  3. 如果您决定更改订阅密钥标头名称,您将 必须通过所有检查策略并修改它们。

【讨论】:

  • 谢谢!你知道这种行为是否已经在文档中的某个地方描述过(也许)?我没能找到它,但可能搜索了错误的关键字。
  • 它说“API 管理中的产品可以是开放的或受保护的。受保护的产品必须先订阅才能使用,而开放的产品可以在没有订阅的情况下使用。选中需要订阅以创建受保护的产品需要订阅的产品。这是默认设置。"
【解决方案2】:

我在我这边测试它,并且也与你的功能相同。当我使用两种产品时(一种启用Requires subscription,另一种禁用Requires subscription)并且它们都有一个api。即使我启用了它的Subscription required,api 也不会检查订阅密钥。

作为一种解决方法,您可以在您的 api <outbound> 中添加一个策略,如下所示。添加的策略用于手动检查订阅密钥。

【讨论】:

  • 感谢您的验证!我想出了与您在此处提到的类似的解决方案/解决方法。感觉有点脏,但做得很好。
猜你喜欢
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 2022-01-07
  • 1970-01-01
相关资源
最近更新 更多