2 回答

TA貢獻1868條經驗 獲得超4個贊
它不解析的原因是因為您正在嘗試對整個令牌進行 Base64URLDecode。但是您必須解碼由點“。”分隔的令牌的部分。字符(十六進制為 0x2e,十進制為 46,html 為 . -- ASCII/UTF8)..
例子:
public static void decodeTokenParts(String token)
{
String[] parts = token.split("\\.", 0);
for (String part : parts) {
byte[] bytes = Base64.getUrlDecoder().decode(part);
String decodedString = new String(bytes, StandardCharsets.UTF_8);
System.out.println("Decoded: " + decodedString);
}
}
這是因為 JWT 令牌由以下部分組成:
Base64URLEncode({HeaderJSON}) + "." + Base64URLEncode({PayloadJSON}) + "." + Signature例如..
所以要解碼它..你需要用“?!狈指钏2⒔獯a每個部分。注意:簽名通常是二進制的,編碼為 base64,所以一旦你解碼它,不要嘗試打印它..它會打印字節。您需要驗證簽名。
For example, if you go to: https://jwt.io/#debugger-io?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
您將看到每個“部分”是如何編碼的。它是彩色編碼的。

TA貢獻1853條經驗 獲得超6個贊
我使用這個庫https://mvnrepository.com/artifact/com.auth0/java-jwt/3.12.0進行解碼以獲取主題(userId),因此:JWT.decode(token).getSubject()
添加回答
舉報