【问题标题】:Per User Secret JWT每个用户的秘密 JWT
【发布时间】:2019-11-01 09:34:02
【问题描述】:

我正在尝试实现一个允许用户注销用户登录的所有设备的 Rest Endpoint。

我正在调查每个用户动态生成的秘密。我目前正在尝试将some_global_secret + user_email + random_uuid 作为秘密。

允许用户登录和注销多个设备。如果用户想要注销所有设备。我需要做的只是为用户生成一个新的密钥,所有剩余的令牌现在都将无效。如果用户更改了他或她的密码,它将允许选择仅注销当前设备或注销所有其他设备。

但是这种方法的一个大缺陷是我每次都需要传递用户的电子邮件才能解码令牌。

解决此问题的最佳方法是什么?在注销所有设备时,为所有用户设置一个密码会产生更复杂的逻辑,而且它不像生成一个新密码那么容易,因为这会使每个人都注销。

我正在考虑将编码的电子邮件作为某种标头传递,并且客户端必须将该标头传递给所有受保护的端点。这是个好方法吗?

任何指导将不胜感激

【问题讨论】:

    标签: security jwt secret-key


    【解决方案1】:

    有趣的想法。

    您可以将您的想法扩展到 JWT 中的签名有效负载。本质上是 JWT 中的 JWT。外部 JWT 使用公共机密进行签名。内部 JWT 使用每个用户的密码进行签名。您验证外部 JWT(它为您提供用户参考),然后您尝试验证内部 JWT;如果你不能(因为用户的密码已被轮换),那么它就会失败。

    内部字段不一定是另一个 JWT;它实际上只需要经过签名(例如 HMAC),您可以使用当前的每用户密码进行验证。

    【讨论】:

      猜你喜欢
      • 2018-01-09
      • 1970-01-01
      • 2020-08-12
      • 2020-07-08
      • 2019-08-16
      • 2017-08-07
      • 2016-10-23
      • 2021-10-19
      • 1970-01-01
      相关资源
      最近更新 更多