DefaultJwtParser:如何仅解码 JWT?(没有密钥,没有验证)

Jar*_*uba 7 java jwt jjwt

我不想使用密钥(我没有)验证 JWT,我只想解码 JWT 并读取有效负载。这可以使用 jsonwebtoken.io:jjwt 来实现吗?API 中似乎缺少一个方法。

当然,我可以自己对令牌进行拆分和 Base64 解码,但感觉就像是人们期望从 JWT 库中获得的最基本的功能;因此我怀疑我错过了一些东西。

bid*_*jee 16

试试下面的代码:

int i = jws.lastIndexOf('.')
String withoutSignature = jws.substring(0, i+1);
Jwt<Header,Claims> untrusted = Jwts.parser().parseClaimsJwt(withoutSignature);
Run Code Online (Sandbox Code Playgroud)

您可以在最后一个句点字符 ('.') 之后“砍掉”最后一个“部分”,这是 JWS 签名。然后将该 JWT 读为“正常”JWT(非 JWS)。

您要求的是忽略有效 JWS 上的签名并无论如何读取 JWT 标头和正文。这违反了 JWS 规范,因此 JJWT 不支持它。

这是从这个github issue 中获取的,我想这与您面临的问题相同。

  • 这是非常糟糕的方法,只需使用 auth0 库,正如 @Blink 所说的较低 (2认同)