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

AddMicrosoftIdentityWebApi如何验证Bearer令牌?无客户端密钥为何可信?

关于SPA无客户端密钥时后端信任Access Token的机制说明

为什么SPA场景不需要客户端密钥

SPA属于公开客户端(Public Client),无法安全存储客户端密钥(代码在浏览器中运行,密钥易被提取),因此Azure AD对这类客户端不要求提供密钥,转而通过令牌本身的合法性校验来确保安全。

AddMicrosoftIdentityWebApi中的令牌验证机制

这个方法已经封装了完整的JWT令牌校验逻辑,核心步骤如下:

  1. 自动获取Azure AD公钥验证签名

    • 它会从Azure AD的OpenID配置元数据端点(格式为{Instance}{TenantId}/v2.0/.well-known/openid-configuration)自动获取公钥。
    • 用该公钥验证Access Token的签名,确保令牌由Azure AD签发且未被篡改(只有Azure AD持有对应私钥,能生成合法签名)。
  2. 校验令牌核心属性
    自动验证以下关键属性,确保令牌合法有效:

    • 签发者(Issuer):必须匹配配置中Instance+TenantId组成的地址,保证令牌来自指定的Azure AD租户。
    • 受众(Audience):必须与配置中的ClientId一致,确保令牌是颁发给当前Web API的。
    • 过期时间(ExpiresAt):检查令牌是否已过期,拒绝过期令牌。
    • 签名算法:确保使用非对称加密算法(如RS256),避免对称算法带来的密钥泄露风险。
    • 客户端标识(azp/appid):验证令牌的颁发对象是合法的SPA客户端(默认会校验,也可通过配置进一步限制)。
  3. 依赖底层JwtBearer中间件
    AddMicrosoftIdentityWebApi本质是对ASP.NET Core JwtBearer中间件的封装,所有验证逻辑最终由JwtBearer中间件执行,它会自动配置TokenValidationParameters参数,把上述校验规则注入进去,无需手动编写验证代码。

补充:SPA的令牌获取安全机制

SPA使用Authorization Code Flow with PKCE(授权码流+PKCE)获取令牌,这个流程不需要客户端密钥:

  • PKCE会生成随机的code_verifier和对应的code_challenge,授权请求中发送code_challenge,获取授权码后用code_verifier兑换令牌,防止授权码被拦截盗用,确保令牌获取过程的安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:31:10