using System; using System.Collections.Generic; using System.Linq; using System.Text; using Newtonsoft.Json; using Jose; using Common; namespace CommonEntity { public class JWTData { /// /// 主题 /// public string sub { get; set; } /// /// 发行人 /// public string iss { get; set; } /// /// 到期时间 /// public long exp { get; set; } /// /// 用户 /// public string aud { get; set; } /// /// 在此之前不可用 /// public string nbf { get; set; } /// /// 发布时间 /// public string iat { get; set; } /// ///用于标识该JWT /// public string jti { get; set; } public string username { get; set; } } public class ChuangWeiUser { public string UserName { get; set; } public string Version { get; set; } } public class ReturnInfo { public int code { get; set; } public string msg { get; set; } public object data { get; set; } } public class TokenData { public string accessToken { get; set; } public string refreshToken { get; set; } } public class SignKeyCommon { public readonly static string ChuangWei_JWTKey = "#这x是98一个uv永远$不可0能到的a一个数据*"; public static ReturnInfo GetTokenData(string username) { DateTime dt = DateTime.Now.AddMonths(6); string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); long l = Tools.GetCurrentTimeStamp(dt); CommonEntity.JWTData j = new CommonEntity.JWTData(); j.sub = "创维电视登录"; j.exp = l; j.aud = "创维电视accesstoken"; j.nbf = DateTime.Now.AddMinutes(3).ToString("yyyy-MM-dd HH:mm:ss.fff"); j.iat = ti; j.jti = Guid.NewGuid().ToString("N"); j.username = username; var secretKey = Encoding.UTF8.GetBytes(SignKeyCommon.ChuangWei_JWTKey); string token = Jose.JWT.Encode(j, secretKey, JwsAlgorithm.HS256); j.aud = "创维电视refresh_token"; j.jti = Guid.NewGuid().ToString("N"); string refresh_token = Jose.JWT.Encode(j, secretKey, JwsAlgorithm.HS256); ReturnInfo r = new ReturnInfo(); r.code = 200; r.msg = "登录成功"; r.data = new TokenData() { accessToken = token, refreshToken = refresh_token }; return r; } public static bool TokenValidate(string retoken, out JWTData data, out int code, out string msg) { data = new JWTData(); bool isv = false; code = 200; msg = "sucess"; byte[] secretKey = Encoding.UTF8.GetBytes(SignKeyCommon.ChuangWei_JWTKey); JWTData MMU = Jose.JWT.Decode(retoken, secretKey, JwsAlgorithm.HS256); if (MMU != null) { DateTime dt = Tools.GetCurrentDateTime(MMU.exp); string username = MMU.username; if (dt > DateTime.Now) { isv = true; data = MMU; } else { isv = false; code = 10042; msg = "Token值已经过期"; } } else { isv = false; code = 10021; msg = "非法token"; } return isv; } } }