JWT 的 Payload Private Claim Value 中二进制数据的高效存储

Efficient storage of binary data in JWT's Payload Private Claim Value

我需要将 byte[] 有效地存储到 JWT claim 值中,特别是 .

有什么比将 byte[] 转换为 base64URL 更有效的方法吗? 即

Microsoft.AspNetCore.WebUtilities.Base64UrlTextEncoder.Encode(arrToEnc);

最终目标是对 List<UInt16> 进行编码,使每个 UInt16 最多为 2 个字节(在正常 JWT 解码后)。

考虑 byte[] -> UTF8 字符串。即 System.Text.Encoding.UTF8.GetString(arrToEnc);

这与 JWT 通常使用 Base64 对其进行编码的方式完全不同...

谢谢..

Base64 增加了 33℅ 开销,但可能会更少,具体取决于内容。另一种选择是 base85,但它只比 base64 提高了 7℅,并不常见,实现也不支持它。如果您控制编码器和解码器,这不是问题。 参见 Binary Data in JSON String. Something better than Base64

您可以压缩内容。 base64 的最坏情况是 33℅,zip 得到的压缩率大约是 30-40℅,但是 JWT 会在压缩时进行额外的 base64 编码,所以即使使用 base85,你也会对所需的比率产生过载1:1

您还可以将 gzip 添加到您的服务器,然后压缩率将应用于完整的 JWT 内容