.Net Core 学习笔记(二)

news/2025/2/26 13:32:42/文章来源:https://www.cnblogs.com/tomtang123/p/18738230

JWT 认证

1. 安装 JWT 相关 NuGet 包:Microsoft.AspNetCore.Authentication.JwtBearer

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

2. 配置 ASP.NET Core JWT 认证

public class Program
{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});
}
public class Startup
{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){//Log.StartupPath = AppContext.BaseDirectory;// Configure Swagger//services.ConfigureSwaggerUp();// Configure Cross Domain//services.ConfigureCrossDomainUp();// Configure Services//services.ConfigureServicesUp();// Configure JWT Tokenservices.ConfigureJWTToken();//services.AddControllers(options =>//{//    options.Filters.Add(typeof(GlobalExceptionFilter));//});}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}// Enable Swagger//app.UseSwagger();//app.UseSwaggerUI(c =>//{//    c.SwaggerEndpoint($"/swagger/V1/swagger.json", "InterviewPlatform.WebAPI V1");//    c.RoutePrefix = "";//});app.UseRouting();app.UseCors("CorsPolicy");app.UseAuthentication();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});//app.UseStaticFiles(new StaticFileOptions//{//    FileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, "file")),//    RequestPath = "/file"//});}
}
public static class ConfigureToken
{private static string SecurityKey = null;public static string GetSecurityKey(){if (SecurityKey == null)SecurityKey = Guid.NewGuid().ToString();return SecurityKey;}public static void ConfigureJWTToken(this IServiceCollection services){if (services == null)throw new ArgumentNullException(nameof(services));services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>{options.TokenValidationParameters = new TokenValidationParameters{ValidateIssuerSigningKey = true,IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(GetSecurityKey())),ValidateIssuer = false,ValidateAudience = false,ValidateLifetime = true,ClockSkew = TimeSpan.FromDays(7)};});}
}

3. BaseController: 所有 controller 的基类

