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

ASP.NET Core Web API验证NextJS前端传递的Gmail JWT ID Token并获取声明的方法

ASP.NET Core Web API验证NextJS前端传递的Gmail JWT ID Token并获取声明的方法

兄弟,我之前刚好做过类似的场景,给你一步步拆解怎么实现哈!

1. 配置Google JWT认证服务

首先得给你的ASP.NET Core项目添加JWT验证的依赖,先安装NuGet包:

Install-Package Microsoft.AspNetCore.Authentication.JwtBearer

然后在Program.cs里配置认证服务,核心是让API信任Google签发的Token:

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;

var builder = WebApplication.CreateBuilder(args);

// 添加JWT认证服务
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        // Google的认证权威地址,会自动获取公钥验证签名
        options.Authority = "https://accounts.google.com";
        // 这里填你在Google Cloud Console创建的OAuth客户端ID,必须和NextJS里用的完全一致
        options.Audience = "你的Google OAuth客户端ID";
        
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidIssuer = "https://accounts.google.com",
            ValidateAudience = true,
            ValidAudience = "你的Google OAuth客户端ID",
            ValidateLifetime = true,
            // 允许5分钟的时钟偏差,避免因为客户端和服务器时间不同步导致验证失败
            ClockSkew = TimeSpan.FromMinutes(5)
        };
    });

// 别忘了添加授权中间件,顺序不能错!先认证再授权
builder.Services.AddAuthorization();

builder.Services.AddControllers();

var app = builder.Build();

app.UseHttpsRedirection();

// 必须在UseRouting之后,UseAuthorization之前添加
app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

app.Run();

2. 在API控制器里获取验证后的Claims

配置好之后,只要在需要验证Token的控制器或方法上加上[Authorize]属性,ASP.NET Core就会自动校验请求头里的Bearer Token,无效的话直接返回401。验证通过后,你可以通过User对象轻松获取用户的所有声明:

using System.Security.Claims;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/user")]
public class UserController : ControllerBase
{
    [HttpGet("profile")]
    [Authorize] // 标记这个接口需要验证Token
    public IActionResult GetUserProfile()
    {
        // 从Claims里提取用户信息
        var googleUserId = User.FindFirstValue(ClaimTypes.NameIdentifier);
        var email = User.FindFirstValue(ClaimTypes.Email);
        var fullName = User.FindFirstValue(ClaimTypes.Name);
        // Google的ID Token里还包含头像URL,这个是自定义Claim
        var avatarUrl = User.FindFirstValue("picture");

        var userInfo = new
        {
            GoogleUserId = googleUserId,
            Email = email,
            FullName = fullName,
            AvatarUrl = avatarUrl
        };

        return Ok(userInfo);
    }
}

3. 额外注意事项

  • NextJS那边传递Token的时候,一定要放在请求头的Authorization字段里,格式是Bearer <你的ID Token>,这样认证中间件才能自动识别。
  • 如果你需要手动验证Token(比如不想用[Authorize]属性),可以用JwtSecurityTokenHandler来手动解析和验证,不过一般不推荐,用中间件的方式更简洁可靠。
  • 确保你的Google OAuth客户端ID配置正确,Audience和Issuer必须和Google签发的Token里的一致,否则验证会失败。

备注:内容来源于stack exchange,提问作者satish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:27:36