当前位置:首页 > C# > 正文

ASP.NET Core身份认证实战指南(使用JWT实现C# Web API安全)

在现代Web开发中,ASP.NET Core身份认证是保障应用安全的核心环节。本文将手把手教你如何在C#语言的ASP.NET Core项目中集成JWT身份验证(JSON Web Token),即使是编程小白也能轻松上手!通过本教程,你将掌握如何保护你的Web API接口,防止未授权访问。

ASP.NET Core身份认证实战指南(使用JWT实现C# Web API安全) Core身份认证  JWT身份验证 C# API安全 .NET Core JWT教程 第1张

什么是JWT?

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用环境间安全地传输信息。它由三部分组成:Header(头部)、Payload(负载)和Signature(签名)。JWT常用于用户登录后生成令牌,客户端在后续请求中携带该令牌以证明身份。

准备工作

确保你已安装:

  • .NET 6 或更高版本 SDK
  • Visual Studio 2022 或 VS Code
  • 一个基本的 ASP.NET Core Web API 项目

步骤一:安装必要NuGet包

打开终端或包管理器控制台,执行以下命令:

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

步骤二:配置JWT设置

appsettings.json中添加JWT配置:

{  "Jwt": {    "Key": "your-very-secret-key-here-must-be-at-least-32-chars",    "Issuer": "YourAppName",    "Audience": "YourAppNameUsers"  }}

步骤三:注册JWT服务

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();

步骤四:创建登录接口生成JWT

新建一个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;}

步骤五:保护API接口

在需要身份验证的控制器或方法上添加[Authorize]特性:

[ApiController][Route("api/[controller]")][Authorize] // ← 关键!此控制器所有方法都需要JWT认证public class SecureDataController : ControllerBase{    [HttpGet]    public IActionResult GetData()    {        return Ok(new { Message = "只有持有有效JWT的用户才能看到这条信息!" });    }}

测试你的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教程