2021-07-01

jwt-在asp.net core中的使用jwt

JWT学习文章:

第一篇:JWT原理

第二篇:JWT原理实现代码

第三篇:在asp.net core中的使用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 = "";}

 

在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......

原文转载:http://www.shaoqun.com/a/839196.html

跨境电商:https://www.ikjzd.com/

灯塔计划:https://www.ikjzd.com/w/1281

auditor:https://www.ikjzd.com/w/2437

crowd:https://www.ikjzd.com/w/880


JWT学习文章:第一篇:JWT原理第二篇:JWT原理实现代码第三篇:在asp.netcore中的使用JWT前两篇文章中我写了jwt的原理,并且也用原理实现了jwt的验证。如果要看前两篇文章,点击上面的连接就能够链接过去。第二篇文章实现jwt原理时有同学就说每个成熟的框架中都有相应的jwt实现或集成。说的不错,每个主流的框架中几乎毫无例外的都集成了jwt的实现,但是我们上篇文章的重点是希望大家能够明
这些年,你被工厂搞砸的订单还少吗?:https://www.ikjzd.com/articles/106872
如何理解亚马逊review星级?哪些因素可以影响review星级?:https://www.ikjzd.com/articles/106874
亚马逊封号带来的损失,这篇文章帮你省掉!:https://www.ikjzd.com/articles/106875
继美国商标涨价后,《哪吒》被曝竟抢注近2000商标!:https://www.ikjzd.com/articles/106876
口述:妻子向闺蜜分享我房事细节真崩溃:http://lady.shaoqun.com/m/a/79495.html
男人爱㖭女人下面 喜欢让人㖭我下面:http://www.30bags.com/m/a/249811.html
和两个黑人同时做 我被两个老外抱着高爽翻了:http://www.30bags.com/m/a/249821.html
舌尖分开她的细缝舔舐 他的舌尖在她的小核上逗弄:http://www.30bags.com/m/a/249712.html
妈妈,我做爱了...:http://lady.shaoqun.com/a/394633.html
侦探小说:女主播被绑架被入侵(短篇侦探小说):http://lady.shaoqun.com/a/394634.html
权威详解!7月16日起欧盟市场监管新规实施,出口欧盟企业不这样做算违法行为:https://www.ikjzd.com/articles/146276
为什么有钱人喜欢在吃饭的时候勾搭美女?:http://lady.shaoqun.com/a/394635.html

No comments:

Post a Comment