首页 > 解决方案 > 从 JWT 到 json 的 Base64 字符串

问题描述

当我尝试将标头从 jwt 解析为 base64 到字符串时,输出为:

{"alg":"RS256","typ":"JWT","kid":"1234"

没有最后一个括号,但是当我在这里解码相同的 base64 字符串时:https ://www.base64decode.org/那么 json 格式正确。

我使用的功能:

   public void test() {
            String encodedToken = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyMzQifQ";
            System.out.println(new String(DatatypeConverter.parseBase64Binary(encodedToken)));
        }

有什么问题?

编辑:Java 7 是强制性的。

标签: javajsonbase64jwt

解决方案


尝试{"alg":"RS256","typ":"JWT","kid":"1234"}base64编码

你会看见eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyMzQifQ==

==- 是一个填充

我认为这个问题是DatatypeConverter.parseBase64Binary使用xsd:base64Binary (RFC 2045) 的表示。但在 RFC 2045 中,填充是强制性的。

您可以使用这种方式(java.util.Base64):

public void test() {
    String encodedToken = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyMzQifQ";
    System.out.println(new String(Base64.getDecoder().decode(encodedToken.getBytes())));
}

java.util.Base64 使用 RFC 4648(填充是可选的)。


推荐阅读