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

.NET Core JWT Bearer认证:IssuerSigningKey未被验证的原因

原因分析及解决方案

问题出在你同时配置Authority和手动指定IssuerSigningKey的冲突上,具体逻辑如下:

  • 当设置options.Authority = "https://accounts.google.com"时,JwtBearer中间件会自动启用自动密钥获取机制:它会访问Google的OIDC元数据端点,从中获取JWKS(JSON Web Key Set)地址,然后下载Google用于签名ID Token的公钥,并用这些公钥验证JWT签名。
  • 这种情况下,你手动设置的IssuerSigningKey会被中间件忽略——对于受信任的权威机构(比如Google),中间件优先使用从权威方获取的公钥做签名验证,而非你自定义的对称密钥。这就是为什么不管你填什么字符串到IssuerSigningKey里,认证都能成功的原因:你的配置根本没参与签名验证流程。

另外要注意:Google的ID Token是用**非对称加密算法(RSA)**签名的,而你用SymmetricSecurityKey配置的是对称加密密钥,本身就不匹配Google的签名方式。即使中间件用了你的配置,验证也会失败,但因为中间件自动用了正确的公钥,所以这个问题没暴露出来。

正确的配置方式

你不需要手动指定IssuerSigningKey,只要保留Authority和Audience的配置即可,中间件会自动处理签名验证、颁发者校验等逻辑:

var builder = WebApplication.CreateBuilder(args);

builder.Services
       .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
       .AddJwtBearer(options =>
       {
           options.Authority = "https://accounts.google.com";
           options.Audience = "123232323.apps.googleusercontent.com";
       });

如果确实需要自定义TokenValidationParameters,也不要手动设置IssuerSigningKey,让中间件自动填充相关密钥:

options.TokenValidationParameters = new TokenValidationParameters
{
    ValidateIssuer = true,
    ValidIssuer = "accounts.google.com",
    ValidateAudience = true,
    ValidAudience = "123232323.apps.googleusercontent.com",
    ValidateIssuerSigningKey = true
    // 不要设置IssuerSigningKey
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:12:44