短长度认证令牌

时间:2017-07-01 08:57:42

标签: java jwt

我想将userdetails编码为令牌,在服务器端我需要解码详细信息。我使用了JWT令牌概念。它完美无缺。但问题是我需要根据业务需求长度小于10个字符的令牌.JWT令牌总是一个大长度令牌。有没有任何技术来限制JWT的长度。或者是否有其他库可用于短长度令牌编码?请任何人帮我解决这个问题

3 个答案:

答案 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 个部分,

  1. 标头 - 包含用于签名和编码的算法的信息
  2. 正文 - 您要发送的数据的 base64 编码
  3. 签名 - HS256 哈希(默认)以确保没有被篡改。

现在,如果您需要较小的令牌,您可以为令牌编写自己的实现。使用自定义 impl,您可以立即跳过头部,因为您可以为您的项目使用一些默认的散列算法。在正文中的第二个,您可以只发送 id 并稍后从中获取所有信息。对于第三部分 Hashing 理论上至少可以为您提供任何长度字符串的固定长度哈希,因此,如果您找到一个具有足够 github 星数的哈希模块,可以让您设置哈希大小,那么您就是黄金。

相关问题