猿问

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

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

当然,我可以自己对令牌进行拆分和 Base64 解码,但感觉就像是 JWT 库所期望的最基本的功能;因此我怀疑我遗漏了什么。


慕尼黑8549860
浏览 157回答 3
3回答

料青山看我应如是

试试下面的代码:int i = jws.lastIndexOf('.')String withoutSignature = jws.substring(0, i+1);Jwt<Header,Claims> untrusted = Jwts.parser().parseClaimsJwt(withoutSignature);您可以在最后一个句点字符 ('.') 之后“砍掉”最后一个“部分”,这是 JWS 签名。然后将该 JWT 读取为“正常”JWT(非 JWS)。您要求的是忽略有效 JWS 上的签名并读取 JWT 标头和正文。这违反了 JWS 规范,因此 JJWT 不支持它。这是取自这个github issue,我想这和你面临的是一样的。

ITMISS

也许改用 Auth0 库?DecodedJWT jwt = JWT.decode(token);jwt.getToken();依赖项:<dependency>&nbsp; <groupId>com.auth0</groupId>&nbsp; <artifactId>java-jwt</artifactId>&nbsp; <version>3.8.3</version></dependency><dependency>&nbsp; <groupId>com.auth0</groupId>&nbsp; <artifactId>jwks-rsa</artifactId>&nbsp; <version>0.9.0</version></dependency>示例取自https://medium.com/trabe/validate-jwt-tokens-using-jwks-in-java-214f7014b5cf

慕村225694

如果您可以使用其他库,则可以在此处作为可接受的答案完成:How to decode JWT token to get details of Header and Payload using nimbus-jose-jwt?在这里重复答案:依赖: com.nimbusds:nimbus-jose-jwt:<version>用法:/**&nbsp;* accessToken: the JWT string text.**/private String parseJWT(String accessToken) {&nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; var decodedJWT = SignedJWT&nbsp; // or PlainJWT or EncryptedJWT&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.parse(accessToken);&nbsp; &nbsp; &nbsp; &nbsp; var header = decodedJWT.getHeader().toString();&nbsp; &nbsp; &nbsp; &nbsp; var payload = decodedJWT.getPayload().toString();&nbsp; &nbsp; } catch (ParseException e) {&nbsp; &nbsp; &nbsp; &nbsp; throw new Exception("Invalid token!");&nbsp; &nbsp; }}
随时随地看视频慕课网APP

相关分类

Java
我要回答