3 回答
TA贡献1772条经验 获得超8个赞
试试下面的代码:
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,我想这和你面临的是一样的。
TA贡献1871条经验 获得超8个赞
也许改用 Auth0 库?
DecodedJWT jwt = JWT.decode(token);
jwt.getToken();
依赖项:
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.8.3</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>jwks-rsa</artifactId>
<version>0.9.0</version>
</dependency>
示例取自https://medium.com/trabe/validate-jwt-tokens-using-jwks-in-java-214f7014b5cf
TA贡献1880条经验 获得超4个赞
如果您可以使用其他库,则可以在此处作为可接受的答案完成:How to decode JWT token to get details of Header and Payload using nimbus-jose-jwt?
在这里重复答案:
依赖: com.nimbusds:nimbus-jose-jwt:<version>
用法:
/**
* accessToken: the JWT string text.
**/
private String parseJWT(String accessToken) {
try {
var decodedJWT = SignedJWT // or PlainJWT or EncryptedJWT
.parse(accessToken);
var header = decodedJWT.getHeader().toString();
var payload = decodedJWT.getPayload().toString();
} catch (ParseException e) {
throw new Exception("Invalid token!");
}
}
添加回答
举报