jwt-在asp.net core中的使用jwt
jwt学习文章:
前两篇文章中我写了jwt的原理,并且也用原理实现了jwt的验证。如果要看前两篇文章,点击上面的连接就能够链接过去。
第二篇文章实现jwt原理时有同学就说每个成熟的框架中都有相应的jwt实现或集成。说的不错,每个主流的框架中几乎毫无例外的都集成了jwt的实现,但是我们上篇文章的重点是希望大家能够明白原理,和这些框架中实现的基本思路,如无特殊情况也没有必要自己来写。
那么这篇文章我们就来看看asp.net core中jwt如何使用!
注意,本文主要是代码,必要的文字说明我已经都在代码注释中写出来了。文末我会给出源码地址。
新建一个空的asp.net core项目:
新建一个类const放置一些常量:
public class const { public const string securitykey = "migfma0gcsqgsib3dqebaquaa4gnadcbiqkbgqdsflgu+kcfdcjucv46j+sbgr0lnc2nqgcgzojqtww9xqjuzpf3mpisvtggyzsgfbzn+88ylzybblrdtumj4ntieelbp6shkbfu8f+7ffbi7w3upsaaxdr2e2srqyu5zlkacfbonajnwj3sfsvroyrpdqdtj4wdjlupsngz0wgrrqidaqab"; public const string domain = "http://localhost:5000"; }
在startup中向应用添加jwt验证服务:
//添加jwt验证: services.addauthentication(jwtbearerdefaults.authenticationscheme) .addjwtbearer(options => { options.tokenvalidationparameters = new tokenvalidationparameters { validateissuer = true,//是否验证issuer validateaudience = true,//是否验证audience validatelifetime = true,//是否验证失效时间 clockskew = timespan.fromseconds(30), validateissuersigningkey = true,//是否验证securitykey validaudience = const.domain,//audience validissuer = const.domain,//issuer,这两项和前面签发jwt的设置一致 issuersigningkey = new symmetricsecuritykey(encoding.utf8.getbytes(const.securitykey))//拿到securitykey }; });
管道中添加jwt验证:
//添加jwt验证 app.useauthentication();
由于管道有执行顺序的特性,因此最好放在管道的开始位置。
添加登录获取token的接口:
[apicontroller] [route("[controller]")] public class authcontroller : controllerbase { [allowanonymous]//指定此属性应用于的类或方法不需要授权。 [httpget] public iactionresult get(string username, string pwd) { if (!string.isnullorempty(username) && !string.isnullorempty(pwd)) { var claims = new[] { new claim(jwtregisteredclaimnames.nbf,$"{new datetimeoffset(datetime.now).tounixtimeseconds()}") , new claim (jwtregisteredclaimnames.exp,$"{new datetimeoffset(datetime.now.addminutes(30)).tounixtimeseconds()}"), new claim(claimtypes.name, username) }; var key = new symmetricsecuritykey(encoding.utf8.getbytes(const.securitykey)); var creds = new signingcredentials(key, securityalgorithms.hmacsha256); var token = new jwtsecuritytoken( issuer: const.domain, audience: const.domain, claims: claims, expires: datetime.now.addminutes(30), signingcredentials: creds); return ok(new { token = new jwtsecuritytokenhandler().writetoken(token) }); } else { return badrequest(new { message = "username or password is incorrect." }); } } }
方法中对用户名和密码的验证只是简单的验空,实际应用中会更复杂,也会与数据库中的数据比对。
接下来就是对jwt的应用了。
新建homecontroller,用于验证jwt是否成功启用:
[apicontroller] [route("[controller]")] public class homecontroller : controllerbase { [httpget] [route("api/value1")] public actionresult<ienumerable<string>> get() { return new string[] { "value1", "value1" }; } [httpget] [route("api/value2")] [authorize] public actionresult<ienumerable<string>> get2() { return new string[] { "value2", "value2" }; } }
其中get()方法不需要验证,get2()需要验证。
测试:
先测试get()方法(接口名称时api/value1),因为此方法不用验证:
验证成功!!!
接下来测试get2():
访问get2()方法的接口名api/value2,粘贴上面获得的token到header中:
验证成功!!!
总结:至此,使用asp.net core 自带的jwt方法就完成了。
源码地址:https://gitee.com/jingboweilango/demo_jwt_core.git
说明:demo-jwt-core是本篇文章涉及到的源码,是使用asp.net core 自带的jwt方法;
demo-jwt-core2是上一篇文章的源码,根据jwt原理实现的代码。
上一篇: 燕麦片热量是多少,应该怎么吃燕麦片会对我们的身体有益
下一篇: mysql5.5版本导入sql报错
推荐阅读
-
HighCharts图表控件在ASP.NET WebForm中的使用总结(全)
-
在ASP.NET Core 3.0中使用Swagger
-
在ASP.NET Core中实现一个Token base的身份认证实例
-
详解在ASP.NET Core中使用Angular2以及与Angular2的Token base身份认证
-
在Asp.Net或.Net Core中配置使用MarkDown富文本编辑器有开源模板代码(代码是.net core3.0版本)
-
ASP.NET Core 3.0 : 二十八. 在Docker中的部署以及docker-compose的使用
-
在Asp.Net Core中配置使用MarkDown富文本编辑器实现图片上传和截图上传(开源代码.net core3.0)
-
在.NET Core 3.0中的WPF中使用IOC图文教程
-
在 ASP.NET Core 项目中使用 npm 管理你的前端组件包
-
FCKeditor在asp.net中的使用