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 中注册应用程序
转到 Azure 门户应用注册。
选择“新注册”。
输入:
-
名称:
MyWebAPI - 支持的帐户类型:仅限此组织目录中的帐户 (Microsoft 仅 - 单租户)。
-
名称:
重定向 URI:API 场景不需要
选择“注册”。
记下:
-
应用程序(客户端)ID →
CLIENT_ID -
目录(租户)ID →
TENANT_ID。
-
应用程序(客户端)ID →
(可选) 配置应用 ID URI:
- 转到 “公开 API ”→ 设置 应用程序 ID URI
- 使用默认
api://<ClientID>URI 或自定义 URI(例如https://api.contoso.com)
(可选) 定义 API 范围:
- 转到 “公开 API ”→ 添加范围
- 这是针对将来的授权功能(公共预览版不需要)
注释
支持的帐户类型:单租户(仅此目录)
多租户(任何 Azure AD 目录)
在应用程序网关中配置 JWT 验证
打开预览配置门户:
应用网关 JWT 配置门户打开应用程序网关,导航到左侧菜单中的“设置”,然后选择 “JWT 验证配置 ”窗口。
提供以下详细信息:
领域 Example Description 名称 jwt-policy-1验证配置的友好名称 未经授权的请求 Deny拒绝缺少或无效的 JWT 的请求 租户 ID <your-tenant-id>必须是有效的 GUID 或其中一个 common、organizations或consumers客户端 ID <your-client-id>Microsoft Entra 中注册的应用的 GUID 受众 <api://<client-id>(可选)其他有效的 aud 声明值 (最大值 5) 将配置与 路由规则 相关联(如果需要新的路由规则,请参阅下一部分)。
创建路由规则(如果需要)
转到 应用程序网关 -> 规则 -> 添加路由规则
输入或选择以下内容:
-
监听器: 协议
HTTPS、分配证书或 Key Vault 密钥。 - 后端目标: 选择或创建后端池。
- 后端设置: 使用适当的 HTTP/HTTPS 端口。
-
规则名称: 例如,
jwt-route-rule.
-
监听器: 协议
将此规则链接到 JWT 验证配置。 JWT 验证配置现在已附加到安全的 HTTPS 侦听器和路由规则。
向安全应用程序发送包含每个请求的 JWT 访问令牌
若要安全地访问受应用程序网关保护的应用程序,客户端必须先从 Microsoft Entra ID 令牌终结点获取 JWT 访问令牌。 然后,客户端将在每个发送到应用程序网关的请求中,将此令牌包含在Authorization标头中(例如,Authorization: Bearer TOKEN)。 应用程序网关在将请求转发到后端应用程序之前验证令牌,确保只有经过身份验证和授权的流量才能到达安全应用程序。
- 详细了解 Microsoft 标识平台中的访问令牌
请求的预期结果
| Scenario | HTTP 状态 | 身份标头 | 注释 |
|---|---|---|---|
| 有效令牌,操作=允许 | 200 | 现值 | 令牌已验证,标识已转发 |
| 无效的令牌,操作=拒绝 | 401 | 缺席 | 网关阻止请求 |
| 缺少令牌,操作=拒绝 | 401 | 缺席 | 无授权标头 |
缺少 oid 声明,操作=拒绝 |
403 | 缺席 | 缺少关键声明 |
后端验证
检查 x-msft-entra-identity 标头以确认身份验证。
排查 401 和 403 响应问题
如果请求返回 401 或 403,请验证:
-
配置
- 租户 ID/证书颁发者 (
iss) 需与 Microsoft Entra 租户匹配。 - 访问群体 (
aud) 与配置的客户端 ID 或访问群体列表匹配。
- 租户 ID/证书颁发者 (
-
令牌完整性
- 令牌未过期(
exp)并且nbf不在将来。
- 令牌未过期(
-
请求格式
-
Authorization: Bearer <access_token>标头存在且完好无损。
-
-
网关策略部署
- JWT 验证已附加到正确的侦听器和传递规则。
-
仍然失败?
- 获取针对正确受众的新令牌。
- 查看应用程序网关访问日志,了解详细的失败原因。
后续步骤
若要详细了解 Azure 中的 JWT 验证和相关标识功能,请执行以下操作: