gpt4 book ai didi

java - Java 中的 Base64 解码方式不同 (JJWT)

转载 作者:行者123 更新时间:2023-12-02 02:55:57 35 4
gpt4 key购买 nike

我有一个由某些服务生成的 JWT token ,然后在我的 Java 应用程序上进行验证。

问题在于,由于 Base64 解码错误,JJWT 库无法解析 JSON header 。

header Base64 代码:eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRva2VuLXNpZ25pbmcifQ

由 JJWT 解码(归结为调用: new String(javax.xml.bind.DatatypeConverter.parseBase64Binary(myBase64), java.nio.charset.Charset.forName("UTF-8")))):

{"alg":"RS256","typ":"JWT","kid":"token-signing"

所以最后一个大括号丢失了。

但是,当我尝试使用其他解码器( https://www.base64decode.org/ )时 - 最后一个大括号已就位。

对于其他开发人员来说,同样的代码也可以工作。

是否是特定于环境的因素会影响 Java 中的 Base64 解码?

最佳答案

您收到的 header 是 Base64 without output padding (注意有66个字符,不是4的倍数)。 DatatypeConverter.parseBase64Binary指定解析 XML 架构 xsd:base64Binary 类型,其中 requires output padding 。显然,它将末尾的非填充字符视为无效并简单地忽略它们。

要么使用不同的解码器(Java 8 有 java.util.Base64Apache Commons.Codec has oneGuava has one too ),或者自己填充输出(如果删除所有非 Base64 字符后字符串的长度不能被 4 整除,则用'=' 直到它为止)。

关于java - Java 中的 Base64 解码方式不同 (JJWT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43065553/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com