/// <summary> /// 生成JwtToken /// </summary> /// <param name="tokenModel"></param> /// <returns></returns> public static async Task <LoginParam> GetJwtToken(TokenModelJwt tokenModel) { string iss = ConfigHelper.JwtIssuer; string aud = ConfigHelper.JwtAudience; string secret = ConfigHelper.JwtSecret; int overSec = ConfigHelper.JwtOverSec; DateTime dtNow = DateTime.Now; List <Claim> claims = GetJwtClaim(tokenModel, iss, aud, overSec, dtNow); //秘钥 (SymmetricSecurityKey 对安全性的要求,密钥的长度太短会报出异常) var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var jwt = new JwtSecurityToken(issuer: iss, claims: claims, signingCredentials: creds); var jwtHandler = new JwtSecurityTokenHandler(); var encodedJwt = jwtHandler.WriteToken(jwt); // 保存用户信息到HttpContext.User await IdentifyLogin(claims); //// 屏蔽,现在Mvc跳转有Cookies认证,没必要保存Jwt Cookie //// Jwt授权保存到Cookies //StaticHttpContext.Current.Response.Cookies.Append(AuthHelper.JwtAuthName, encodedJwt, // new CookieOptions // { // HttpOnly = true, // Expires = new DateTimeOffset(dtNow).AddSeconds(overSec) // }); return(new LoginParam { Token = encodedJwt, ExpiresIn = overSec, ExpireTimeStamp = new DateTimeOffset(dtNow.AddSeconds(overSec)).ToUnixTimeMilliseconds(), UserName = tokenModel.UserName }); }
/// <summary> /// 验证Jwt授权 /// </summary> /// <param name="httpContext"></param> /// <returns></returns> public Task Invoke(HttpContext httpContext) { PreProceed(httpContext); //检测是否包含'Authorization'请求头 if (!httpContext.Request.Headers.ContainsKey("Authorization")) { PostProceed(httpContext); return(_next(httpContext)); } var tokenHeader = httpContext.Request.Headers["Authorization"].ToString().Replace("Bearer ", ""); try { if (tokenHeader.Length >= 128) { TokenModelJwt tm = AuthHelper.DecryptJwtToken(tokenHeader); //授权 //var claimList = new List<Claim>(); //var claim = new Claim(ClaimTypes.Role, tm.Role); //claimList.Add(claim); //var identity = new ClaimsIdentity(claimList); //var principal = new ClaimsPrincipal(identity); //httpContext.User = principal; } } catch (Exception ex) { //Console.WriteLine($"{DateTime.Now} middleware wrong:{e.Message}"); _logHelper.Error($"JwtTokenAuth:出现异常:{ex.Message}", ex); } PostProceed(httpContext); return(_next(httpContext)); }