【问题标题】:Short Length Authentication Token短长度认证令牌
【发布时间】:2017-12-05 03:52:36
【问题描述】:

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

【问题讨论】:

    标签: java jwt


    【解决方案1】:

    JWT 有 3 个部分,

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

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

    【讨论】:

      【解决方案2】:

      10 个字符的 JWT 根本不可能

      hhhhhh.ppppp.sssss
      

      其中两个将是点.。内容采用 base64 url​​ 编码,增加了 33% 的额外大小。我们现在有六 (6) 个字符,但如果您仍然认为可以在此处包含您的数据,请认为使用 HMACSHA1 的签名将产生 20 个字节(在 b64u 中约为 27 个字符)

      您需要在服务器中管理相应会话的不透明随机令牌,或增加限制

      【讨论】:

        【解决方案3】:

        这完全取决于您认为的“用户详细信息”[原文如此]™。

        如果“userdetails”是 longid,那么您应该能够将其与 JWT 必须包含的其他信息一起放入 JWT。

        但如果“userdetails”是用户名、家庭住址、城市、邮政编码、帐单地址、最喜欢的颜色、宠物名和厨房水槽,那么当然,你永远无法将其放入 10字符,无论您使用什么压缩算法。

        所以,这不是找到某个图书馆可以做到这一点的问题,没有这样的图书馆,也不可能没有这样的图书馆,因为信息论说它做不到。

        请注意,JWT 的 10 个字符限制是非常严格的限制。另一方面,在 JWT 中存储太多信息并不是一个好主意。一般来说,可以用来识别用户的某种数字就足够了。

        【讨论】:

        • 即使是短 id 也不可能
        • @pedrofb 我认为你是对的。您能找到改进答案的方法还是我应该删除它?
        猜你喜欢
        • 2016-08-18
        • 1970-01-01
        • 2020-09-25
        • 2017-04-20
        • 1970-01-01
        • 2022-11-04
        • 1970-01-01
        • 2017-09-24
        • 1970-01-01
        相关资源
        最近更新 更多