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

能否通过HTTP请求验证AzureAD令牌?现有API无额外依赖

验证Azure AD令牌的手动HTTP请求方案

完全可以不依赖Microsoft.Identity.Web,通过直接向Azure AD发送HTTP请求来验证令牌。以下是具体的实现方式和关键细节:

方式一:使用Azure AD令牌 introspection 端点

这是最直接的HTTP请求验证方式,Azure AD提供专门的端点来校验令牌有效性:

  1. 构造请求地址
    替换{TenantId}为你的实际租户ID:

    https://login.microsoftonline.com/{TenantId}/oauth2/v2.0/introspect
    
  2. 请求参数与认证
    发送POST请求,采用application/x-www-form-urlencoded格式传递参数:

    • client_id: 你的API的ClientId(必填)
    • client_secret: 你的API的客户端密钥(仅当API是机密客户端时需要,比如后端API)
    • token: 需要验证的Azure AD令牌(必填)
    • token_type_hint: 可选,填access_token或id_token,帮助端点更快定位令牌类型
  3. 解析响应
    端点返回的JSON响应中,active字段为true时表示令牌有效。同时响应会包含令牌的核心声明(如aud受众、exp过期时间等),你需要进一步校验这些声明是否符合API要求(比如aud必须匹配你的ClientId)。

方式二:手动获取公钥本地验证(结合HTTP请求获取元数据)

如果不想依赖introspection端点的额外请求开销,也可以通过HTTP请求获取Azure AD的公钥,本地完成令牌签名验证+声明校验:

  1. 获取OpenID配置元数据
    发送GET请求到:

    https://login.microsoftonline.com/{TenantId}/v2.0/.well-known/openid-configuration
    

    从返回的JSON中提取jwks_uri(公钥集合端点)。

  2. 获取公钥集合
    向jwks_uri发送GET请求,返回的JSON包含多组RSA公钥。根据待验证令牌头部的kid字段,匹配对应的公钥。

  3. 本地验证令牌
    使用匹配到的公钥验证令牌的签名,同时手动校验以下关键声明:

    • aud: 必须等于你的API的ClientId
    • iss: 必须匹配https://login.microsoftonline.com/{TenantId}/v2.0/
    • exp: 令牌未过期
    • nbf: 令牌已生效
    • 按需校验scope或roles声明,确保调用者拥有对应权限

关键注意事项

  • 无论哪种方式,都必须校验令牌的核心声明,不能仅依赖端点返回的active字段(比如防止令牌是为其他API颁发的)
  • 机密客户端使用introspection端点时,要确保client_secret安全存储,避免泄露
  • 公钥集合会定期更新,建议缓存元数据和公钥,定期刷新(可根据元数据中的expires_in字段设置缓存时长)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:42:20