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-identity的tenantId: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的出站连接。
- 从应用程序网关子网通过 TCP 端口 443 访问
Microsoft Entra ID 要求:
- 在 Microsoft Entra ID 中注册 Web API。
- 调用 Microsoft Entra ID API 以请求访问服务。 Microsoft Entra ID 使用访问令牌进行响应。
在应用程序网关中配置 JWT 验证。
在 Microsoft Entra ID 中注册应用程序
在 Azure 门户中,转到 应用注册。
选择“新注册”。
对于 名称,请输入 MyWebAPI。
对于支持的帐户类型,请仅选择此组织目录中的帐户(仅Microsoft - 单租户)。
注释
支持的帐户类型包括:
- 独立租户(仅此目录)
- 多租户(任何 Microsoft Entra ID 目录)
- 任何 Microsoft Entra ID 目录中的账户和个人 Microsoft 帐户
对于 重定向 URI(可选),可以将框留空。 API 方案不需要此设置。
选择“注册”。
记下 应用程序(客户端)ID 和 目录(租户)ID 的值。
(可选)配置应用程序 ID URI:
- 转到 公开 API>设置应用程序 ID URI。
- 使用默认
api://<ClientID>URI 或自定义 URI(例如https://api.contoso.com)。
(可选)定义 API 范围:
- 转到 “公开 API>添加范围”。
此功能适用于将来的授权功能。 预览版不需要它。
在应用程序网关中配置 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>(可选)附加有效的受众声明值(最多 5 个) 如果需要新的路由规则,请根据以下部分所述将配置与路由规则相关联。
创建路由规则(如有必要)
转到 应用程序网关>规则>添加路由规则。
输入或选择以下项:
-
侦听器:使用协议
HTTPS、分配的证书或 Azure Key Vault 机密。 - 后端目标:选择或创建后端池。
- 后端设置:使用适当的 HTTP/HTTPS 端口。
-
规则名称:输入名称,例如
jwt-route-rule。
-
侦听器:使用协议
将此规则链接到 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 或访问群体列表匹配。
- 租户 ID 或颁发者 (
-
令牌完整性
- 令牌未过期(
exp)并且nbf不在将来。
- 令牌未过期(
-
请求格式
-
Authorization: Bearer <access_token>标头存在且完好无损。
-
-
网关策略部署
- JWT 验证已附加到正确的侦听器和传递规则。
-
仍然失败?
- 获取针对正确受众的新令牌。
- 检查应用程序网关访问日志,了解详细的失败原因。
相关内容
若要详细了解 Azure 中的 JWT 验证和相关标识功能,请执行以下操作: