我正在尝试实现允许用户注销用户已登录的所有设备的Rest Endpoint。
我正在研究每个用户动态生成的秘密。我目前正在尝试将some_global_secret
+user_email
+ random_uuid
作为秘密。
允许用户登录和注销多个设备。以及用户是否要注销所有设备。我需要做的只是为用户生成一个新的密钥,其余所有令牌现在将无效。如果用户更改了密码,则可以选择只注销当前设备还是注销所有其他设备。
但是这种方法的最大缺陷是,我需要每次都传递用户的电子邮件才能解密令牌。
什么是最好的方法?对所有用户拥有一个秘密将在注销所有设备时具有更复杂的逻辑,它不像生成一个新秘密那样容易,因为这将使所有人注销。
我想将编码的电子邮件作为某种标头传递,客户端必须为所有受保护的端点传递该标头。这是个好方法吗?
任何指导将不胜感激
有趣的想法。
您可以将您的想法扩展到JWT内部的已签名有效负载。本质上是JWT中的JWT。外部JWT用一个共同的秘密签名。内部JWT使用每个用户的秘密进行签名。您验证外部JWT(这将为您提供用户参考),然后尝试验证内部JWT。如果不能(因为用户的机密已被转出),它将失败。
内部字段不必一定是另一个JWT;它实际上只需要签名(例如HMAC),就可以使用当前的每用户机密进行验证。