生成的 JWT 在解码时出现问题

问题描述 投票:0回答:1

我设置了一个过滤器,用于检查向我的应用程序发出的请求中是否存在 JWT 令牌。这个 JWT 的生成步骤似乎是正确的,因为我可以毫无问题地生成它。但是,在检查此 JWT 时,我有一个例外:

io.jsonwebtoken.MalformedJwtException: JWT strings must contain exactly 2 period characters. Found: 1
    at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:275) ~[jjwt-impl-0.11.5.jar:0.11.5]
    at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:529) ~[jjwt-impl-0.11.5.jar:0.11.5]
    at io.jsonwebtoken.impl.DefaultJwtParser.parseClaimsJws(DefaultJwtParser.java:589) ~[jjwt-impl-0.11.5.jar:0.11.5]
    at io.jsonwebtoken.impl.ImmutableJwtParser.parseClaimsJws(ImmutableJwtParser.java:173) ~[jjwt-impl-0.11.5.jar:0.11.5]
    at com.authenticatorGateway.authenticatorGateway.secutiry.JwtService.extractAllClaims(JwtService.java:37) ~[classes/:na]
    at com.authenticatorGateway.authenticatorGateway.secutiry.JwtService.extractClaim(JwtService.java:32) ~[classes/:na]
    at com.authenticatorGateway.authenticatorGateway.secutiry.JwtService.extractUserName(JwtService.java:28) ~[classes/:na]
    at com.authenticatorGateway.authenticatorGateway.secutiry.JwtService.isTokenValid(JwtService.java:54) ~[classes/:na]
    at com.authenticatorGateway.authenticatorGateway.secutiry.JwtFilter.doFilterInternal(JwtFilter.java:49) ~[classes/:na]

我已经在代码中放置了几个断点来检查 Bearer 的验证是否正确完成以及是否将其删除。从子流步骤之后的调试中,我可以看到要评估的令牌与传递的令牌完全相同,因此它应该可以工作。但是,在提取 JWT 令牌的声明时,我遇到了这个例外。我已经对子字符串执行了 trim() 操作以解决额外的空格,但仍然不起作用。

对可能出现的问题有什么建议吗?

java spring-boot spring-security jwt
1个回答
0
投票

这个错误大概不是谎言。 JWT 确实有两个点。总是。除非...你有一个完全未签名的 JWT。这基本上是无用的,但从技术上来说是可能的。这样的 JWT 中只有一个点。

鉴于此类 JWT 大多无用(您无法验证它们,因此任何人都可以制作它们;鉴于 JWT 主要用于中继身份验证信息;如果没有验证,那是..毫无意义的) - 我认为不是值得“修复”解析您的 JWT 的任何内容,使其能够处理无签名的 JWT。相反,无论制作 JWT 是什么,都需要修复。

© www.soinside.com 2019 - 2024. All rights reserved.