Azure API Management无需订阅端点返回401(SubscriptionKeyInvalid)问题求助
以下是针对性的排查和解决步骤:
调整产品匹配优先级
APIM默认按产品创建顺序匹配请求,先创建的产品会优先匹配到请求。如果dev-product-admin创建时间早于无需订阅的产品,需要将无需订阅产品的优先级调高。在APIM门户的产品列表中,找到目标无需订阅产品,进入「设置」页,修改「优先级」为比dev-product-admin更高的数值(数值越小优先级越高)。检查请求头中的意外标识
查看Application Insights中Web应用请求的完整头信息,确认是否携带了Ocp-Apim-Subscription-Key、Ocp-Apim-Trace或其他与dev-product-admin订阅相关的自定义头。如果存在这类头,需要在Web应用的请求代码中移除它们,避免APIM将请求关联到对应产品。验证无需订阅产品的API关联范围
确认无需订阅产品已正确关联目标API的所有操作,尤其是这个公开端点。进入产品的「API」页,检查目标API是否已添加,且该API的目标操作未被排除。如果只需要关联单个操作,可在产品关联API时选择特定操作,而非整个API。排查产品级/全局策略的匹配逻辑
查看dev-product-admin产品的「策略」页,检查inbound部分是否存在强制匹配请求的逻辑(比如<choose>规则根据请求特征绑定到该产品)。同时检查APIM的全局策略,确保没有错误的路由或产品关联规则。添加精确的产品匹配规则
为无需订阅产品配置更精准的匹配条件,确保只有目标公开端点的请求会匹配到它。在产品的「设置」页,找到「匹配规则」,添加规则:- 方法:
GET(根据实际请求方法调整) - 路径:
/your-public-endpoint-path(替换为实际端点路径)
这样可以避免其他请求误匹配到该产品,同时确保目标请求优先匹配。
- 方法:
检查IP关联的订阅规则
查看dev-product-admin的订阅设置,确认是否配置了IP允许列表,而App Service的出站IP正好在该列表中。如果是这种情况,需要将App Service的IP从dev-product-admin的允许列表中移除,或者在无需订阅产品中添加该IP的允许规则。
内容的提问来源于stack exchange,提问作者Sam Vanhoutte

