亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 8 Base64 JWT 令牌到 JSON

Java 8 Base64 JWT 令牌到 JSON

小唯快跑啊 2022-12-28 10:03:49
因此,我在網上和 StackOverflow 上對此進行了一些研究,并且嘗試了很多我發現的建議。問題是我正在登錄我們的一項運行良好的 Oauth2 服務。我得到一個 Oath2 JWT 令牌。我知道這是 Base64 編碼的,我可以將令牌放到 jwt.io 和 www.base64decode.org 中,這兩個站點都可以正確解析令牌。我使用的是 Java 8 Base64 工具,代碼如下所示:public String getTokenProperty(String token, String propertyName){    byte[] bytes = Base64.getUrlDecoder().decode(token);    String decodedString = new String(bytes, StandardCharsets.UTF_8);    System.out.println("Decoded: " + decodedString);    return (new JSONObject(decodedString)).getString(propertyName);}解碼器線上出現如下錯誤:java.lang.IllegalArgumentException: Illegal base64 character 2e我用我的 Oauth2 服務的令牌嘗試了這個,我從 Syncope 得到了一個令牌,我從 Auth0 得到了一個令牌......所有返回都帶有 JWT Base64 編碼的令牌。使用來自這些不同服務器的所有這些令牌,我得到了同樣的錯誤。我想使用標準的 Java 8 Base64,但我認為我可能需要使用外部第三方 Base64 解碼器。任何幫助都會很棒。謝謝!
查看完整描述

2 回答

?
MYYA

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


您將看到每個“部分”是如何編碼的。它是彩色編碼的。


查看完整回答
反對 回復 2022-12-28
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

我使用這個庫https://mvnrepository.com/artifact/com.auth0/java-jwt/3.12.0進行解碼以獲取主題(userId),因此:JWT.decode(token).getSubject()



查看完整回答
反對 回復 2022-12-28
  • 2 回答
  • 0 關注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號