在现代Web开发中,ASP.NET Core身份认证是保障应用安全的核心环节。本文将手把手教你如何在C#语言的ASP.NET Core项目中集成JWT身份验证(JSON Web Token),即使是编程小白也能轻松上手!通过本教程,你将掌握如何保护你的Web API接口,防止未授权访问。
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用环境间安全地传输信息。它由三部分组成:Header(头部)、Payload(负载)和Signature(签名)。JWT常用于用户登录后生成令牌,客户端在后续请求中携带该令牌以证明身份。
确保你已安装:
打开终端或包管理器控制台,执行以下命令:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer 在appsettings.json中添加JWT配置:
{ "Jwt": { "Key": "your-very-secret-key-here-must-be-at-least-32-chars", "Issuer": "YourAppName", "Audience": "YourAppNameUsers" }} 在Program.cs中添加身份认证和授权服务:
using Microsoft.IdentityModel.Tokens;using System.Text;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();app.MapControllers();app.Run(); 新建一个AuthController.cs:
using Microsoft.AspNetCore.Mvc;using Microsoft.IdentityModel.Tokens;using System.IdentityModel.Tokens.Jwt;using System.Security.Claims;using System.Text;[ApiController][Route("api/[controller]")]public class AuthController : ControllerBase{ private readonly IConfiguration _config; public AuthController(IConfiguration config) { _config = config; } [HttpPost("login")] public IActionResult Login([FromBody] LoginModel login) { // 这里应替换为真实用户验证逻辑(如数据库查询) if (login.Username == "admin" && login.Password == "password") { var token = GenerateJwtToken(login.Username); return Ok(new { Token = token }); } return Unauthorized(); } private string GenerateJwtToken(string username) { var claims = new[] { new Claim(ClaimTypes.Name, username), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()) }; var key = new SymmetricSecurityKey( Encoding.UTF8.GetBytes(_config["Jwt:Key"]!)); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: _config["Jwt:Issuer"], audience: _config["Jwt:Audience"], claims: claims, expires: DateTime.Now.AddHours(2), signingCredentials: creds); return new JwtSecurityTokenHandler().WriteToken(token); }}public class LoginModel{ public string Username { get; set; } = string.Empty; public string Password { get; set; } = string.Empty;} 在需要身份验证的控制器或方法上添加[Authorize]特性:
[ApiController][Route("api/[controller]")][Authorize] // ← 关键!此控制器所有方法都需要JWT认证public class SecureDataController : ControllerBase{ [HttpGet] public IActionResult GetData() { return Ok(new { Message = "只有持有有效JWT的用户才能看到这条信息!" }); }} 1. 使用Postman或curl调用POST /api/auth/login,传入用户名和密码获取token。
2. 在后续请求的Header中添加:Authorization: Bearer <your-token-here>。
如果一切正常,你就能成功访问受保护的API了!
通过本教程,你已经掌握了在ASP.NET Core中实现JWT身份验证的基本流程。这不仅提升了你的.NET Core JWT教程实战能力,也为构建安全的C# Web API安全体系打下了坚实基础。记住,永远不要在生产环境中硬编码密钥,应使用Azure Key Vault或环境变量来管理敏感信息。
关键词回顾:ASP.NET Core身份认证、JWT身份验证、C# Web API安全、.NET Core JWT教程。
本文由主机测评网于2025-12-12发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025126575.html