C# JWT权限验证的实现
短信预约 -IT技能 免费直播动态提醒
什么是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 });
}
到此这篇关于C# JWT权限验证的实现的文章就介绍到这了,更多相关C# JWT权限验证内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341