Azure API Service已勾选订阅必填,为何调用时仍无需API密钥?
以下是你需要检查和配置的几个关键点:
确认调用的是APIM的API端点,而非直接访问App Service
很多时候出现这种情况是因为你直接请求了App Service的原始URL,绕开了APIM的验证。你需要使用APIM提供的API网关地址(格式一般是https://<你的APIM名称>.azure-api.net/<API路径>)来调用,而不是App Service的*.azurewebsites.net地址。检查API的所有操作是否都启用了订阅必填
即使在API级别勾选了「Subscription Required」,个别操作可能被单独取消了该设置。进入APIM的API详情页,切换到「设计」标签,逐个检查每个操作的设置,确保每个操作都继承了API级别的订阅必填配置,或者单独勾选了该选项。确保API已关联到APIM产品
订阅密钥是和APIM的「产品」绑定的,如果你的API没有添加到任何产品中,APIM不会对其进行订阅验证。进入APIM的「产品」页面,选择对应的产品(比如默认的「Starter」或「Unlimited」),在「API」标签下添加你的API,保存后再测试。检查APIM的入站策略是否包含订阅验证
勾选「Subscription Required」后,APIM应该自动添加<validate-subscription-key>策略到入站流程中,但如果策略被修改过,可能会丢失这个验证步骤。进入API的「设计」标签,点击「代码编辑器」,检查入站策略部分是否存在类似以下的代码:<validate-subscription-key header-name="Ocp-Apim-Subscription-Key" query-parameter-name="subscription-key" />如果没有,手动添加这段代码并保存。
确认订阅的状态为「Active」
虽然你已经创建了订阅密钥,但如果订阅状态是「Disabled」或「Expired」,验证逻辑可能异常。进入APIM的「订阅」页面,找到你创建的订阅,确认其状态为「Active」。
完成以上配置后,重新用Postman调用APIM的API端点,不携带订阅密钥应该会返回401 Unauthorized或403 Forbidden的错误,携带正确的密钥才能正常访问。
内容的提问来源于stack exchange,提问作者mrmicrowaveoven

