为什么JWT令牌使用Base64编码而不是UTF-8



RFC 7515第3节提到:

在这两个序列化中,JWS保护头、JWS有效载荷和JWS签名都是base64url编码的,因为JSON缺乏直接表示任意八位字节序列的方法。

为什么JSON不能用八位字节序列表示?

JSON根据定义是UTF-8,所以没有办法(有用地)表示一个不是有效UTF-8字符的字节序列。

例如,不能对字节x80 x80进行编码。

(您可以在双方设置相互协议,以获得JSON支持之外的额外语义,并将其编码为例如\x80\x80;但你的格式不再是严格的JSON。在这种情况下,要实际编码为UTF-8,您必须拼写两次U-0080的UTF-8编码!base64是一种更好的约定,因为它更紧凑,并且避免了字符和字节之间的任何混淆。

最新更新