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

.NET Core后端无法验证Google访问令牌的问题求助

问题分析与解决方案

核心问题1:使用了错误的令牌类型

你获取的ya29.xxx开头的是Google Access Token,它不是标准JWT格式,因此jwt.io无法解析,也不能通过JwtBearer中间件验证。后端身份验证应该使用Google的ID Token(以ey开头的JWT格式令牌)。

核心问题2:后端JWT验证配置错误

Google的ID Token采用非对称加密签名,依赖Google公钥验证,而非你的ClientSecret。你当前用SymmetricSecurityKey传入ClientSecret的配置完全错误,无法完成签名验证。


修复步骤

步骤1:前端改为获取ID Token

在angular-oauth2-oidc配置中,确保请求包含openid scope以获取ID Token:

// 示例OAuth配置
this.oAuthService.configure({
  issuer: 'https://accounts.google.com',
  clientId: '你的ClientId',
  redirectUri: window.location.origin + '/callback',
  scope: 'openid email profile', // 必须包含openid才能触发ID Token返回
  responseType: 'id_token token', // 同时获取ID Token和Access Token
  // 其他配置项...
});

// 获取ID Token用于后端验证
const idToken = this.oAuthService.getIdToken();
// 请求后端时,将ID Token放入Authorization头:Bearer {idToken}

步骤2:修正后端认证配置

修改ConfigureServices中的JwtBearer配置,让中间件自动从Google官方端点获取公钥验证签名:

public static void ConfigureServices(IServiceCollection services, IConfiguration configuration)
{
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.Authority = "https://accounts.google.com";
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidIssuer = "https://accounts.google.com",
                ValidateAudience = true,
                ValidAudience = configuration["Authentication:Google:ClientId"],
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true
                // 无需手动设置IssuerSigningKey,中间件会自动从Authority获取公钥
            };
        });

    // 必须添加授权服务
    services.AddAuthorization();
}

步骤3:确保中间件顺序正确

在Program.cs(或Startup.cs)中,认证与授权中间件的顺序不能颠倒:

app.UseAuthentication();
app.UseAuthorization();

步骤4:验证测试

  1. 前端获取ey开头的ID Token,复制到jwt.io解析,应能正常显示用户信息、issuer、audience等字段。
  2. 在Swagger中使用该ID Token,格式为Authorization: Bearer {ey开头的令牌},调用接口即可通过验证。

额外注意事项

  • 若需调用Google官方API(如Drive、Calendar),才需要使用Access Token;后端自身的身份验证必须用ID Token。
  • 确保Google控制台中,授权重定向URI包含前端的回调地址,而非仅Swagger地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:33:39