C#|C# JWT权限验证的实现
目录
- 什么是JWT,它是一种对API的保护方案,为什么要进行保护呢
- 设计原则
- 第一步:创建token
- 第二步:解析token
什么是JWT,它是一种对API的保护方案,为什么要进行保护呢
- 防泄漏:你肯定不希望你的数据能被别人随意调用,比如公司的机密信息,不可能每个人都可以访问到
- 防攻击:防止被人伪装恶意调用接口,利用网关就把请求拦截在外面,防止对服务器造成资源压力
- 防止被人篡改,导致请求不到信息,防重放攻击(案例:在公共网络环境中,请求被截获,稍后被重放或多次重放)
设计原则
- 轻量级
- 易于开发、测试和部署
- 适合于异构系统(跨操作系统、多语言简易实现)
- 所有写操作接口(增、删、改 操作)
- 非公开的读接口(如:涉密/敏感/隐私 等)
第一步:创建token
/// /// 创建token/// ///[HttpPost]public IActionResult CreateJWT1(){//创建声明Token数组var claim = new Claim[]{new Claim("userid","123"),new Claim("userCode","kevinMa"),new Claim("projectID","62"),new Claim("isValid","1"),new Claim("userName","马鹏"),new Claim("address","深圳"),new Claim("datetime",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")),new Claim("expires",DateTime.Now.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss")),}; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yanglingcong@qq.com")); //密钥大小要超过128bt,最少要16位//实例化一个token对象//第一种方式//var token = new JwtSecurityToken(claims: claim); //第二种方式var token = new JwtSecurityToken(issuer: "kevin",//发起人:当前项目audience: "kevin project",//订阅:我们需要谁去使用这个Tokenclaims: claim,//声明的数组expires: DateTime.Now.AddHours(1),//当前时间加一小时,一小时后过期signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256)//数字签名 第一部分是密钥,第二部分是加密方式); //生成tokenvar jwtToken = new JwtSecurityTokenHandler().WriteToken(token); return ToSuccessJson(new { token = jwtToken }); }
第二步:解析token
/// /// 解析token/// /// ///[HttpPost]public IActionResult JXToken(string token){//第一种直接用JwtSecurityTokenHandler提供的read方法var jwtHander = new JwtSecurityTokenHandler(); JwtSecurityToken jwtSecurityToken = jwtHander.ReadJwtToken(token); GetTokenModel tokenModel = new GetTokenModel(); var currentInfo = jwtSecurityToken.Claims; if (currentInfo.Count() > 0){tokenModel.userid = currentInfo.FirstOrDefault(f => f.Type == "userid").Value; tokenModel.userCode = currentInfo.FirstOrDefault(f => f.Type == "userCode").Value; tokenModel.projectID = currentInfo.FirstOrDefault(f => f.Type == "projectID").Value; tokenModel.userName = currentInfo.FirstOrDefault(f => f.Type == "userName").Value; tokenModel.address = currentInfo.FirstOrDefault(f => f.Type == "address").Value; tokenModel.datetime = currentInfo.FirstOrDefault(f => f.Type == "datetime").Value; tokenModel.expires = currentInfo.FirstOrDefault(f => f.Type == "expires").Value; }return ToSuccessJson(new { tokenModel }); }
【C#|C# JWT权限验证的实现】到此这篇关于C# JWT权限验证的实现的文章就介绍到这了,更多相关C# JWT权限验证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 内网渗透|一文理解 Windows 身份验证原理
- 常见提权汇总|权限提升-windows提权补丁-溢出-AT-SC-PS提权
- Linux|Linux下的权限理解
- CISCO交换|VLAN间路由——实验验证
- Vue实现验证码登录的方法实例
- springboot整合shiro实现登录验证授权的过程解析
- linux学习|[linux]十、文件目录权限(permission)及归属-part1
- 算法题-字符串3.21
- 软件测试|何为软件测试
- LazyCaptcha自定义随机验证码和字体的示例详解