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

Azure APIM如何验证JWT与Ocp-Apim-Subscription-Key归属同一用户

APIM跨凭证盗用防护方案

你当前的配置仅对JWT和Ocp-Apim-Subscription-Key分别做了合法性校验,未做二者的主体关联校验,才会出现不同用户的凭证混用可正常访问的漏洞,可通过以下方案修复:

核心修复步骤

  • 提前确认AAD B2C签发的JWT中包含用户唯一标识声明,通常默认自带oid声明(对应用户在AAD B2C中的全局唯一ID),如果没有可以在B2C的用户流中配置新增该声明的释放。
  • 在Azure APIM的对应API/产品的入站策略中添加主体绑定校验规则,示例策略如下:
<policies>
  <inbound>
    <!-- 校验订阅密钥与JWT用户主体一致性 -->
    <choose>
      <when condition="@(context.User.Id != context.Jwt.Claims.GetValueOrDefault("oid", ""))">
        <return-response>
          <set-status code="403" reason="Forbidden" />
          <set-body>订阅凭证与用户身份不匹配</set-body>
        </return-response>
      </when>
    </choose>
  </inbound>
</policies>

上述策略的逻辑为:先获取当前请求所用订阅密钥对应的APIM用户ID,再解析JWT拿到oid声明的用户ID,二者不一致直接返回403拒绝访问。

  • 如果你是给企业合作伙伴开通的订阅,订阅归属是应用而非个人用户,就把校验逻辑替换为JWT中的appid声明和订阅关联的应用ID比对即可。

补充加固方案

  • 为所有订阅设置密钥过期时间,每3~6个月强制轮换一次,降低密钥泄露后的长期风险。
  • 把JWT的有效时长控制在30分钟以内,即使JWT被盗,可用窗口也非常有限。
  • 新增访问行为风控规则:同一订阅密钥1小时内出现3个以上不同用户ID的JWT访问时,自动触发密钥冻结和告警通知。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:15:03