欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 从零到一实现 .NET Core 项目 + JWT 认证

从零到一实现 .NET Core 项目 + JWT 认证

2025/4/24 22:38:07 来源:https://blog.csdn.net/qq_44206824/article/details/147386064  浏览:    关键词:从零到一实现 .NET Core 项目 + JWT 认证

知识文档:从零到一实现 .NET Core 项目 + JWT 认证

1. 知识点概述

本项目通过实现 JWT 身份验证,完成以下功能:

  1. 用户登录并生成 JWT Token。
  2. 使用 [Authorize] 属性保护受控资源。
  3. 测试登录和受保护资源访问的完整流程。

JWT(JSON Web Token)是一种轻量级的认证机制,广泛用于分布式系统中的用户身份验证。JWT 包含三部分:

  • Header:描述签名算法和类型。
  • Payload:存储用户信息(如用户 ID、角色等)。
  • Signature:对 Header 和 Payload 的加密签名。

2. 实现步骤

(1) 创建项目
dotnet new webapi -n JwtAuthDemo
cd JwtAuthDemo
  • 创建一个新的 Web API 项目。
  • 进入项目目录。
(2) 安装必要的 NuGet 包
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
dotnet add package Microsoft.IdentityModel.Tokens
dotnet add package System.IdentityModel.Tokens.Jwt
  • 添加 JWT 相关依赖包。

3. 配置 JWT 身份验证

(1) 修改 appsettings.json 文件
{"Jwt": {"Key": "your_secret_key_must_be_long_enough", // 密钥,至少 16 字符"Issuer": "https://localhost:5001",          // 签发者"Audience": "https://localhost:5001"        // 接收者},"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": "*"
}
  • 配置 JWT 的密钥、签发者和接收者。
(2) 在 Program.cs 中配置 JWT
var builder = WebApplication.CreateBuilder(args);// 获取JWT设置
var jwtSettings = builder.Configuration.GetSection("Jwt");
var key = Encoding.ASCII.GetBytes(jwtSettings["Key"]); // 将密钥字符串转换为字节数组// 添加身份验证服务
builder.Services.AddAuthentication(options =>
{options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; // 设置默认的身份验证方案options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;   // 设置默认的挑战方案
})
.AddJwtBearer(options =>
{options.TokenValidationParameters = new TokenValidationParameters{ValidateIssuer = true,                  // 验证签发者ValidateAudience = true,                // 验证接收者ValidateLifetime = true,                // 验证Token是否过期ValidateIssuerSigningKey = true,        // 验证签名密钥ValidIssuer = jwtSettings["Issuer"],    // 指定合法签发者ValidAudience = jwtSettings["Audience"],// 指定合法接收者IssuerSigningKey = new SymmetricSecurityKey(key) // 指定签名密钥};
});builder.Services.AddControllers();var app = builder.Build();// 启用身份验证中间件
app.UseAuthentication(); // 解析请求中的JWT
app.UseAuthorization();  // 检查用户是否有权限访问资源app.MapControllers();app.Run();
  • AddAuthentication:启用身份验证服务。
  • TokenValidationParameters:定义 JWT 的验证规则。
  • UseAuthenticationUseAuthorization:启用身份验证和授权中间件。

4. 创建用户模型

Models 文件夹中创建 UserModel.cs

namespace JwtAuthDemo.Models
{public class UserModel{public string Username { get; set; } // 用户名public string Password { get; set; } // 密码}
}
  • 定义用户登录模型,包含用户名和密码。

5. 创建 JWT 工具类

Helpers 文件夹中创建 JwtHelper.cs

using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;namespace JwtAuthDemo.Helpers
{public static class JwtHelper{/// <summary>/// 生成JWT Token/// </summary>/// <param name="userId">用户ID</param>/// <param name="configuration">配置对象</param>/// <returns>JWT Token字符串</returns>public static string GenerateJwtToken(string userId, IConfiguration configuration){var jwtSettings = configuration.GetSection("Jwt"); // 读取JWT配置var key = Encoding.ASCII.GetBytes(jwtSettings["Key"

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词