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

.NET 7 JWT认证设置验证Bearer令牌失败原因解析

.NET 7 JWT认证中Authority与ValidIssuer的差异及验证失败原因解析

验证失败的核心原因

第一组设置报错The signature key was not found,本质是缺少JWT签名验证所需的密钥。ValidIssuer仅负责校验JWT令牌中的iss声明是否与指定值一致,但它不会告诉系统从哪里获取用于验证签名的公钥/密钥,因此令牌签名无法通过校验。

Authority与ValidIssuer的本质差异

1. ValidIssuer的作用

ValidIssuer是TokenValidationParameters中的一个属性,功能单一:

  • 仅验证JWT的iss(发行者)声明是否等于指定字符串
  • 不涉及签名密钥的获取,也不会自动配置任何额外的验证逻辑

2. Authority的作用

Authority是JWT Bearer认证选项的顶级属性,它指向身份提供者(IdP)的元数据端点(通常是OIDC标准的.well-known/openid-configuration地址),具备以下核心能力:

  • 自动获取签名密钥:系统会从Authority对应的元数据地址中拉取IdP的公钥,用于验证JWT的签名
  • 自动配置ValidIssuer:默认会将TokenValidationParameters.ValidIssuer设置为Authority对应的发行者值,无需手动指定
  • 额外验证逻辑:还会自动处理诸如令牌过期、签名算法匹配等更多OIDC标准的验证规则

为什么仅保留Authority也能成功?

当设置Authority时,.NET的JWT认证中间件会自动完成以下操作:

  1. 从Authority地址获取IdP的元数据,包括发行者信息、签名密钥列表
  2. 自动将TokenValidationParameters.ValidIssuer设置为元数据中的issuer值
  3. 配置签名密钥解析器,自动用获取到的公钥验证JWT签名

因此即使不手动设置ValidIssuer,中间件也会通过元数据自动完成发行者校验和签名验证,所以验证能成功。

补充说明

如果不想使用Authority(比如本地验证自定义JWT),可以手动在TokenValidationParameters中指定IssuerSigningKey或IssuerSigningKeys来提供签名密钥,示例如下:

builder.Services
    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(x =>
    {
        x.TokenValidationParameters = new TokenValidationParameters
        {
            ValidIssuer = "some-issuer",
            ValidAudience = applicationOptions.Authentication.Audience,
            // 手动指定签名密钥
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-signing-key"))
        };
    });

内容的提问来源于stack exchange,提问作者Learning AWS and PostgreSQL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 03:28:16