为了账号安全,请及时绑定邮箱和手机立即绑定

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例如..


所以要解码它..你需要用“。”分割它。并解码每个部分。注意:签名通常是二进制的,编码为 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 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信