最新要闻
- 损失条款
- 不喜欢别看!网飞黑人《埃及艳后》史诗级翻车 差评多到不忍直视
- 年度大改款!联发科下一代旗舰命名确认:天玑9300_焦点热门
- 骨灰级程序员 20多年经验IT大牛左耳朵耗子陈皓突发心梗去世 享年47岁-世界简讯
- 特斯拉中国召回110万辆:是真心 还是假意?
- 今热点:硬挑苹果!华为赚麻:增加万元折叠新机Mate X3订单 出货量或将翻倍
- 世界热文:白酒板块午盘走弱 贵州茅台股价下滑0.22%
- 日系“药丸”?日产发布2022财年业绩:收益远超预期|热推荐
- 环球头条:卢伟冰揭秘Redmi Book 14:4000元档四大升级 厂商良心所在
- 地铁咋调头 有司机吗?看完本文你比地铁司机还懂
- 亚洲或将面临超级高温“烤”验:多国已破40℃ 厄尔尼诺现象要来了-环球热文
- 联想拯救者Y9000P冰魄白游戏本开卖 24核i9+RTX 4070仅售12499元 当前头条
- 俄媒:一天之内数架俄军机在俄乌边境坠毁 即时
- 世界短讯!萍乡一男子利用职务便利侵占公司财物获刑
- 独悬变扭力梁、气囊也减配 新款丰田卡罗拉上市定档:价格或史低 当前热文
- 对标苹果iPad Air!华为MatePad Air真机首曝:LCD屏、骁龙888|世界新消息
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
在ASP.NET Core中轻松使用JwtBeare进行身份验证
JwtBearer简介
(相关资料图)
首先要搞清楚什么是JwtBearer,JwtBearer是ASP.NET Core的OAuth 2.0 JWT Bearer身份验证提供程序。它提供了对JWT令牌进行验证的功能,然后允许将令牌中包含的声明(claims)用于用户身份验证和授权控制。
Json Web Token (JWT)是一种Web标准,用于在不同系统间传输数据。JWT是一种可验证的和安全的方式,用于在各种应用程序之间传递信息。JWT具有一定的安全性,因为它是通过密钥对JWT进行签名的,以确保意味着不能进行篡改或伪造。
JWT由三个部分组成,分别为:“Header”、“Payload”和“Signature” 。其中,“header”表示JWT的元数据(元信息),用于描述加密信息和算法;“payload”表示JWT的指令部分,用于承载用户状态或授权相关的信息;“signature”表示JWT的签名信息,用于验证JWT的有效性。
JwtBearer首先使用“header”中声明的算法对JWT进行身份验证,以确保其未被篡改。然后,它将使用密钥根据“payload”中的信息生成令牌,以在用户请求中将其传递。
JwtBearer提供了配置选项,以允许您使用自定义的密钥和算法生成和验证JWT令牌。它还允许您配置应用程序特定的声明,以在用户的身份验证和授权管理中使用。
在.NET Core中使用
1)、首先新建一个APS.NET Core项目,然后在项目中添加JwtBearer包,可以用nuget包管理器添加,也可以使用nuget命令添加,命令如下:
dotnetaddpackageMicrosoft.AspNetCore.Authentication.JwtBearer
2)新建一个JwtConfig类,用了存储token相关数据。
public class JwtConfig { public string Key { get; set; } //key public int Expres { get; set; } //过期时间(单位秒) public string Issuer { get; set; } public string Audience { get; set; }}
3)、在appsettings.json中配置jwt密钥
//配置文件appsettings.json{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*",//JWT的配置内容"JWT":{//key必须有足够的长度 "Key": "asfasfdflj134aanjkdsjiio1232sdasdfdfkandsf12","expres":"3","Issuer":"https://localhost:7201", "Audience": "https://localhost:7201", }}
4)在program.cs文件注入JwtBearer
//注入配置类builder.Services.Configure(builder.Configuration.GetSection("JWT"));
5)新建一个类,专门创建token
//依赖注入privatereadonlyIOptionsSnapshotjwtconfig;publicDemo3Controller(IOptionsSnapshotjwtconfig){ this.jwtconfig = jwtconfig;}public string CreateToken(){ // 创建声明列表,即 Token 中携带的信息 List claims = new List(); claims.Add(new Claim(ClaimTypes.Name, "admin")); // 添加用户名 claims.Add(new Claim(ClaimTypes.NameIdentifier, "1080")); // 添加用户 ID // 设置 Token 的过期时间 DateTime expres = DateTime.Now.AddSeconds(jwtconfig.Value.Expres); Console.WriteLine($"过期时间{expres}"); // 从配置文件中获取 JWT 密钥并转换为字节数组 byte[] secbyse = Encoding.UTF8.GetBytes(jwtconfig.Value.Key); // 创建 SymmetricSecurityKey 对象并使用 HmacSha256 算法对密钥进行签名 var secKey = new SymmetricSecurityKey(secbyse); var credetials = new SigningCredentials(secKey, SecurityAlgorithms.HmacSha256); // 创建 JwtSecurityToken 对象并设置声明、过期时间和签名信息 var tokenDescriptor = new JwtSecurityToken(claims: claims, expires: expres, signingCredentials: credetials); // 生成 JWT Token 字符串并返回 string jwt = new JwtSecurityTokenHandler().WriteToken(tokenDescriptor); return jwt;}
6)再在program.cs文件中验证传入的token,代码如下:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(opt =>{varJwtOtp=builder.Configuration.GetSection("JWT").Get();byte[]keybase=Encoding.UTF8.GetBytes(JwtOtp.Key);varseckey=newSymmetricSecurityKey(keybase); opt.TokenValidationParameters = new() { ValidateIssuer = false, ValidateAudience = false, ValidateLifetime = true, ValidateIssuerSigningKey = true, IssuerSigningKey = seckey, }; opt.Events = new JwtBearerEvents { //权限验证失败后执行 OnChallenge = context => { //终止默认的返回结果 context.HandleResponse();stringtoken=context.Request.Headers["Authorization"]; var result = JsonConvert.SerializeObject(new { code = 401, message = "登录过期" }); if (string.IsNullOrEmpty(token)) { result = JsonConvert.SerializeObject(new { code = 401, message = "token不能为空" }); context.Response.ContentType = "application/json"; //验证失败返回401 context.Response.StatusCode = StatusCodes.Status200OK; context.Response.WriteAsync(result); return Task.FromResult(result);} try { JwtSecurityTokenHandler tokenheader = new(); ClaimsPrincipal claimsPrincipal = tokenheader.ValidateToken(token, opt.TokenValidationParameters, out SecurityToken securityToken); } catch (SecurityTokenExpiredException) { result = JsonConvert.SerializeObject(new { code = 401, message = "登录已过期" }); context.Response.ContentType = "application/json"; //验证失败返回401 context.Response.StatusCode = StatusCodes.Status200OK; context.Response.WriteAsync(result); return Task.FromResult(result); } catch (Exception ex) { Console.WriteLine(ex); result = JsonConvert.SerializeObject(new { code = 402, message = "token令牌无效" }); context.Response.ContentType = "application/json"; //验证失败返回401context.Response.StatusCode=StatusCodes.Status200OK; context.Response.WriteAsync(result); return Task.FromResult(result);} context.Response.ContentType = "application/json"; //验证失败返回401 context.Response.StatusCode = StatusCodes.Status200OK; context.Response.WriteAsync(result); return Task.FromResult(result); } };});app.UseAuthentication();//.NETCore验证中间件,必须有。并且在 app.UseAuthorization();之前
7)、在需要权限的方法或控制器上加上特性[Authorize]
[HttpGet(Name = "GetAuthorize")] [Authorize]public IEnumerable Get(){//doing}
这样就完成了JwtBearer验证的代码,具体调用见下文。
调用流程如下:
1)、首先获得Token
可以通过登录验证后生成。如果是接口程序通过接口获得。
效果如下:
2)、获取Token后在请求头添加Authorization验证,并输入获得的Token,需要注意的是Token前面需要加Bearer并添加一个空格。
效果如下:
如果Token为空的效果:
注:在swagger加token需要另外在program.cs配置,代码如下:
builder.Services.AddSwaggerGen(s=>{ //添加安全定义 s.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Description = "请输入token,格式为 Bearer xxxxxxxx(注意中间必须有空格)", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey, BearerFormat = "JWT", Scheme = "Bearer" }); //添加安全要求 s.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme{ Reference =new OpenApiReference{ Type = ReferenceType.SecurityScheme, Id ="Bearer" } },new string[]{ } }});});
添加好重启程序后会在swagger的右上方增加如下按钮,打开按钮根据提示即可完成添加。
结语
本文介绍了ASP.NET Core如使用JwtBearer,以及JwtBearer生成token验证的验证过程。希望对你有所收获,欢迎留言或吐槽。
来源公众号:DotNet开发跳槽
关键词:
-
在ASP.NET Core中轻松使用JwtBeare进行身份验证
JwtBearer简介首先要搞清楚什么是JwtBearer,JwtBearer是ASP NETCore的OAuth2 0JWTBearer身份验证提供程序
来源: -
Mongodb 以及 node.js中使用mongoose操作数据库
Mongodb以及node js中使用mongoose操作数据库1、lowdb一个简陋的数据库第三方库,使用JSON文件来保存数据,
来源: 在ASP.NET Core中轻松使用JwtBeare进行身份验证
Golang基础教程
Mongodb 以及 node.js中使用mongoose操作数据库
每日看点!MYSQL数据库之事务隔离级别详解
损失条款
不喜欢别看!网飞黑人《埃及艳后》史诗级翻车 差评多到不忍直视
年度大改款!联发科下一代旗舰命名确认:天玑9300_焦点热门
骨灰级程序员 20多年经验IT大牛左耳朵耗子陈皓突发心梗去世 享年47岁-世界简讯
特斯拉中国召回110万辆:是真心 还是假意?
今热点:硬挑苹果!华为赚麻:增加万元折叠新机Mate X3订单 出货量或将翻倍
世界热文:白酒板块午盘走弱 贵州茅台股价下滑0.22%
接单日记(四)验证码图片生成|全球今头条
日系“药丸”?日产发布2022财年业绩:收益远超预期|热推荐
环球头条:卢伟冰揭秘Redmi Book 14:4000元档四大升级 厂商良心所在
地铁咋调头 有司机吗?看完本文你比地铁司机还懂
亚洲或将面临超级高温“烤”验:多国已破40℃ 厄尔尼诺现象要来了-环球热文
联想拯救者Y9000P冰魄白游戏本开卖 24核i9+RTX 4070仅售12499元 当前头条
俄媒:一天之内数架俄军机在俄乌边境坠毁 即时
Stimulsoft Report/Group Report报表类型简单实现|每日头条
系统错误:找不到mvcp120d.dll,无法继续执行代码
天天快播:ntp时钟服务器(ntp授时服务器)技术参数一览表
焦点短讯!宝兰德应用服务器软件与华为云GaussDB完成兼容互认证
顶象助力如祺出行打造高品质服务
全球快看:北向互换通正式上线
世界短讯!萍乡一男子利用职务便利侵占公司财物获刑
独悬变扭力梁、气囊也减配 新款丰田卡罗拉上市定档:价格或史低 当前热文
对标苹果iPad Air!华为MatePad Air真机首曝:LCD屏、骁龙888|世界新消息
全球今亮点!6月9日上映!《变形金刚7:超能勇士崛起》中文海报/角色介绍发布
110万的仰望U8领衔!多款硬派SUV申报:奇瑞这款最值得期待
超强辨识度!比亚迪腾势N7夜晚亮灯实拍:“世界级SUV”感受下 焦点热议
全球快资讯丨2023宁波技工学校新设置专业有哪些
每日热文:Grafana系列-统一展示-10-Explore Jaeger
环球微速讯:江南华南北部多降雨过程 华北黄淮等地将有高温过程
德意志银行顺利完成“互换通”下首笔交易
定档5月22日 Redmi Book 14官宣:重新定义4000元档轻薄本|天天热闻
特斯拉幕后舵手曝光 他是马斯克接班人?
热热热!北方将刷新今年来气温新高:首轮高温局地超37℃_精选
焦点信息:网飞黑人《埃及艳后》IMDb仅1.1分 近3万人给出1分
1TB只要2599元 真我11 Pro系列首销战报来了:销量破8万台 速讯
世界速看:河南太康清集镇:扎实做好防返贫动态监测帮扶工作
20230515学习笔记——js中的同步任务与异步任务,宏任务与微任务
世界快报:序列检测器(两种设计方法和四种检测模式|verilog代码|Testbench|仿真结果)
天天热资讯!Linux文件查找命令之locate与find
从3s到25ms!看看京东的接口优化技巧,确实很优雅!! 当前速递
碳酸锂市价止跌急涨 需求兑现仍需时日 全球速递
全球焦点!伯利时代首冠切尔西女足主帅:男队表现不佳,冠军献给球迷
售价10万以内 “电动吉姆尼”宝骏悦也内饰官图:小车也有双联屏
天天快消息!肉丸、鸡架超满足:东北抚顺麻辣拌6.6元/盒清仓大促
AI孙燕姿大火!央视提醒:AI歌手翻唱或涉多项侵权行为
环球新动态:断轴!韩系豪华车捷尼赛思GV60上市两个月就召回
罕见!北方今年首轮高温来袭:山东要热成灿东了 局地39度 天天快播
java~"与运算"实现保留一个数的低8位 速看
一键斩断伸向孩子的“黑手” 36名未成年人被救助-精选
提速至140km/h!浙江最快高速公路来了:杭州到宁波仅1小时
就像买菜!男子花10万块买了8套房 最便宜一套1000元:网友感慨 天天滚动
遥遥领先苹果!余承东:华为WATCH4系列首发血糖评估 环球速看料
全国最大高铁“驾校”揭秘:16台模拟驾驶实训舱 如同开真高铁
全球热门:假把式!小区监控探头是粘上的,限期整改!
两类存款利率加点上限调整今起执行 部分中小银行迅速行动
你手机装了几款APP?人均安装31个APP 年龄越小装的越多
摊主再回应买彩票中2574万 21人合买有钱一起赚:买一股能分百万 都分到钱
没人看了?美国付费有线电视用户跌至30年最低
如何使用多米诺骨牌作为派对主题_什么生日礼物送学生朋友最合适男生 世界简讯
读SQL进阶教程笔记16_SQL优化让SQL飞起来
一万的票隔壁唱了九千八 粉丝吐槽听不清:盖过周杰伦声音 环球要闻
热点在线丨险遭退市 老牌日化企业广州浪奇突然宣布不再卖洗衣粉
多地出手严控老年代步车 全面封杀“老头乐”:网友吵翻 你支持谁?
当前关注:电饭煲内胆是什么材质 电饭煲内胆材质说明【详解】
全球热议:问题:Duplicate报错RMAN-03009, ORA-17628, ORA-19505
解决vmware虚拟机中的linux系统新增硬盘后无法启动
【C++】在使用PImpl技术时,template/typename的不常见用法 环球速看
南京芯视界发布新一代3D dToF芯片 性能远超索尼!
HTC又要出新手机了!但我建议 还是别出来丢人了
印度发现1.5米白化眼镜蛇:一般活不过24小时 但它不一样
天天微动态丨所有熊猫都是天生近视!有的生下来就800度?
瑞士德语文学专辑_关于瑞士德语文学专辑介绍
全球最新:JDG零封BLG 水晶哥:ELK暴毙次数太多了啊!回来吧我的小枣!
LitCTF crypto wp
世界速讯:监听容器中的文件系统事件
第139篇:微信小程序的登录流程|天天讯息
环球速看:EF命令行工具 migrate.exe 进行Code First更新数据库,6.3+使用ef6.exe
4月皮卡销量排名出炉 长城江淮大增 新能源有待突破|世界时快讯
20230514学习笔记——将代码提交到码云中 天天要闻
当前速递!【LeetCode字符串#extra】KMP巩固练习:旋转字符串、字符串轮转
世界之最大全100条_世界之最大全
大模型三大能力超越ChatGPT 千亿AI巨头科大讯飞否认做手机
大爷买二等座票带孙女坐一等座被赶 12306回应:不允许乱坐 全球热点
观点:一起来学rust|简单的mingrep
关于Kubernetes-v1.23.6-网络组件-calico的安装部署...|焦点快看
【焦点热闻】好莱坞编剧大罢工:GPT技术引发激烈争议
经典28定律?苹果在中国手机市场份额2成 赚走8成利润|每日简讯
电池只能充电500次?别太荒谬!收下这份真正的充电秘籍
【全球新要闻】摊主买彩票中2千多万激动砸摊位:称21人合买 明天就分钱
CentOS7搭建keepalived+DRBD+NFS高可用共享存储
每日精选:惠普打印机禁用非原装墨盒:官方称是为用户安全考虑
当前焦点!地狱笑话?大学母亲节配图是《进击的巨人》
泥鳅汤做法_泥鳅汤的烹饪方法 环球实时
已在轨生活160多天 航天员费俊龙从太空发回对母亲的节日祝福
热播电视剧将本科写成大专 高校不干了 官方道歉|天天聚看点
【热闻】首发紫光展锐T750!海信悄然推出F70 Lite手机