JWT简单配置使用
JWT
webApi中配置
-
安装NuGet Microsoft.AspNetCore.Authentication.JwtBearer
-
Swagger 添加 认证页面 代码注释由豆包生成
// 配置 Swagger 生成器,添加 JWT 认证支持 builder.Services.AddSwaggerGen(c => { // 定义名为"Bearer"的安全方案,描述 JWT 在请求头中的格式 c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { In = ParameterLocation.Header, // JWT 令牌放置在请求头中 Type = SecuritySchemeType.ApiKey, // 采用 API Key 认证方式 Description = "直接在下框中输入Bearer {token}(注意两者之间是一个空格)", Name = "Authorization", // 请求头中的字段名 BearerFormat = "JWT", // 令牌格式为 JWT Scheme = "Bearer" // 认证方案名称 }); // 添加安全要求,强制所有 API 都需要 JWT 认证 c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" // 引用上面定义的"Bearer"安全方案 } }, new string[] {} // 允许的安全范围(这里为空,表示所有范围) } }); }); -
配置 JWT 认证服务
// 配置 JWT 认证服务 builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { // 设置令牌验证参数 options.TokenValidationParameters = new TokenValidationParameters { // 验证签名密钥,确保令牌未被篡改 ValidateIssuerSigningKey = true, // 指定用于验证签名的密钥(应与生成令牌时使用的密钥相同) IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("SDMC-CJAS1-SAD-DFSFA-SADHJVF-VFXH")), // 验证令牌颁发者(Issuer) ValidateIssuer = true, // 指定允许的令牌颁发者 ValidIssuer = "http://localhost:6060", // 验证令牌接收者(Audience) ValidateAudience = true, // 指定允许的令牌接收者 ValidAudience = "http://localhost:5000", // 验证令牌有效期 ValidateLifetime = true, // 允许的时间偏移量(处理时钟不同步问题) ClockSkew = TimeSpan.FromMinutes(60) }; }); -
应用认证和授权
app.UseAuthentication(); // 启用身份验证中间件 app.UseAuthorization(); // 启用授权中间件 -
API控制器处理生成令牌
var author = new { Id = 1, UserAccount = userAccount, UserName = "TestUser" }; if (author != null) { //登陆成功 var claims = new Claim[] { new Claim(ClaimTypes.Name, author.UserAccount), new Claim("Id", author.Id.ToString()), new Claim("UserName", author.UserName) //不能放敏感信息 }; var key = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("SDMC-CJAS1-SAD-DFSFA-SADHJVF-VFXH")); //issuer代表颁发Token的Web应用程序,audience是Token的受理者 var token = new JwtSecurityToken( issuer: "http://localhost:6060", audience: "http://localhost:5000", claims: claims, notBefore: DateTime.Now, expires: DateTime.Now.AddHours(1), signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature) ); var jwtToken = new JwtSecurityTokenHandler().WriteToken(token); return Ok(jwtToken); } else { return BadRequest("账户或者密码错误"); } -
在对应需要添加认证的资源(控制器/Action)添加
Authorize特性就可以限制请求了

浙公网安备 33010602011771号