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
相关产品推荐
相关产品推荐

