提问人:Loki 提问时间:1/6/2023 最后编辑:Remy LebeauLoki 更新时间:1/10/2023 访问量:446
为什么 JWT 令牌使用 Base64 编码而不是 UTF-8
Why JWT token uses Base64 encoding but not UTF-8
问:
在这两种序列化中,JWS Protected Header、JWS Payload 和 JWS Signature 都是 base64url 编码的,因为 JSON 缺乏直接表示任意八位字节序列的方法。
为什么不能使用八位字节序列表示 JSON?
答:
3赞
tripleee
1/6/2023
#1
根据定义,JSON 是 UTF-8,因此无法(有用地)表示不是有效 UTF-8 字符的字节序列。
例如,不能对字节 \x80 \x80 进行编码。
(你可以在双方之间建立相互协议,以获得JSON支持之外的其他语义,并像这样对它们进行编码;但是你的格式不再是严格的JSON。在这种情况下,要实际编码为 UTF-8,您必须拼写 U-0080 的 UTF-8 编码两次!然后 base64 只是一个更好的约定,因为它更紧凑,并且避免了字符和字节之间的任何混淆。\\x80\\x80
评论
0赞
Loki
1/7/2023
我没有得到 - 您无法对字节 \x80 \x80 进行编码。\x80 的 UTF-8 编码值为 。Base64 和 UTF-8 在这里有何不同?你能提供更多信息吗?\x5c\x78\x38\x30
1赞
tripleee
1/7/2023
因为这会对 Unicode 字符 U+0080 进行编码,而不是实际的字节值。同样,您可以就接收者必须了解和实现的约定达成一致,但 base64 只是一个更好的约定,因为它避免了字节和字符码位之间的任何混淆。
评论