You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一Azure APIM下API互调无需订阅密钥的配置方法

实现Azure APIM内部API互调免订阅密钥,外部调用需验证密钥的配置方案

核心思路

通过APIM的策略条件判断,识别请求是否来自APIM自身实例:内部调用时跳过订阅密钥验证,外部调用强制验证密钥。

具体配置步骤

  1. 为目标API添加条件化订阅验证策略
    登录Azure门户进入你的APIM实例,分别对API A和API B执行以下操作:

    • 进入API的「设计」标签页,找到「入站处理」区域,点击「添加策略」
    • 选择「高级编辑器」,替换为以下策略代码:
      <choose>
          <!-- 识别APIM内部调用:请求Host匹配APIM服务名 -->
          <when condition="@(context.Request.OriginalUrl.Host.Equals(context.Deployment.ServiceName, StringComparison.OrdinalIgnoreCase))">
              <!-- 内部调用直接放行,跳过密钥验证 -->
          </when>
          <!-- 外部调用强制验证订阅密钥 -->
          <otherwise>
              <check-subscription key-header="Ocp-Apim-Subscription-Key" />
          </otherwise>
      </choose>
      
    • 保存策略,确保该策略在入站处理中优先执行(避免被其他策略干扰)
  2. 配置API内部调用的地址
    当API A调用API B(或反向调用)时,必须使用APIM的默认服务域名(格式:{你的APIM服务名}.azure-api.net)发起请求。此时请求Host会匹配APIM服务名,触发策略中的内部调用判断,跳过密钥验证。

  3. 验证配置效果

    • 内部调用测试:在APIM门户的「测试」控制台调用API A,触发其对API B的内部调用,确认无需携带订阅密钥即可成功返回结果
    • 外部调用测试:用Postman、curl等工具直接请求API A/B的公网地址,不携带Ocp-Apim-Subscription-Key头部时,应返回401 Unauthorized;携带有效密钥则正常响应

注意事项

  • 如果APIM使用了自定义域名,建议内部调用仍用默认服务域名,外部调用使用自定义域名,条件判断可正常生效
  • 若需支持自定义域名下的内部调用,可修改条件判断逻辑,将自定义域名加入允许列表,例如:
    <when condition="@(context.Request.OriginalUrl.Host.Equals(context.Deployment.ServiceName, StringComparison.OrdinalIgnoreCase) || context.Request.OriginalUrl.Host.Equals("你的自定义域名", StringComparison.OrdinalIgnoreCase))">
    
  • 确保API A和API B都应用了上述条件策略,双向互调才能均免密钥

内容的提问来源于stack exchange,提问作者Juan Francisco Porto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 04:45:45