jwt

构成
第一部分:头(header)第二部分:载荷 (payload)第三部分:(signature,json)签证 通过base64转码
第一部分:
声明:jwt
加密算法:HMAC SHA256
{
'typ':'JWT',
'alg':'HS256'
}
然后将其进行base64加密(可以对称解密)得到jwt的第一部分
第二部分:
iss:jwt签发者
sub:jwt所面向的用户
aud:接收jwt的一方
exp:jwt的过期时间,必须大于签发时间
nbf:定义在什么时间之前,该jwt是不可用的
lat:jwt的签发时间
jti:jwt的唯一身份标识,主要用来作为一次性的token,从而回避时序攻击
{
'sub':'1234567890',
'name':'ZYB',
'admin':true
}
然后将其进行base64加密得到jwt的第二部分
第三部分:
header(base64后的)
payload(base64后的)
secret
这个部分需要base64加密后的header和base64加密后的payload使用,连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了第三部分

var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload);
var signature = HMACSHA256(encodedString,'secret');
注意:secret是保存在服务器的,jwt的签发生成也是在服务端,secret就是用来进行jwt的签发和jwt的验证,所以,它就是你服务端的私钥,在任何场景都不应该流露出去,,一但客户端得知这个secret,那就意味着客户端是可以自我签发jwt了
关于签发和核验jwt,使用Django REST framework JWT 扩展来完成

校验:
1、将token按.拆分为三段字符串,第一段 头加密字符串 一般不需要做任何处理
2、第二段 体加密,要反解出用户主键,通过主键从User表中就能得到登录用户,过期时间和设备信息都是安全信息,确保token没过期,且是同一设备来的
3、再用第一段+第二段+服务器安全吗(secret 不可逆md5),与第三段 签名字符串进行碰撞校验

posted @   zybyekai  阅读(119)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示