Azure 应用程序网关中的 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 签名、颁发者、租户、受众和生存期。 令牌必须由 Microsoft Entra ID 颁发。
  • 标识传播:将含有 x-msft-entra-identitytenantId:oid 标头注入到后端。
  • 灵活的动作:为无效令牌配置 Deny (返回 401 状态)或 Allow (转发且不携带身份标头)。
  • 多租户支持:支持常见组织和使用者的租户配置。
  • 仅 HTTPS:需要 HTTPS 侦听器。 不支持 HTTP。

先决条件

  • 应用程序网关要求:

    • Standard_v2或WAF_v2 SKU。 不支持基本 SKU。
    • HTTPS 侦听器以及 TLS/SSL 证书的配置。
    • Azure 资源管理器 API 版本 2025-03-01 或更高版本。
  • 网络要求:

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

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

在 Microsoft Entra ID 中注册应用程序

  1. 在 Azure 门户中,转到 应用注册

  2. 选择“新注册”

  3. 对于 名称,请输入 MyWebAPI

  4. 对于支持的帐户类型请仅选择此组织目录中的帐户(仅Microsoft - 单租户)。

    注释

    支持的帐户类型包括:

    • 独立租户(仅此目录)
    • 多租户(任何 Microsoft Entra ID 目录)
    • 任何 Microsoft Entra ID 目录中的账户和个人 Microsoft 帐户
  5. 对于 重定向 URI(可选),可以将框留空。 API 方案不需要此设置。

  6. 选择“注册”。

  7. 记下 应用程序(客户端)ID目录(租户)ID 的值。

  8. (可选)配置应用程序 ID URI:

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

    • 转到 “公开 API>添加范围”。

    此功能适用于将来的授权功能。 预览版不需要它。

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

  1. 打开 预览配置门户

  2. 打开应用程序网关实例,转到左侧菜单中 的“设置” ,然后选择 “JWT 验证配置>添加 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> (可选)附加有效的受众声明值(最多 5 个)
  4. 如果需要新的路由规则,请根据以下部分所述将配置与路由规则相关联。

创建路由规则(如有必要)

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

  2. 输入或选择以下项:

    • 侦听器:使用协议 HTTPS、分配的证书或 Azure Key Vault 机密。
    • 后端目标:选择或创建后端池。
    • 后端设置:使用适当的 HTTP/HTTPS 端口。
    • 规则名称:输入名称,例如 jwt-route-rule
  3. 将此规则链接到 JWT 验证配置。

JWT 验证配置现在已附加到安全的 HTTPS 侦听器和路由规则。

在每次请求中附带 JWT 访问令牌发送到安全应用程序

若要安全地访问应用程序网关帮助保护的应用程序,客户端必须先从 Microsoft Entra ID 令牌终结点获取 JWT 访问令牌。 然后,客户端会在每次发送到应用程序网关的请求中,将此令牌(例如,Authorization: Bearer TOKEN)包含在授权标头中。

应用程序网关在将请求转发到后端应用程序之前验证令牌。 此验证可确保仅经过身份验证和授权的流量到达安全应用程序。

有关详细信息,请参阅 Microsoft 标识平台中的访问令牌

请求的预期结果

Scenario HTTP 状态 标识标头 注释
有效令牌, action=Allow 200 现值 令牌已验证,标识已转发
令牌无效。action=Deny 401 缺席 网关阻止请求
缺少令牌, action=Deny 401 缺席 无授权标头
缺少 oid 声明, action=Deny 403 缺席 缺少关键声明

后端验证

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

排查 401 和 403 响应问题

如果请求返回状态为 401 或 403,请验证:

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

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