一、appsettings.Json文件配置
配置JWT公用參數。

1 /*JWT設置*/ 2 "JwtSetting": { 3 "Issuer": "http://www.xxxx.cn:8080/", //頒發者 4 "Audience": "http://www.xxxx.cn:8080/", //可以給哪些客戶端使用 5 "SecretKey": "8B6E0B32BE822E4144315F05E7825150" //秘鑰 6 },
二、JWTHelper自定義服務類
這部分代碼主要是為了生存Token,以及解析加密的當前接口調用用戶id

1 public class JWTService 2 { 3 #region 依賴注入 4 private readonly IConfiguration _configuration; 5 6 public JWTService(IConfiguration configuration) 7 { 8 _configuration = configuration; 9 } 10 #endregion 11 12 #region 方法 13 /// <summary> 14 /// 獲取UserId 15 /// </summary> 16 /// <param name="UserId"></param> 17 /// <returns></returns> 18 public string GetToken(string UserId) 19 { 20 //相關Token的常量 21 var claims = new[] 22 { 23 new Claim(ClaimTypes.SerialNumber, UserId) 24 }; 25 26 var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JwtSetting:SecretKey"])); 27 var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); 28 29 //JWT規定的部分字段 30 var token = new JwtSecurityToken( 31 issuer: _configuration["JwtSetting:Issuer"],//提供者 32 audience: _configuration["JwtSetting:Audience"],//被授權者 33 claims: claims, 34 expires: DateTime.Now.AddHours(24),//過期時間 35 signingCredentials: creds 36 ); 37 38 string Token = new JwtSecurityTokenHandler().WriteToken(token); 39 return Token; 40 } 41 42 /// <summary> 43 /// 獲取當前登錄用戶ID 44 /// </summary> 45 /// <param name="User"></param> 46 /// <returns></returns> 47 public string GetCurrentUserId(ClaimsPrincipal User) 48 { 49 return User.Claims.SingleOrDefault(t => t.Type == ClaimTypes.SerialNumber).Value; 50 } 51 #endregion 52 }
三、Startup配置

1 #region JWT配置 2 services.AddAuthentication(options => { 3 //認證middleware配置 4 options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; 5 options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; 6 }) 7 .AddJwtBearer(options => { 8 //主要是jwt token參數設置 9 options.TokenValidationParameters = new TokenValidationParameters { 10 //頒發者 11 ValidateIssuer = true, 12 ValidIssuer = Configuration["JwtSetting:Issuer"], 13 //被授權者 14 ValidateAudience = true, 15 ValidAudience = Configuration["JwtSetting:Audience"], 16 //秘鑰 17 ValidateIssuerSigningKey = true, 18 IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtSetting:SecretKey"])), 19 //是否驗證失效時間【使用當前時間與Token的Claims中的NotBefore和Expires對比】 20 ValidateLifetime = true, 21 ClockSkew = TimeSpan.FromMinutes(5)//允許的服務器時間偏移量【5分鍾】 22 }; 23 }); 24 #endregion;

1 //添加認證中間件【必須在授權前面添加】 2 app.UseAuthentication(); 3 //添加授權中間件 4 app.UseAuthorization();

1 #region 注冊jwt中間件 2 services.AddTransient<JWTService>(); 3 #endregion
四、登錄調用
4.1、依賴注入
4.2、返回給前端token
五、前端處理
前端拿到后,保存在全局參數中。
六、其他接口調用
這里一並給大家展示layui.js的兩種類型請求。
6.1、table表單
6.2、普通ajax請求,注意跨域,后台接口也要設置跨域問題。
6.3、請求頭展示
6.4、后台方法
6.5、之后拿到驗證返回標志和查詢請求接口用戶id,這里的User是 ClaimsPrincipal里面的User,,這里的User.Identity.IsAuthenticated是bool類型的,成功是返回true,失敗返回false,但是要想知道具體是權限不夠還是請求時間超時,
我還沒有辦法分解處理,有辦法的大佬可以評論或者私信我,萬分感激。之后返回給前端,前端拿到返回的401,就返回登錄頁面,就可以了。希望對大家有幫助。