每个用户秘密 JWT

Per User Secret JWT

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

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

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

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

解决此问题的最佳方法是什么?当涉及到注销所有设备时,为所有用户设置一个秘密将有更复杂的逻辑,而且它不像生成一个新秘密那么容易,因为那样会使所有人注销。

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

任何指导将不胜感激

有趣的想法。

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

内部字段不一定是另一个 JWT;它真的只需要签名的东西(例如 HMAC),您可以使用当前的每个用户的秘密来验证它。