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

APIM策略需求:基于FrontDoorID头或IP过滤器放行流量

正确的APIM策略配置方案

核心解决思路

利用APIM的<choose>条件分支策略,实现满足任一校验条件即放行的逻辑:

  • 优先校验X-Azure-FDID请求头,若匹配直接转发流量
  • 当头校验不通过时,再检查请求IP是否在允许列表,匹配则放行
  • 两者均不满足时,返回403拒绝请求

完整策略代码

<policies>
    <inbound>
        <choose>
            <!-- 分支1:X-Azure-FDID头校验通过,直接放行 -->
            <when condition="@(context.Request.Headers.GetValueOrDefault("X-Azure-FDID", "").Equals("{FrontDoorId}", StringComparison.OrdinalIgnoreCase))">
                <forward-request />
            </when>
            <!-- 分支2:头校验不通过,检查IP是否在允许列表 -->
            <when condition="@(context.Request.IpAddress != null && new System.Collections.Generic.List<string> { "{IpAddress}" }.Contains(context.Request.IpAddress))">
                <forward-request />
            </when>
            <!-- 默认分支:两者都不满足,拒绝请求 -->
            <otherwise>
                <return-response>
                    <set-status code="403" reason="Forbidden" />
                    <set-body>{"error": "请求无效 - FrontDoor ID头不正确或IP不在允许列表"}</set-body>
                </return-response>
            </otherwise>
        </choose>
    </inbound>
    <backend />
    <outbound />
    <on-error />
</policies>

关键配置说明

  1. 条件分支逻辑:通过<choose>替代原有的顺序执行校验,避免"双重校验都需通过"的问题
  2. 头校验分支:直接判断请求头值是否匹配目标ID,匹配后立即执行<forward-request>转发流量,跳过后续逻辑
  3. IP校验分支:仅当头校验失败时触发,将允许的IP放入List集合中,支持单个IP或CIDR网段(多个IP用逗号分隔添加进List即可)
  4. 错误处理:默认分支统一返回403状态码和自定义错误信息,明确拒绝原因

内容的提问来源于stack exchange,提问作者ruggler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:28:15