我在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:Starter
。 Finance
api也已经清除了Finance
复选框,因此不需要订阅。
Subscription required
产品具有执行JWT验证的策略。 Internal
产品没有。
在API的测试标签中,我可以通过Starter
下拉列表选择产品范围。大概这决定了要应用哪些产品政策。
在调用API时,如果我没有提供有效的令牌,JWT验证就会启动并拒绝我的请求。但是,由于我没有用于标识产品的订阅密钥,因此它可能是Apply Product Scope
或Internal
产品-系统如何确定它应该应用包含jwt-验证规则,而不是Starter
策略?
答案 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.
,该错误很有意义并消除了任何歧义。