0x01 简介
Josn web token是一种跨域验证身份的方案。
0x02 JWT的组成
头部(header)
{
"alg":"HS256" //alg声明这个JWT签名使用的加密算法。
"typ":"JWT" //typ声明token的类型。
}
声明(claims)
{
可自定义如"user":"Asson"等value,也可使用默认的value,
特别注意iat和exp字段,需要针对性的进行修改以免令牌时间过期
}
签名(signature)
签名为自定义key
头部信息和声明以BASE64URL编码,签名使用alg声明的加密类型将base64url编码后的头部.声明+签名进行加密。最终将这三部分密文中间以.隔开,形成了数据包格式为xxxx.xxxxxxx.xxxxx的JWT。
0x03 工作过程
- 用户在用户端进行登录操作,此时请求包中会将用户名和密码发送给服务器
- 服务器对用户名和密码进行校验,校验通过后生成json头部和声明,将相关的用户信息写入声明中,并用指定算法将KEY加密,从而生成JWT,此时服务器并没有保存用户的登录状态信息
- 服务器通过响应包将JWT返回给用户端
- 用户端再次与服务器进行会话时,用户端会将JWT写在HTTP请求头的authorization字段
- 服务器对JWT进行验证,若验证成功,则确认用户的登录状态,并返回响应包
0x04 利用方式
- 伪造
- 无秘钥
- 修改alg为none,删除签名,此时数据包为xxx.xxxx.
- 有秘钥
- 对应修改数据后重新加密
- 爆破
- 针对签名密匙进行爆破
- 配合
- JWT数据中存在参数传递接受处理过程
0x05 如何识别JWT
- javaweb
- authorization字段
- 数据包数据格式
本文仅为个人学习时所作笔记,文中如有错误,烦请各位师傅批评指正,助我进步。