572 Star 3.2K Fork 1.3K

GVPtomsun28 / bootshiro

 / 详情

jsonWebTokenUtile解析jwt的另一个错误

待办的
创建于  
2021-05-24 19:35

第二个错误是发生在JsonWebTokenUtil里的parseJwt()这个方法里

public static JwtAccount parseJwt(String jwt, String appKey) throws ExpiredJwtException, UnsupportedJwtException, MalformedJwtException, SignatureException, IllegalArgumentException {
        Claims claims = Jwts.parser()
                .setSigningKey(DatatypeConverter.parseBase64Binary(appKey))
                 //在这一行会抛出SignatureException被jwtMatcher捕获到
                .parseClaimsJws(jwt)
                .getBody();

经过debug发现,抛出这个错误是因为在MacValidator的isValid方法中,比较jwt的header和payload生成的摘要和解析jwt获得的摘要不一致,就会报出这个错误。按说没道理呀,不知道怎么处理。

public boolean isValid(byte[] data, byte[] signature) {
        byte[] computed = this.signer.sign(data);
    	//这里的this.signer是macSigner alg=HS512 
        return MessageDigest.isEqual(computed, signature);
    }

评论 (8)

姬缈 创建了任务
姬缈 关联仓库设置为tomsun28/bootshiro
展开全部操作日志

验证的jwt是用这个JsonWebTokenUtil签发的吗

对呀,使用JsonWebTokenUtil里的issueJwt签发的

并且这两个bug并不是每次都出现

之前有人遇到过类似的偶现,定位是传过来的jwt有些字段被xss和防sql注入过滤那块给改变了,导致偶然解析失败。你看看jwt是否被修改呢

那怎么把xss和防sql注入禁用呢

确实是jwt被修改了,注释了xss,目前没再碰到这个问题,感谢感谢

除了使用shiro,也欢迎了解 Sureness :bowtie:

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
1767651 tomsun28 1711073216
Java
1
https://gitee.com/tomsun28/bootshiro.git
git@gitee.com:tomsun28/bootshiro.git
tomsun28
bootshiro
bootshiro

搜索帮助