Azure 应用程序网关中的 JSON Web 令牌 (JWT) 验证 (预览版)

Microsoft Entra JSON Web 令牌(JWT)功能使 Azure 应用程序网关 能够验证传入 HTTPS 请求中 由 Microsoft Entra ID (前 Azure Active Directory)颁发的 JSON Web 令牌(JWT)。 这为 Web API 或任何受保护的资源提供首次跃点身份验证,而无需在后端应用程序中自定义代码。 此功能验证传入请求中令牌的完整性和真实性,并确定在将流量转发到后端服务之前是允许还是拒绝访问。 成功验证后,网关会将 x-msft-entra-identity 标头注入请求并将其转发到后端,使下游应用程序能够安全地使用已验证的标识信息

通过在边缘执行令牌验证,应用程序网关简化了应用程序体系结构,并增强了整体安全态势。 JWT 验证是无状态的,这意味着每个请求都必须提供一个有效的令牌才能授予访问权限。 不会维护任何基于会话或 Cookie 的状态,确保跨请求进行一致的验证,并与 零信任 原则保持一致。

重要

Azure 应用程序网关中的 JWT 验证目前为 公共预览版。 此预览版在没有服务级别协议的情况下提供,不建议用于生产工作负荷。 某些功能可能不受支持或者受限。 有关详细信息,请参阅适用于 Azure 预览版的补充使用条款

关键功能

  • 令牌验证:验证 JWT 签名、颁发者、租户、受众和生存期
  • 标识传播:将 x-msft-entra-identity 标头中包含的 tenantId:oid 注入到后端
  • 灵活操作:为无效令牌配置拒绝(返回状态码 401)或允许(转发而不带身份标头)
  • 多租户支持:支持常见、组织和使用者租户配置
  • 仅 HTTPS:功能需要 HTTPS 侦听器(不支持 HTTP)

注释

令牌必须由 Microsoft Entra ID 颁发

先决条件

  • 应用程序网关要求

    • SKU:Standard_v2或WAF_v2(不支持基础 SKU)
    • 协议:需要 HTTPS 侦听器(已配置 TLS/SSL 证书)
    • API 版本:Azure 资源管理器 API 版本 2025-03-01 或更高版本
  • 网络要求

    • 从应用程序网关子网通过 TCP 端口 443 到 login.partner.microsoftonline.cn 的出站连接
  • Microsoft Entra ID 要求

    • 在 Microsoft Entra ID 中注册 Web API
    • 调用 Microsoft Entra ID 以请求访问服务。 Microsoft Entra ID 使用访问令牌进行响应。
  • 在应用程序网关中配置 JWT 验证

JSON Web 令牌 (JWT) 验证设置

本部分介绍如何在 Azure 应用程序网关中配置 JWT 验证:

在 Microsoft Entra ID 中注册应用程序

  1. 转到 Azure 门户应用注册

  2. 选择“新注册”

  3. 输入:

    • 名称MyWebAPI
    • 支持的帐户类型:仅限此组织目录中的帐户 (Microsoft 仅 - 单租户)
  4. 重定向 URI:API 场景不需要

  5. 选择“注册”。

  6. 记下:

    • 应用程序(客户端)IDCLIENT_ID
    • 目录(租户)IDTENANT_ID
  7. (可选) 配置应用 ID URI

    • 转到 “公开 API ”→ 设置 应用程序 ID URI
    • 使用默认 api://<ClientID> URI 或自定义 URI(例如 https://api.contoso.com
  8. (可选) 定义 API 范围

    • 转到 “公开 API ”→ 添加范围
    • 这是针对将来的授权功能(公共预览版不需要)

注释

支持的帐户类型:单租户(仅此目录)

多租户(任何 Azure AD 目录)

在应用程序网关中配置 JWT 验证

  1. 打开预览配置门户:
    应用网关 JWT 配置门户

  2. 打开应用程序网关,导航到左侧菜单中的“设置”,然后选择 “JWT 验证配置 ”窗口。

    应用程序网关的 JSON Web 令牌配置窗口的屏幕截图。

  3. 提供以下详细信息:

    领域 Example Description
    名称 jwt-policy-1 验证配置的友好名称
    未经授权的请求 Deny 拒绝缺少或无效的 JWT 的请求
    租户 ID <your-tenant-id> 必须是有效的 GUID 或其中一个commonorganizationsconsumers
    客户端 ID <your-client-id> Microsoft Entra 中注册的应用的 GUID
    受众 <api://<client-id> (可选)其他有效的 aud 声明值 (最大值 5)
  4. 将配置与 路由规则 相关联(如果需要新的路由规则,请参阅下一部分)。

创建路由规则(如果需要)

  1. 转到 应用程序网关 -> 规则 -> 添加路由规则

  2. 输入或选择以下内容:

    • 监听器: 协议 HTTPS、分配证书或 Key Vault 密钥。
    • 后端目标: 选择或创建后端池。
    • 后端设置: 使用适当的 HTTP/HTTPS 端口。
    • 规则名称: 例如, jwt-route-rule.
  3. 将此规则链接到 JWT 验证配置。 JWT 验证配置现在已附加到安全的 HTTPS 侦听器和路由规则。

向安全应用程序发送包含每个请求的 JWT 访问令牌

若要安全地访问受应用程序网关保护的应用程序,客户端必须先从 Microsoft Entra ID 令牌终结点获取 JWT 访问令牌。 然后,客户端将在每个发送到应用程序网关的请求中,将此令牌包含在Authorization标头中(例如,Authorization: Bearer TOKEN)。 应用程序网关在将请求转发到后端应用程序之前验证令牌,确保只有经过身份验证和授权的流量才能到达安全应用程序。

请求的预期结果

Scenario HTTP 状态 身份标头 注释
有效令牌,操作=允许 200 现值 令牌已验证,标识已转发
无效的令牌,操作=拒绝 401 缺席 网关阻止请求
缺少令牌,操作=拒绝 401 缺席 无授权标头
缺少 oid 声明,操作=拒绝 403 缺席 缺少关键声明

后端验证

检查 x-msft-entra-identity 标头以确认身份验证。

排查 401 和 403 响应问题

如果请求返回 401403,请验证:

  • 配置
    • 租户 ID/证书颁发者 (iss) 需与 Microsoft Entra 租户匹配。
    • 访问群体 (aud) 与配置的客户端 ID 或访问群体列表匹配。
  • 令牌完整性
    • 令牌未过期(exp)并且nbf不在将来。
  • 请求格式
    • Authorization: Bearer <access_token> 标头存在且完好无损。
  • 网关策略部署
    • JWT 验证已附加到正确的侦听器和传递规则。
  • 仍然失败?
    • 获取针对正确受众的新令牌。
    • 查看应用程序网关访问日志,了解详细的失败原因。

后续步骤

若要详细了解 Azure 中的 JWT 验证和相关标识功能,请执行以下操作: