From cde56aae50adc11ff8db84e424d873843c566bfd Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期一, 24 二月 2025 23:40:41 +0800 Subject: [PATCH] 优化WCS移库逻辑 --- 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/Authorization/JwtHelper.cs | 121 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 121 insertions(+), 0 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Authorization/JwtHelper.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Authorization/JwtHelper.cs" new file mode 100644 index 0000000..2ac124b --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Authorization/JwtHelper.cs" @@ -0,0 +1,121 @@ +锘縰sing Microsoft.IdentityModel.Tokens; +using System; +using System.Collections.Generic; +using System.IdentityModel.Tokens.Jwt; +using System.Linq; +using System.Security.Claims; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.Const; +using WIDESEA_Core.Helper; +using WIDESEA_Core.HttpContextUser; + +namespace WIDESEA_Core.Authorization +{ + public class JwtHelper + { + + /// <summary> + /// 鐢熸垚JWT + /// </summary> + /// <param name="serInfo"></param> + /// <returns></returns> + public static string IssueJwt(TokenModelJwt tokenModel) + { + string exp = $"{new DateTimeOffset(DateTime.Now.AddMinutes(/*tokenModel.UserId == 1 ? 43200 : */AppSettings.app("ExpMinutes").ObjToInt())).ToUnixTimeSeconds()}"; + List<Claim> claims = new List<Claim> + { + new Claim(JwtRegisteredClaimNames.Jti, tokenModel.UserId.ToString()), + new Claim(JwtRegisteredClaimNames.Iat, $"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}"), + new Claim(JwtRegisteredClaimNames.Nbf, $"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}") , + //JWT杩囨湡鏃堕棿 + //榛樿璁剧疆jwt杩囨湡鏃堕棿120鍒嗛挓 + new Claim (JwtRegisteredClaimNames.Exp, exp), + new Claim(JwtRegisteredClaimNames.Iss, AppSecret.Issuer), + new Claim(JwtRegisteredClaimNames.Aud, AppSecret.Audience), + new Claim(ClaimTypes.Role, tokenModel.RoleId.ToString()), + new Claim(ClaimTypes.Name, tokenModel.UserName), + new Claim(nameof(TokenModelJwt.TenantId), tokenModel.TenantId.ToString()) + }; + + // 鍙互灏嗕竴涓敤鎴风殑澶氫釜瑙掕壊鍏ㄩ儴璧嬩簣锛� + // 浣滆�咃細DX 鎻愪緵鎶�鏈敮鎸侊紱 + //绉橀挜16浣� + var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(AppSecret.JWT)); + var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); + JwtSecurityToken securityToken = new JwtSecurityToken(issuer: AppSecret.Issuer, claims: claims, signingCredentials: creds); + string jwt = new JwtSecurityTokenHandler().WriteToken(securityToken); + return jwt; + } + + /// <summary> + /// 瑙f瀽 + /// </summary> + /// <param name="jwtStr"></param> + /// <returns></returns> + public static UserInfo SerializeJwt(string jwtStr) + { + var jwtHandler = new JwtSecurityTokenHandler(); + JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(jwtStr); + UserInfo userInfo = new UserInfo + { + UserId = Convert.ToInt32(jwtToken.Id), + RoleId = (jwtToken.Payload[ClaimTypes.Role] ?? 0).ObjToInt(), + }; + return userInfo; + } + /// <summary> + /// 鑾峰彇杩囨湡鏃堕棿 + /// </summary> + /// <param name="jwtStr"></param> + /// <returns></returns> + public static DateTime GetExp(string jwtStr) + { + var jwtHandler = new JwtSecurityTokenHandler(); + JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(jwtStr); + + DateTime expDate = (jwtToken.Payload[JwtRegisteredClaimNames.Exp] ?? 0).ObjToInt().GetTimeSpmpToDate(); + return expDate; + } + public static bool IsExp(string jwtStr) + { + return GetExp(jwtStr) < DateTime.Now; + } + + public static int GetUserId(string jwtStr) + { + try + { + if (jwtStr.IsNullOrEmpty()) return 0; + jwtStr = jwtStr.Replace("Bearer ", ""); + return new JwtSecurityTokenHandler().ReadJwtToken(jwtStr).Id.ObjToInt(); + } + catch + { + return 0; + } + } + } + + /// <summary> + /// 浠ょ墝 + /// </summary> + public class TokenModelJwt + { + /// <summary> + /// UserId + /// </summary> + public long UserId { get; set; } + /// <summary> + /// 瑙掕壊 + /// </summary> + public int RoleId { get; set; } + /// <summary> + /// 鑱岃兘 + /// </summary> + public string UserName { get; set; } + + public long TenantId { get; set; } + + } +} -- Gitblit v1.9.3