【问题标题】:Efficient storage of binary data in JWT's Payload Private Claim Value在 JWT 的 Payload Private Claim Value 中高效存储二进制数据
【发布时间】:2017-07-04 11:44:52
【问题描述】:

我需要有效地将 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编码之前把内容压缩成zip吗? Base64 增加了 33% 的开销。可能压缩更大
  • 另一种选择是 base85,但它仅比 base64 提高了 7℅,并不常见,实现无法支持它。见stackoverflow.com/questions/1443158/…我建议压缩
  • 我可以并且会使用 gzip。我将编写编码器和解码器,所以不常见是可以的。我认为最终解决方案取决于索赔值中“字符串”的字符集。我编码到那个基础。

标签: c# binary base64 jwt claims-based-identity


【解决方案1】:

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 内容

【讨论】:

    猜你喜欢
    • 2017-08-01
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多