[Route("api/[controller]/[action]")]
[ApiController]
[Authorize]
public class BaseController : ControllerBase
{[NonAction]public AuthInfo ValidateToken(){string jwtToken = HttpContext.Request.Headers["Authorization"];jwtToken = jwtToken.Split(" ")[1];JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();JwtSecurityToken jwt = tokenHandler.ReadJwtToken(jwtToken);IEnumerable<Claim> claims = jwt.Claims;return new AuthInfo(){ID = Convert.ToInt32(claims.First(x => x.Type == "ID").Value),EasUserId = claims.First(x => x.Type == "EasUserId").Value,EmployeeNumber = claims.First(x => x.Type == "EmployeeNumber").Value,Name = claims.First(x => x.Type == "Name").Value,Email = claims.First(x => x.Type == "Email").Value,Phone = claims.First(x => x.Type == "Phone").Value,};}
}
public class UserController : BaseController
{private readonly IUserCore _userCore;public UserController(IUserCore userCore){_userCore = userCore;}[HttpPost][AllowAnonymous]public ResultModel Login([FromBody] LoginRequest request){LoginResponse response = _userCore.Login(request);var claims = new Claim[] {new Claim("ID",response.User.ID.ToString()),new Claim("EasUserId",response.User.EasUserId),new Claim("EmployeeNumber",response.User.EmployeeNumber),new Claim("Name",response.User.Name),new Claim("Email",response.User.Email==null?"":response.User.Email),new Claim("Phone",response.User.Phone==null?"":response.User.Phone),};var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(ConfigureToken.GetSecurityKey()));var token = new JwtSecurityToken(claims: claims,notBefore: DateTime.UtcNow,expires: DateTime.UtcNow.AddDays(5),signingCredentials: new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256));var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);response.Token = jwtToken;return new ResultModel{Code = 200,Data = response};}
}
public class DataController : BaseController
{private readonly IDataCore _dataCore;public DataController(IDataCore dataCore){_dataCore = dataCore;}[HttpPost]public ResultModel Createdata(CreateDataRequest request){AuthInfo authInfo = ValidateToken(); // 获取bool result = _dataCore.CreateData(request, authInfo.EasUserId);return new ResultModel{Code = 200,Data = result};}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/890084.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅析Golang的内存管理(中篇): go runtime的内存管理模型与内存分配器

文章目录go runtime的基本内存模型 三级存储体系(MCache,MCentral,Mheap) 对象分配流程 一、go runtime的基本内存模型go runtime 借鉴了C++的内存模型和TCMalloc(Thread-Caching Malloc)内存分配机制,再开始之前,先了解一些go runtime对内存对象抽象的名词概念,它们分…

浅析Golang的内存管理(上篇):操作系统内存管理

文章目录计算机存储体系介绍 虚拟存储器 内存管理单元与页式存储管理 CPU发起一次访存的全过程 一、计算机存储体系介绍从计算机的组成角度来看,计算机的存储分为,寄存器-高速缓存-主存储器(泛指内存)-本地存储(磁盘)-外部存储(光盘、云盘等),由下到上,运行速度越来…

SVN介绍与安装

一、svn介绍 1、svn是一个版本控制工具; -svN是subversion的简称:是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。 -SVN的作用:在项目组当中对需求规格说明书、测试用例、…

提示词装饰器:一种改善AI生成回复的简单方式

通过结构化提示解锁AI的全部潜力 人工智能是一种非常强大的工具,但其回应的质量往往取决于我们与其沟通的有效性。如果你曾经在从AI模型获得精确且结构良好的回答时遇到困难,你并不孤单。许多用户在提示制定中面临不一致、模糊的回应或过多的试验和错误。那么,是否有一种方法…

信息安全项目管理工具:等保2.0要求的3类检测系统

随着信息技术的飞速发展,信息安全问题日益凸显。等保 2.0 作为我国网络安全领域的重要标准,对信息安全提出了更高的要求。在等保 2.0 的要求下,信息安全项目管理工具中的 3 类检测系统发挥着至关重要的作用。本文将详细介绍这 3 类检测系统,帮助读者更好地了解信息安全领域…

[c++算法] 树的直径,包教包会!

哈喽大家好,我是 doooge。今天我们要将数论中的一个算法-树的直径。 $$\Huge 树的直径 详解$$ 1.树的直径是什么 这是一棵图论中的树:这棵树的直径就是这棵树中最长的一条简单路径。 2.树的直径怎么求 2.1暴力算法 直接对每个点进行 DFS,找到每个点离最远的点的距离,最后求…

图吧工具箱PC电脑工具(图拉丁吧硬件检测工具箱) v2025.01 中文绿色便携版

点击上方蓝字关注我 前言 图吧工具箱(大家通常叫它图拉丁吧硬件检测工具箱)是一个完全免费、开源、没有广告的硬件检测工具集合。这个工具箱是专门为喜欢自己动手组装电脑(DIY)的朋友们,特别是图钉社区的成员们制作的。里面包含了好多常用的硬件测试和检测小工具,特别适合…

在Windows上安装UOS打印机

因自己放在办公室发挥余热的Windows电脑即将寿终正寝,所以这两天试着将包括文件打印在内的基础网络服务逐渐转移到UOS主机上。 参照官方教程一通操作,Windows始终在添加打印机页面找不到同个局域网下的UOS主机,点击疑难解答则提示“该设备或资源未设置为接受端口“文件和打印…

是不是长大之后便很难再专注了?

写在前面 1100 字 | 专注 | 思考 | 逆向思维 正文“上课要专心。”我们似乎总能听见大人们这样要求我们。不过坦白地说,我真正体验过全神贯注的时刻,就那么一两次。看起来这篇文章,似乎又要大吐苦水,谈论生活怎样艰辛困苦,各种科技产品怎样将人碎片化之类。并不是。 恰恰相…

2025牛客寒假算法基础集训营3补题笔记

比赛链接 题目难度顺序大致为:\(A、M、F、L、C、\) \(easy\):\(A、M、F、L、C\) 太难了这场。。。E题卡了3个多小时。。。 A.智乃的博弈游戏 题意 有\(n\) 个石头,两人轮流取石头。每次能取小于石头个数且与石头个数互质的数量,当某人取时只有一颗石头则获胜。问先手是否可…

HTTPS 与 HTTP 的区别在哪?

HTTP与HTTPS作为互联网数据传输的核心协议,其通信机制与安全特性深刻影响着现代网络应用的可靠性与用户体验。它们有什么不同?HTTPS到底安全在哪里?HTTP与HTTPS作为互联网数据传输的核心协议,其通信机制与安全特性深刻影响着现代网络应用的可靠性与用户体验。本文将解析两者…

Featurewiz-Polars:一种强大且可扩展的特征选择解决方案,适用于XGBoost

前言:“Featurewiz-Polars”是一个用于特征工程的 Python 库,结合了特征选择和特征生成的功能。它基于“Polars”,这是一个高性能的 DataFrame 库,用于处理大型数据集,具有类似 Pandas 的 API 但更高效,尤其在处理大数据时。Featurewiz-Polars 专注于通过自动化方式,快速…