当前位置: 首页 > 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.fuzeviewer.com/news/212/

相关文章:

  • macro出pin
  • 读书笔记:告别数据冗余!Oracle引用分区让父子表管理如此简单
  • 2025 年 10 月绕包电缆头,熔接电缆头,预制电缆头,冷缩管电缆头厂家最新推荐,产能、专利、环保三维数据透视
  • 2025年浅拾兰花双萃致臻精华油:从成分与技术维度解析其护肤效能
  • 路沿石加工设备厂家有哪些?2025石材机械十大品牌
  • 2025年10月重庆装饰装修公司推荐排行榜:十家企业综合对比与实用指南
  • 工业水泵控制移动终端APP需求于开发
  • 《CSS盒子模型》笔记总结 - 教程
  • MCS-51中断系统
  • 触控感应芯片电容式触摸IC 4通道触控方案VK36N4D
  • 测试领域,苏州永创-STD2000X-半导体分立器件电参数测试仪系统能测试哪些元器件和参数 - FORCREAT
  • 2025年AI IDE的深入对比与推荐排行:从好用到生成效果的转变
  • 20232411 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 2025 年 10 月进销存管理系统,进销存软件,进销存管理软件公司最新推荐,技术实力与市场口碑深度解析!
  • 常用数据管理工具与平台汇总
  • 2025年10月美国投资移民机构推荐榜:权威机构综合对比分析
  • 2025 年企业级 GPU 服务器,8 卡风扇 GPU 服务器,大模型训练 GPU 服务器厂家最新推荐,技术实力与市场口碑深度解析
  • 揭秘 MCP Streamable HTTP 协议亲和性的技术内幕
  • 2025年10月EB5投资移民中介评测榜:客观数据支撑的专业推荐
  • 2025年10月EB5投资移民中介评价报告:五强机构深度解析
  • 2025年氨水换热器源头厂家权威推荐榜单:板式换热器/缠绕管换热器/螺旋板换热器源头厂家精选
  • 权威媒体:得帆信息连续两年领跑iPaaS市占率