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

Azure APIM同一API多身份提供商配置:验证Entra令牌客户端ID

Azure APIM中混合验证Microsoft Account与Entra令牌的实现方案

常规实现方式:通过Choose分支区分验证逻辑

你提到的方案是可行的,具体落地步骤如下:

  1. 先用validate-jwt策略解析令牌,提取颁发者(iss字段)信息,这里仅完成基础解码,无需做全量严格验证。
  2. 用<choose>块根据颁发者分支处理:
    • 如果令牌来自你的Entra租户(iss匹配https://login.microsoftonline.com/{你的租户ID}/v2.0),执行validate-azure-ad-token策略,通过client-ids属性指定允许的客户端应用ID列表,完成Entra令牌的完整验证。
    • 如果令牌来自Microsoft Account公共租户(iss为https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0),使用validate-jwt策略验证MSA令牌的合法性(按需配置受众、签名密钥等规则)。

示例策略片段:

<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Invalid token" output-token-variable-name="parsedToken">
  <issuers>
    <issuer>https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0</issuer>
    <issuer>https://login.microsoftonline.com/your-tenant-id/v2.0</issuer>
  </issuers>
  <!-- 仅做令牌解码,后续分支执行严格验证 -->
</validate-jwt>

<choose>
  <when condition="@(context.Variables.GetValueOrDefault<Jwt>("parsedToken").Issuer == "https://login.microsoftonline.com/your-tenant-id/v2.0")">
    <validate-azure-ad-token header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Invalid Entra token">
      <client-ids>
        <client-id>allowed-client-id-1</client-id>
        <client-id>allowed-client-id-2</client-id>
      </client-ids>
      <tenant-id>your-tenant-id</tenant-id>
    </validate-azure-ad-token>
  </when>
  <otherwise>
    <!-- MSA令牌的严格验证逻辑 -->
    <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Invalid MSA token">
      <issuers>
        <issuer>https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0</issuer>
      </issuers>
      <audiences>
        <audience>your-api-client-id</audience>
      </audiences>
      <openid-config url="https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0/.well-known/openid-configuration" />
    </validate-jwt>
  </otherwise>
</choose>

更简洁的替代方案:单一Validate-JWT策略实现混合验证

不需要拆分策略,直接用validate-jwt的多颁发者配置+条件化必填声明就能完成需求,步骤如下:

  1. 在validate-jwt中配置包含MSA和Entra的颁发者列表。
  2. 针对Entra令牌需要验证的客户端ID(azp字段),通过<when>条件指定只有当令牌来自Entra租户时才触发该声明验证。

示例策略片段:

<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Invalid token">
  <issuers>
    <issuer>https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0</issuer> <!-- MSA租户 -->
    <issuer>https://login.microsoftonline.com/your-tenant-id/v2.0</issuer> <!-- Entra租户 -->
  </issuers>
  <audiences>
    <audience>your-api-audience</audience>
  </audiences>
  <required-claims>
    <!-- 仅当令牌来自Entra租户时,验证azp字段是否在允许列表 -->
    <claim name="azp">
      <value>allowed-entra-client-id-1</value>
      <value>allowed-entra-client-id-2</value>
      <when>@(token.Issuer == "https://login.microsoftonline.com/your-tenant-id/v2.0")</when>
    </claim>
  </required-claims>
  <openid-config url="https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration" />
</validate-jwt>

这种方式无需分支逻辑,用单一策略就能完成两种令牌的验证,同时针对Entra令牌强制执行客户端ID校验,MSA令牌则跳过该验证(仅需满足通用的颁发者、受众等规则)。

总结

不是必须使用validate-jwt+choose+validate-azure-ad-token的组合,单一validate-jwt策略通过多颁发者配置和条件化必填声明,就能更简洁地实现混合令牌验证需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:42:24