java - 从 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 是强制性的。
解决方案
尝试{"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(填充是可选的)。