在制作 QR 码之前,如何最好地压缩 JWT?

我正在开发一款最终会在手机上显示二维码的应用程序,然后可以通过其他人手机上的同一个应用程序对其进行扫描。

二维码中的信息是 JWT。实际上,它是另一个已签名 JWT 中的已签名 JWT。内部 JWT 由我的后端签名,有效期为 12 周。而外层的JWT是由手机上的app签名的,有效期为1分钟。

这样做的目的是确保如果有人希望窃取别人的二维码,即使他们设法获得截图或照片或其他任何东西,该代码在一分钟后就不再有用了。

无论如何,一个缺点是现在生成的二维码非常庞大。

我一直在努力研究如何压缩数据以制作更小的二维码。我尝试安装一个压缩包,使用它来压缩 JWT,然后尝试从该二进制文件生成一个二维码。但到目前为止,我总是只保存几个字节,如果有的话。我认为必须有更好的方法。

有人知道有效的方法吗?最好只使用在浏览器中工作的 javascript 函数和包。

stack overflow How can one best compress a JWT before making a QR code from it?
原文答案

答案:

作者头像

您可以从解码 Base64 开始,这会将大小减少 25%。然后,您可以在生成的 JSON 上尝试使用短字符串压缩器。也许尝试 shoco 与 JSON 的自定义模型。

作者头像

如果您愿意使用专为受限环境设计的 JOSE / JWT 表亲,则可以为此使用 base45-encoded CBOR Web Token (CWT) 。我相信欧盟 covid-19 证书 QR 使用这种方法。 (有关解码的示例,请参见 this page 。)