3 回答

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊
試試下面的代碼:
int i = jws.lastIndexOf('.')
String withoutSignature = jws.substring(0, i+1);
Jwt<Header,Claims> untrusted = Jwts.parser().parseClaimsJwt(withoutSignature);
您可以在最后一個(gè)句點(diǎn)字符 ('.') 之后“砍掉”最后一個(gè)“部分”,這是 JWS 簽名。然后將該 JWT 讀取為“正常”JWT(非 JWS)。
您要求的是忽略有效 JWS 上的簽名并讀取 JWT 標(biāo)頭和正文。這違反了 JWS 規(guī)范,因此 JJWT 不支持它。
這是取自這個(gè)github issue,我想這和你面臨的是一樣的。

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊
也許改用 Auth0 庫?
DecodedJWT jwt = JWT.decode(token);
jwt.getToken();
依賴項(xiàng):
<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貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果您可以使用其他庫,則可以在此處作為可接受的答案完成:How to decode JWT token to get details of Header and Payload using nimbus-jose-jwt?
在這里重復(fù)答案:
依賴: 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!");
}
}
添加回答
舉報(bào)