从JWT到json的Base64字符串

时间:2019-03-13 10:15:17

标签: java json base64 jwt

当我尝试将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是必需的。

2 个答案:

答案 0 :(得分:2)

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

您将看到eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyMzQifQ==

==-是padding

我认为问题是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(填充为可选)。

答案 1 :(得分:0)

,欢迎使用StackOverflow。 根据Github上的this答案,DatatypeConverter.parseBase64Binary()存在一些错误,无法输出正确的解码字符串。

如果您使用的是Java 8或更高版本,则可以通过以下方式进行解码:

String base64 = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyMzQifQ";
byte[] temp = Base64.getDecoder().decode(base64.getBytes());

System.out.println(new String(temp));

导入类java.util.Base64