.net core8 使用JWT鉴权(附当前源码)
说明
该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。
该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。
说明:OverallAuth2.0 是一个简单、易懂、功能强大的权限+可视化流程管理系统。
结合上一篇文章使用,味道更佳:.net core8 使用Swagger(附当前源码)
有兴趣的朋友,请关注我吧(*^▽^*)。
第一步:安装最新Jwt包
包名:Microsoft.AspNetCore.Authentication.JwtBearer
第二步:appsettings.json中配置jwt
/*jwt鉴权*/
"JwtSetting": {
"Issuer": "微信公众号:不只是码农", //发行人
"Audience": "微信公众号:不只是码农", //订阅人
"ExpireSeconds": 120, //过期时间,默认分钟
"ENAlgorithm": "HS256", //秘钥算法
"SecurityKey": "bzsmn=Start20240913EndOverallAuth-WebApi" //秘钥构成
}
第三步:创建jwt解析模型
在OverallAuth-WebApi项目的目录下创建文件夹【model】,并创建一个类文件JwtSettingModel.cs
OverallAuth-WebApi结构,见上一篇文章:.net core8 使用Swagger(附当前源码)
/// <summary>
/// jwt配置模型
/// </summary>
public class JwtSettingModel
{
/// <summary>
/// 密钥
/// </summary>
public string SecurityKey { get; set; } /// <summary>
/// 加密算法
/// </summary>
public string ENAlgorithm { get; set; } /// <summary>
/// 颁发者
/// </summary>
public string Issuer { get; set; } /// <summary>
/// 接收者
/// </summary>
public string Audience { get; set; } /// <summary>
/// 过期时间 单位:秒
/// </summary>
public int ExpireSeconds { get; set; }
}
目录结构如下:
第四步:创建Jwt、AppSettings插件
目录结构如下:
上图可以看到,我们创建了JwtPlugInUnit和AppSettingsPlugInUnit2个插件,它分别对应jwt和AppSettings配件文件的解析。
那么我们看下,这2个类里面的具体内容。
JwtPlugInUnit如下:
/// <summary>
/// jwt插件
/// </summary>
public static class JwtPlugInUnit
{
/// <summary>
/// 初始化JWT
/// </summary>
/// <param name="services"></param>
public static void InitJWT(this IServiceCollection services)
{
var jwtsetting = AppSettingsPlugInUnit.GetNode<JwtSettingModel>("JwtSetting");
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(o =>
{
o.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuerSigningKey = true,
ValidIssuer = jwtsetting.Issuer,
ValidAudience = jwtsetting.Audience,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(jwtsetting.SecurityKey)),
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
});
}
}
AppSettingsPlugInUnit如下:
/// <summary>
/// AppSettings配置文件插件
/// </summary>
public class AppSettingsPlugInUnit
{
/// <summary>
/// 声明配置属性
/// </summary>
public static IConfiguration Configuration { get; set; } /// <summary>
/// 构造函数
/// </summary>
static AppSettingsPlugInUnit()
{
Configuration = new ConfigurationBuilder()
.Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true })
.Build();
} /// <summary>
/// 获得配置文件的对象值
/// </summary>
/// <param name="jsonPath">文件路径</param>
/// <param name="key"></param>
/// <returns></returns>
public static string GetJson(string jsonPath, string key)
{
if (string.IsNullOrEmpty(jsonPath) || string.IsNullOrEmpty(key)) return null;
IConfiguration config = new ConfigurationBuilder().AddJsonFile(jsonPath).Build();//json文件地址
return config.GetSection(key).Value;//json某个对象
} /// <summary>
/// 获取数据库连接字符串
/// </summary>
/// <returns></returns>
public static string GetMysqlConnection()
{
return Configuration.GetConnectionString("MySql").Trim();
} /// <summary>
/// 根据节点名称获取配置模型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="Node"></param>
/// <returns></returns>
public static T GetNode<T>(string Node) where T : new()
{
T model = Configuration.GetSection(Node).Get<T>();
return model; }
}
第五步:让jwt遵守Swagger协议
因为我们系统使用到了Swagger,所以要让jwt遵守Swagger协议,因此我们要在Swagger中添加如下代码。
/// <summary>
/// 初始化Swagger
/// </summary>
/// <param name="services"></param>
public static void InitSwagger(this IServiceCollection services)
{
//添加swagger
services.AddSwaggerGen(optinos =>
{
typeof(ModeuleGroupEnum).GetEnumNames().ToList().ForEach(version =>
{
optinos.SwaggerDoc(version, new OpenApiInfo()
{
Title = "权限管理系统",
Version = "V2.0",
Description = "求关注,求一键三连",
Contact = new OpenApiContact { Name = "微信公众号作者:不只是码农 b站作者:我不是码农呢", Url = new Uri("http://www.baidu.com") }
}); }); //反射获取接口及方法描述
var xmlFileName = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
optinos.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFileName), true); //使用jwt
optinos.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description = "请在下方输入框子输入Bearer Token 开启JWT鉴权",
Name = "Authorization", // 默认名称,不能修改
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey,
Scheme = "Bearer"
}); //让swagger遵守jwt协议
optinos.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
new List<string>()
}
}); });
}
说明:InitSwagger方法是初始化Swagger的方法,在上一篇文章:.net core8 使用Swagger(附当前源码) 中有讲到。
第六步:初始化Jwt
在Program中添加一下代码,初始化Jwt
第七步:验证Jwt
做好以上步骤,jwt就可以正常使用。
当你看到图中标识时,就表示jwt初始化成功,就可以在系统中使用jwt鉴权等操作。
使用【[Authorize]】、【 [AllowAnonymous]】特性测试鉴权。
以下2个接口一个需要验证、一个不需要验证,我们来测试下。
[Authorize]开启验证测试
CheckJwt接口:开启验证,不传token
可以看到,开启jwt验证的,接口在没有传入token的情况下,访问失败。
UnCheckJwt接口:不开启验证。
以上就是.net core8 使用jwt系统鉴权的配置过程。
感谢你的耐心观看。
如果对你有帮助,请关注我微信公众号吧(*^▽^*)。
源代码地址:https://gitee.com/yangguangchenjie/overall-auth2.0-web-api
帮我Star,谢谢。
有兴趣的朋友,请关注我微信公众号吧(*^▽^*)。
关注我:一个全栈多端的宝藏博主,定时分享技术文章,不定时分享开源项目。关注我,带你认识不一样的程序世界
.net core8 使用JWT鉴权(附当前源码)的更多相关文章
- HTTP基本认证和JWT鉴权
一.HTTP基本认证 Basic Authentication——当浏览器访问使用基本认证的网站的时候, 浏览器会提示你输入用户名和密码. http auth的过程: · 客户端发送http请求 · ...
- Spring Boot 鉴权之—— JWT 鉴权
第一:什么是JWT鉴权 1. JWT即JSON Web Tokens,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519),他可以用来安全的传递信息,因为传递的信息是 ...
- JWT鉴权
一.HTTP基本认证 Basic Authentication--当浏览器访问使用基本认证的网站的时候, 浏览器会提示你输入用户名和密码. http auth的过程: 客户端发送http请求 服务器发 ...
- jwt鉴权学习 (php示例代码)
前段时间听朋友讲起 jwt鉴权,博主我是一脸懵逼,通过朋友坚持不懈的讲解,我终于听懂了,jwt就是登陆token校验嘛 然而事情并不是博主想象的那么简单,在一个艳阳高照,晴空万里的夜晚,博主手贱百度了 ...
- 在WebBrowser中执行javascript脚本的几种方法整理(execScript/InvokeScript/NavigateScript) 附完整源码
[实例简介] 涵盖了几种常用的 webBrowser执行javascript的方法,详见示例截图以及代码 [实例截图] [核心代码] execScript方式: 1 2 3 4 5 6 7 8 9 1 ...
- Asp.net MVC集成Google Calendar API(附Demo源码)
Asp.net MVC集成Google Calendar API(附Demo源码) Google Calendar是非常方便的日程管理应用,很多人都非常熟悉.Google的应用在国内不稳定,但是在国外 ...
- winserver的consul部署实践与.net core客户端使用(附demo源码)
winserver的consul部署实践与.net core客户端使用(附demo源码) 前言 随着微服务兴起,服务的管理显得极其重要.都知道微服务就是”拆“,把臃肿的单块应用,拆分成多个轻量级的 ...
- C#代码生成器附百度云盘源码地址
今晚闲着没事,写了个代码生成器,在这里只做个抛砖引玉,后面可以继续扩展功能,下方附百度云盘源码地址. 使用数据库:sqlserver 编译器:vs2015 废话不多说,上界面: 程序主界面: 数据库: ...
- 单独编译和使用webrtc音频回声消除模块(附完整源码+测试音频文件)
单独编译和使用webrtc音频降噪模块(附完整源码+测试音频文件) 单独编译和使用webrtc音频增益模块(附完整源码+测试音频文件) 说实话很不想写这篇文章,因为这和我一贯推崇的最好全部编译并使用w ...
- 单独编译和使用webrtc音频降噪模块(附完整源码+测试音频文件)
单独编译和使用webrtc音频增益模块(附完整源码+测试音频文件) 单独编译和使用webrtc音频回声消除模块(附完整源码+测试音频文件) webrtc的音频处理模块分为降噪ns,回音消除aec,回声 ...
随机推荐
- webpack4.15.1 学习笔记(十) — 常见 loader 使用
目录 style -loader <= css-loader <= less-loader postcss-loader file-loader url-loader html-withi ...
- webpack4.15.1 学习笔记(三) — 模块热替换HMR
目录 模块热替换 HMR HMR监听文件变化 HMR 修改样式表 模块热替换 HMR 允许在运行时更新各种模块,而无需进行完全刷新.不适用于生产环境,意味着应当只在开发环境使用.启用HMR实际上就是更 ...
- [oeasy]python0099_雅达利大崩溃_IBM的开放架构_兼容机_oem
雅达利大崩溃 回忆上次内容 个人计算机浪潮已经来临 苹果公司迅速发展 微软公司脱离mits准备做纯软件公司 IBM用大型机思路制作的5100惨败 Commodore 64 既做计算机 又做游戏机 计算 ...
- [oeasy]python0081_ANSI序列由来_终端机_VT100_DEC_VT选项_终端控制序列
更多颜色 回忆上次内容 上次 首先了解了RGB颜色设置 可以把一些抽象的色彩名字 落实到具体的 RGB颜色 计算机所做的一切 其实就是量化.编码 把生活的一切都进行数字化 标准 是ANSI制定的 这个 ...
- 分析C语言程序
1 #include <stdio.h> 2 int main() 3 { 4 puts("C语言"); 5 return 0; 6 } 函数的概念 C语言提供了很多功 ...
- odoo Actions学习总结
环境 odoo-14.0.post20221212.tar Actions(动作) action定义系统响应用户操作的行为:登录.操作按钮.选择发票等- action可以存储在数据库中,也可以作为字典 ...
- python __del__() 清空对象
python __del__() 清空对象 python垃圾回收机制:当一个对象的引用被完全清空之后,就会调用__del__()方法来清空这个对象 当对象的引用没有被完全清空时,代码如下: class ...
- 火山引擎VeDI数据技术分享:两个步骤,为Parquet降本提效
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 作者:王恩策.徐庆 火山引擎 LAS 团队 火山引擎数智平台 VeDI 是火山引擎推出的新一代企业数据智能平台,基 ...
- 3、SpringMVC之RequestMapping注解
3.1.环境搭建 创建名为spring_mvc_demo的新module,过程参考2.1节 3.1.1.创建SpringMVC的配置文件 <?xml version="1.0" ...
- 目前AI模型与CAE(计算机辅助工程)结合所能达到的技术水平?
相关: https://www.anscos.com/odyssee.html ODYSSEE CAE只需进行几次先前的CAE模拟,即可实时预测.优化并可靠地生成准确的结果.ODYSSEE CAE以非 ...