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

Azure APIM:如何阻止全局JWT验证策略执行,保留产品级证书认证

解决APIM全局JWT策略与特定API证书认证冲突的问题

我完全理解你遇到的困扰——APIM的策略执行顺序(全局→产品→API→操作)确实会让全局策略优先触发,哪怕你在产品级别配置了其他认证方式。下面给你几个直接可行的解决方案,既能保留全局JWT验证对现有API的作用,又能让新API只走证书认证:

方案1:在全局JWT策略中添加条件排除目标API

这是最直接的方法,通过<choose>策略让全局JWT验证仅对除新API外的其他API生效。

示例代码(基于API名称判断)

<choose>
    <when condition="@(!context.Api.Name.Equals("你的新API名称", StringComparison.OrdinalIgnoreCase))">
        <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Invalid token">
            <!-- 这里保留你原有的JWT验证配置,比如密钥、受众等 -->
        </validate-jwt>
    </when>
</choose>

优化:用API ID判断(更准确)

如果担心API名称可能重复,可以改用唯一的API ID来判断:

<choose>
    <when condition="@(!context.Api.Id.Equals("你的新API唯一ID", StringComparison.OrdinalIgnoreCase))">
        <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Invalid token">
            <!-- 原JWT配置 -->
        </validate-jwt>
    </when>
</choose>

你可以在APIM新UI的新API概述页面找到ID(URL末尾的字符串),或者进入API的「设置」面板查看。

方案2:用标签批量管理需跳过JWT的API

如果以后可能有更多API需要跳过JWT验证,推荐用标签来批量控制:

  1. 给新API添加一个自定义标签(比如SkipJWTValidation)
  2. 修改全局策略如下:
<choose>
    <when condition="@(!context.Api.Tags.Contains("SkipJWTValidation"))">
        <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Invalid token">
            <!-- 原JWT配置 -->
        </validate-jwt>
    </when>
</choose>

后续只要给API添加这个标签,就能自动跳过全局JWT验证,非常灵活。

为什么移除全局策略会导致产品级策略失效?

大概率是操作时的误触——APIM的全局策略和产品级策略是独立的,移除全局策略不应该影响产品级策略。你可以检查下产品级的证书认证策略是否还存在,或者是否配置了依赖全局变量的逻辑。

这些方案都不需要改动现有API的配置,也能确保新API只执行产品级的证书认证策略,同时保留全局JWT对其他API的保护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:11:01