如何在net.core 中使用 JWT(Json web token) 身份验证授权
在我们登录过程中或者是有一些功能我们是需要进行身份验证,不同的用户只能实现不同的功能
在这个过程中我们可以使用Token身份验证授权来解决
直接上代码:(以下代码都是core.5.0版本)
1引用包

需要注意的是版本要选对(我的core版本只跟新到5.0)
2.设计自己的实体类(这里只展示登录)

3.创建JWT帮助类
1 using Microsoft.Extensions.Configuration; 2 using Microsoft.IdentityModel.Tokens; 3 using System; 4 using System.Collections.Generic; 5 using System.Security.Claims; 6 using System.Text; 7 using System.IdentityModel.Tokens.Jwt; 8 9 namespace JwtAuthDemo.Helpers 10 { 11 public class JwtHelpers 12 { 13 private readonly IConfiguration Configuration; 14 15 public JwtHelpers(IConfiguration configuration) 16 { 17 this.Configuration = configuration; 18 } 19 public string GenerateToken(string userName, int expireMinutes = 30) 20 { 21 var issuer = Configuration.GetValue<string>("JwtSettings:Issuer"); 22 var signKey = Configuration.GetValue<string>("JwtSettings:SignKey"); 23 //添加claims 24 var claims = new List<Claim>(); 25 //在 RFC 中 一共有七种claims 我们现在用的只有以下两种 26 claims.Add(new Claim(JwtRegisteredClaimNames.Sub, userName)); // User.Identity.Name 27 claims.Add(new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())); // JWT ID 28 //你自己需要登录的用户名 29 claims.Add(new Claim("roles", "Admin")); 30 claims.Add(new Claim("roles", "Users")); 31 var userClaimsIdentity = new ClaimsIdentity(claims); 32 33 // 建立密钥 34 var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(signKey)); 35 36 37 var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature); 38 39 // 建立 SecurityTokenDescriptor 40 var tokenDescriptor = new SecurityTokenDescriptor 41 { 42 Issuer = issuer, 43 44 Subject = userClaimsIdentity, 45 Expires = DateTime.Now.AddMinutes(expireMinutes), 46 SigningCredentials = signingCredentials 47 }; 48 49 //获取序列化的Token 50 var tokenHandler = new JwtSecurityTokenHandler(); 51 var securityToken = tokenHandler.CreateToken(tokenDescriptor); 52 var serializeToken = tokenHandler.WriteToken(securityToken); 53 54 return serializeToken; 55 } 56 } 57 }
4.设置Issuer以及SignKey
在
添加

5.添加连接接口
在 Startup 中添加接口
services.AddSingleton<JwtHelpers>();
6配置Swagger认证
1 #region 开启Swagger认证 2 c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme() 3 { 4 5 Description = "在下框中输入请求头中需要添加Jwt授权Token:Bearer Token", 6 Name = "Authorization", 7 In = ParameterLocation.Header, 8 Type = SecuritySchemeType.ApiKey, 9 BearerFormat = "JWT", 10 Scheme = "Bearer" 11 }); 12 13 c.AddSecurityRequirement(new OpenApiSecurityRequirement 14 { 15 { 16 new OpenApiSecurityScheme 17 { 18 Reference = new OpenApiReference { 19 Type = ReferenceType.SecurityScheme, 20 Id = "Bearer" 21 } 22 }, 23 new string[] { } 24 } 25 }); 26 #endregion
添加位置为

最后一步就可以通过控制器进行调试使用了
1 using JwtAuthDemo.Helpers; 2 using Microsoft.AspNetCore.Authorization; 3 using Microsoft.AspNetCore.Http; 4 using Microsoft.AspNetCore.Mvc; 5 using System; 6 using System.Collections.Generic; 7 using System.Linq; 8 using System.Threading.Tasks; 9 using Jwt.Model; 10 namespace Jwt.Controllers 11 { 12 [Authorize] 13 [Route("api/[controller]")] 14 [ApiController] 15 public class LoginController : ControllerBase 16 { 17 private readonly JwtHelpers _helpers; 18 public LoginController(JwtHelpers helpers) 19 { 20 _helpers = helpers; 21 } 22 //任何请求都可以访问该方法 23 [AllowAnonymous] 24 [HttpPost,Route("login")] 25 public IActionResult Login(loginModel login) 26 { 27 if(ValidateUser(login)) 28 { 29 var token = _helpers.GenerateToken(login.UserName); 30 HttpContext.Response.Headers.Add("token", token); 31 return Ok(); 32 } 33 else 34 { 35 //失败的请求 36 return BadRequest(); 37 } 38 } 39 [Authorize] 40 [HttpGet] 41 public bool ValidateUser(loginModel login)//测试代码 42 { 43 return true; 44 } 45 [Authorize] 46 [HttpGet,Route("Test")] 47 public IActionResult Test() 48 { 49 return Ok("Test"); 50 } 51 } 52 }
使用原理为获取Token码 进行验证

不用Token登录会显示401

进入Swgger验证

Bearer + Token验证码

可以设置多个Token码 进行不同用户使用;


浙公网安备 33010602011771号