C# JWT权限验证的实现
作者:幸福简单2020 时间:2022-11-24 00:57:13
什么是JWT,它是一种对API的保护方案,为什么要进行保护呢
防泄漏:你肯定不希望你的数据能被别人随意调用,比如公司的机密信息,不可能每个人都可以访问到
防攻击:防止被人伪装恶意调用接口,利用网关就把请求拦截在外面,防止对服务器造成资源压力
防止被人篡改,导致请求不到信息,防重放攻击(案例:在公共网络环境中,请求被截获,稍后被重放或多次重放)
设计原则
轻量级
易于开发、测试和部署
适合于异构系统(跨操作系统、多语言简易实现)
所有写操作接口(增、删、改 操作)
非公开的读接口(如:涉密/敏感/隐私 等)
第一步:创建token
/// <summary>
/// 创建token
/// </summary>
/// <returns></returns>
[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",//订阅:我们需要谁去使用这个Token
claims: claim,//声明的数组
expires: DateTime.Now.AddHours(1),//当前时间加一小时,一小时后过期
signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256)//数字签名 第一部分是密钥,第二部分是加密方式
);
//生成token
var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
return ToSuccessJson(new { token = jwtToken });
}
第二步:解析token
/// <summary>
/// 解析token
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
[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 });
}
来源:https://blog.csdn.net/weixin_46942018/article/details/122302408
标签:C#,JWT,权限验证
0
投稿
猜你喜欢
C#线程同步的几种方法总结
2022-01-31 19:49:06
flutter 屏幕尺寸适配和字体大小适配的实现
2022-06-10 06:54:49
Android中通过Notification&NotificationManager实现消息通知
2023-01-01 16:57:05
RocketMQ4.5.X 实现修改生产者消费者日志保存路径
2021-05-24 23:58:37
java利用jacob将word转pdf
2023-02-05 08:23:03
MyBatis逆向工程的创建和使用
2022-07-18 20:07:55
Android自定义View实现通讯录字母索引(仿微信通讯录)
2023-05-14 04:34:22
通俗讲解JVM的类加载机制
2023-01-03 03:35:03
Java 数据结构与算法系列精讲之字符串暴力匹配
2021-10-06 05:43:27
C#函数式编程中的标准高阶函数详解
2021-06-09 06:27:07
java反射之Method的invoke方法实现教程详解
2023-07-09 20:24:36
SpringCloud微服务架构升级汇总
2022-05-04 06:09:19
Spring+SpringMVC+MyBatis深入学习及搭建(二)之MyBatis原始Dao开发和mapper代理开发
2021-07-24 06:36:00
Spring中的两种代理JDK和CGLIB的区别浅谈
2023-01-04 19:05:05
JVM内存增强之逃逸分析
2022-01-23 00:22:08
OpenCV实现直线检测并消除
2023-07-12 20:44:36
java多线程加锁以及Condition类的使用实例解析
2023-08-07 07:25:30
简单总结C++中指针常量与常量指针的区别
2022-06-28 17:33:12
java并发编程专题(四)----浅谈(JUC)Lock锁
2021-11-30 00:20:23
如何使用LinQ To Object把数组或DataTable中的数据进行向上汇总
2022-04-05 17:07:33