我想将userdetails编码为令牌,在服务器端我需要解码详细信息。我使用了JWT令牌概念。它完美无缺。但问题是我需要根据业务需求长度小于10个字符的令牌.JWT令牌总是一个大长度令牌。有没有任何技术来限制JWT的长度。或者是否有其他库可用于短长度令牌编码?请任何人帮我解决这个问题
答案 0 :(得分:2)
这完全取决于您认为的“用户详细信息”[原文如此]。
如果“userdetails”是long
id
,那么您应该能够将其与JWT必须包含的其他信息一起放入JWT中。
但是,如果“userdetails”是用户名,家庭住址,城市,邮政编码,帐单邮寄地址,喜欢的颜色,宠物名称和厨房水槽,那么当然,你根本不可能适应这种情况。字符,无论您使用什么压缩算法。
所以,找到一些可以实现这一目标的库并不是问题,没有这样的库,也没有这样的库,因为信息理论认为它无法完成。
请注意,JWT的10个字符限制是一个非常有限的限制。另一方面,在JWT中存储太多信息并不是一个好主意。通常,某种可用于识别用户的号码应该足够了。
答案 1 :(得分:2)
一个10个字符的JWT根本不可能
hhhhhh.ppppp.sssss
其中两个将是点.
。内容为base64 url编码,增加了33%的额外大小。我们现在有六(6)个字符,但如果您仍然认为可以在此处包含数据,请认为使用HMACSHA1的签名将产生20个字节(b64u中约为27个字符)
您需要使用服务器中管理的相应会话并使用不透明随机令牌,或者增加限制
答案 2 :(得分:1)
JWT 有 3 个部分,
现在,如果您需要较小的令牌,您可以为令牌编写自己的实现。使用自定义 impl,您可以立即跳过头部,因为您可以为您的项目使用一些默认的散列算法。在正文中的第二个,您可以只发送 id 并稍后从中获取所有信息。对于第三部分 Hashing 理论上至少可以为您提供任何长度字符串的固定长度哈希,因此,如果您找到一个具有足够 github 星数的哈希模块,可以让您设置哈希大小,那么您就是黄金。