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

时间:2019-08-15 15:36:22

标签: azure-api-management

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

两种产品:c:\>fc c:\Users\GeoffAlexander\Documents\Python\200MiB.txt c:\Users\GeoffAlexander\Desktop\200MiB.txt Comparing files C:\USERS\GEOFFALEXANDER\DOCUMENTS\PYTHON\200MiB.txt and C:\USERS\GEOFFALEXANDER\DESKTOP\200MIB.TXT FC: no differences encountered Internal

上述两个产品中都包含一个api:StarterFinance api也已经清除了Finance复选框,因此不需要订阅。

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

在API的测试标签中,我可以通过Starter下拉列表选择产品范围。大概这决定了要应用哪些产品政策。

在调用API时,如果我没有提供有效的令牌,JWT验证就会启动并拒绝我的请求。但是,由于我没有用于标识产品的订阅密钥,因此它可能是Apply Product ScopeInternal产品-系统如何确定它应该应用包含jwt-验证规则,而不是Starter策略?

2 个答案:

答案 0 :(得分:2)

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

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

“测试”选项卡使用特殊的密钥-主密钥,除其他功能外,此密钥还使您可以强制将某个产品用于呼叫,即使其中未包含API。这对于测试目的最有用,主密钥不应真正用于生产中。

答案 1 :(得分:0)

答案是,尽管Starter产品在API屏幕中可测试,但在产品级别被标记为“需要订阅”,该产品级别覆盖了API级别设置。因此,它不是合格的政策。

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