当前位置: 首页 > news >正文

c# 使用 jwt

基于 oauth2.0 协议,

具体原理可以参考:https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

    public class JWTHelper{private const string salt = "123";//盐//获得jwt令牌public static string Create(string info){Dictionary<string, string> header = new Dictionary<string, string>();header.Add("alg", "MD5");header.Add("typ", "JWT");Dictionary<string, object> payload = new Dictionary<string, object>();//JWT 官方字段DateTime now = System.DateTime.Now;payload.Add("exp", now.AddHours(24));//过期时间payload.Add("nbf", now);//生效时间payload.Add("iat", now);//签发时间//jwt 特有字段payload.Add("info", info);string base64Header = Base64Url(Newtonsoft.Json.JsonConvert.SerializeObject(header));string base64Payload = Base64Url(Newtonsoft.Json.JsonConvert.SerializeObject(payload));string tmp = base64Header + "." + base64Payload;string sign = Md5(tmp + salt);//加盐return base64Header + "." + base64Payload + "." + sign;}//校验是否合法,是否过期public static bool Check(string token, out string info){info= "";try{string[] arr = token.Split('.');string base64Header = arr[0];string base64Payload = arr[1];string sign = arr[2];var signCheck = Md5(base64Header + "." + base64Payload + salt);if (signCheck != sign){return false;}var dic = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(Base64UrlDecode(base64Payload));if (Convert.ToDateTime(dic["exp"]) < System.DateTime.Now){//过期了return false;}info = dic["info"].ToString();return true;}catch (Exception err){return false;}}//获得base64编码private static string Base64Url(string input){//Base64 有三个字符+、/和=,在 URL 里面有特殊含义,所以要被替换掉:=被省略、+替换成-,/替换成_ 。string output = "";byte[] bytes = System.Text.Encoding.UTF8.GetBytes(input);try{output = Convert.ToBase64String(bytes).Replace('+', '-').Replace('/', '_').TrimEnd('=');}catch (Exception e){throw e;}return output;}//获得base64解码private static string Base64UrlDecode(string input){string output = "";input = input.Replace('-', '+').Replace('_', '/');switch (input.Length % 4){case 2:input += "==";break;case 3:input += "=";break;}byte[] bytes = Convert.FromBase64String(input);try{output = System.Text.Encoding.UTF8.GetString(bytes);}catch{output = input;}return output;}//获得md5校验码private static string Md5(string input, int bit = 16){System.Security.Cryptography.MD5CryptoServiceProvider md5Hasher = new System.Security.Cryptography.MD5CryptoServiceProvider();byte[] hashedDataBytes;hashedDataBytes = md5Hasher.ComputeHash(System.Text.Encoding.GetEncoding("gb2312").GetBytes(input));System.Text.StringBuilder tmp = new System.Text.StringBuilder();foreach (byte i in hashedDataBytes){tmp.Append(i.ToString("x2"));}if (bit == 16)return tmp.ToString().Substring(8, 16);elseif (bit == 32) return tmp.ToString();//默认情况else return string.Empty;}}

  

http://www.rkmt.cn/news/31910.html

相关文章:

  • 2025义乌做刺绣的厂家推荐榜单
  • 2025 年矿车生产,井下矿车,底侧卸式矿车厂家最新推荐,产能、专利、环保三维数据透视
  • DP1312多协议高性能读卡芯片支持A/B/Felaca/18092智能门锁读卡器模拟卡兼容PN512 - 动能世纪
  • 醒图电脑版下载与安装教程(2025最新版)
  • 读书笔记:告别数据冗余!Oracle引用分区让父子表管理如此简单
  • 谷歌翻译 100 遍《我常常追忆过去》
  • 2025 年 10 月绕包电缆头,熔接电缆头,预制电缆头,冷缩管电缆头厂家最新推荐,产能、专利、环保三维数据透视
  • 2025 年 10 月 10KV 冷缩电缆附件,20KV 冷缩电力电缆附件,35KV 冷缩电力电缆附件厂家最新推荐,聚焦资质、案例、售后的实力厂家深度解读
  • Android Studio 使用glibc2.28的版本
  • 2025年10月兰花油品牌推荐榜:五款精华油深度对比与选购指南
  • 2025年浅拾兰花双萃致臻精华油:从成分与科技维度解析其护肤功效
  • 何为高阶组件(higherordercomponent) ?
  • 2025年浅拾兰花双萃致臻精华油:成分技术与功效表现的深度解析
  • 2025年浅拾兰花双萃致臻精华油:从成分与技术维度解析其护肤效能
  • Node-RED正在颠覆整个物联网网关行业
  • 2025 年进口螺杆泵,萨伯特螺杆泵,污泥螺杆泵厂家最新推荐,实力品牌深度解析采购无忧之选!
  • ODS层逻辑加工 - 萌哥
  • 大资料消息中间件选型终极指南:深度解析Kafka、Pulsar、RocketMQ架构与性能
  • 2025矿山机厂家推荐-精选矿山开采设备厂家推荐
  • 检测机内开拉不动的常见原因
  • 2025 年 10 月动轨式格栅、动轨式格栅除污机厂家最新推荐,产能、专利、环保三维数据透视
  • 销售公司绩效考核全攻略:维度、原则与数字化赋能方案
  • 权威发布:2025年最佳在线客服系统TOP 10榜单
  • 2025 年二手宽体车厂家最新推荐榜,聚焦企业综合实力与市场口碑深度解析
  • 《CSS盒子模型》笔记总结 - 教程
  • 小程序-跳转到公众号
  • 如何解决一堆向量的问题?10、Self-attention - -一叶知秋
  • win11系统优化(右键鼠标选项功能太多)
  • win10激活脚本
  • MCS-51中断系统