首先配置JWT认证服务并添加认证授权中间件,然后生成包含用户信息的JWT令牌,接着通过[Authorize]特性保护接口,最后在appsettings.json中设置JWT参数,确保密钥安全及中间件顺序正确。

在现代 Web 应用开发中,JWT(JSON Web Token)是一种广泛使用的无状态身份验证机制。C# 结合 ASP.NET Core 可以非常方便地实现 JWT 认证与授权。下面介绍如何在 ASP.NET Core 项目中完整实现 JWT 用户登录认证和接口访问授权。
配置 JWT 认证服务
要在项目中启用 JWT 认证,首先需要在 Program.cs 或 Startup.cs 中配置认证服务。
确保安装了以下 NuGet 包:- Microsoft.AspNetCore.Authentication.JwtBearer
- System.IdentityModel.Tokens.Jwt
在 Program.cs 中添加认证配置:
var builder = WebApplication.CreateBuilder(args);// 添加认证服务 builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = builder.Configuration["Jwt:Issuer"], ValidAudience = builder.Configuration["Jwt:Audience"], IssuerSigningKey = new SymmetricSecurityKey( Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"])) }; });
// 添加授权服务 builder.Services.AddAuthorization();
var app = builder.Build();
// 启用认证和授权中间件 app.UseAuthentication(); app.UseAuthorization();
生成 JWT 令牌
当用户登录成功后,服务器应生成 JWT 令牌并返回给客户端。
创建一个登录接口,例如:
[ApiController]
[Route("api/[controller]")]
public class AuthController : ControllerBase
{
private readonly IConfiguration _configuration;
public AuthController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpPost("login")]
public IActionResult Login([FromBody] LoginModel model)
{
// 示例:简单验证用户名密码(实际应查询数据库)
if (model.Username == "admin" && model.Password == "123456")
{
var token = GenerateJwtToken(model.Username);
return Ok(new { Token = token });
}
return Unauthorized();
}
private string GenerateJwtToken(string username)
{
var securityKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(_configuration["Jwt:Key"]));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, username),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(ClaimTypes.Name, username)
};
var token = new JwtSecurityToken(
issuer: _configuration["Jwt:Issuer"],
audience: _configuration["Jwt:Audience"],
claims: claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: credentials
);
return new JwtSecurityTokenHandler().WriteToken(token);
}}
使用授权保护接口
通过 [Authorize] 特性可以限制只有携带有效 JWT 的请求才能访问特定接口。
示例:受保护的 API 接口
mallcloud商城
mallcloud商城基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离vue的企业级微服务敏捷开发系统架构。并引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易,适合学习和企业中使用。真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署,并提
下载
[ApiController]
[Route("api/[controller]")]
public class SecureController : ControllerBase
{
[HttpGet]
[Authorize]
public IActionResult GetSecret()
{
return Ok(new { Message = "你已通过认证", User = User.Identity.Name });
}
[HttpGet("admin")]
[Authorize(Roles = "Admin")]
public IActionResult GetAdminData()
{
return Ok(new { Message = "管理员专用数据" });
}}
上面的例子中,第一个接口要求用户登录即可访问,第二个接口还要求用户具有 Admin 角色。
若需支持角色,可在生成 Token 时添加角色声明:
new Claim(ClaimTypes.Role, "Admin")
配置 JWT 参数
在 appsettings.json 中定义 JWT 配置:
{
"Jwt": {
"Key": "your-very-secret-key-that-is-long-enough",
"Issuer": "https://localhost:5001",
"Audience": "https://localhost:5001"
}
}
密钥长度建议至少 32 字符,使用强随机字符串以保证安全。
基本上就这些。只要正确配置认证服务、生成 Token 并在请求头中携带 Bearer Token,ASP.NET Core 就能自动完成验证。前端发送请求时,记得在 Header 中加上:
Authorization: Bearer
不复杂但容易忽略的是中间件顺序:UseAuthentication 必须在 UseAuthorization 之前。









