JWT生成的token——中间部分Payload的坑

博客内容讲述了在使用JWT进行token认证时,为了解决敏感信息暴露的问题,采用了AES加密中间Payload部分。这导致在解密时,HttpServletRequest中的token不再符合JWT的三段式结构,从而引发解码错误。作者通过反射的方式,在解密验签成功后,将解密后的JWT格式token重新放入HttpServletRequest中,解决了这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JWT进行token认证应该都用过,标准的加密(Base64 编码)后的token是这样的三段式的:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiaWQiOiIxMjM0NTY3ODkwIiwiZXhwIjoxNjA1MDAxNzQyLCJpYXQiOjE2MDQ5OTQ1NDIsImp0aSI6IjU5YjI2NDEzLTE4MjMtNDVlZS1iZTI1LTA5M2ZjMjlhMmYzOCJ9.FMpVjuTUSOY5sbYqbJslJCnIvExfhPciSHXFZ9B8nH0
他是一个三段式的,中间使用两个.(点)隔开的。

JWT包含了三部分:
Header 头部
Payload 负载
Signature 签名/签证

这里不在详细介绍了,主要说一下JWT组成部分中间的这一段(Payload 负载)自己遇到的坑:

这是上面列举的token中间一段,由于是base64编码可以直接解密出来的,
在这里插入图片描述
在进行渗透测试的时候发现敏感信息暴露,所以需要对信息进行加密。自己的思路就是在生成token后,进行二次加密,如下图:在这里插入图片描述
AES加密后Token: VnkrQUODp5CiSeiX4jMIqE6i6CT29r13fk8k7D39UIMmc3VN6KqM8tfgtkH4si8mHf07Uc2R6Lw2JljJnfoBsmCnEKPwumbxvMaoxdz3cXvLYs4CD2zNHKceguK1ktLCvP4KQrdSrUZRP1HGfJnAdMDYJY748Q7n0LPA+KHtEIn0nYHrZj5x9VRzHHfU2otDwm5yzMV1wjnm2wzKJExYXjyT4zY07vYPtkyCtw6W3KtgeIEYWZyyPfzxvGMGaGJJzPeE563TkpUldF8QAnCXiQ==

这样就没法直接解密出来了。

在解密的时候,先对生成的AES加密信息先解密一次,转成jwt标准的三段式:
在这里插入图片描述
接下来就说到坑了:由于我在token生成时经过AES加密后,HttpServletRequest中此时不是JWT三段式token,这就导致后面接口使用JWT.decode方法获取token信息的时候报错:
在这里插入图片描述
没办法影响到全局功能只能改了,后面查看资料参考这篇资料启发

https://blog.csdn.net/u010698072/article/details/79973830

在token解密验签成功后,我加个反射将解密后的JWT格式token通过反射,修改token值加入到HttpServletRequest中去:

在这里插入图片描述
在这里插入图片描述

这样就就把之前AES解密后的JWT格式的token塞入到httpServletRequest中去了,后面接口获取token信息就正常了。

最后贴上相关的完整代码:

JwUtil:

package token;

import com.shop.result.CommonResult;
import io.jsonwebtoken.*;
import org.apache.tomcat.util.http.MimeHeaders;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class JwtUtil {
   

    public 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值