我想使用JWT创建登录系统,并遇到以下问题:
1-我的客户登录名和我为其生成的令牌,并将该令牌存储在本地存储中。现在,如果有人从此人浏览器的本地存储中复制此令牌并粘贴到他(她)(即黑客)的浏览器本地存储中,那么该黑客将能够登录?如果是,那安全吗?
2-我将用户ID放在我在登录功能中生成的令牌中。在发送到后端的每个请求上,我解码令牌并在其中找到userId。现在,我应该通过任何方式比较此用户ID吗?例如,检查通过该用户ID在后端中是否存在任何会话,甚至通过DB检查用户ID?
3-我应该在本地商店上放置JWT令牌的到期时间吗?
答案 0 :(得分:0)
1-将这些存储在localStorage中是安全的。值得研究如何防范Cross site scripting攻击;对于高安全性环境尤其如此。用户复制和粘贴可能是不太可能发生的攻击,并且,如果用户具有物理访问权限来执行复制和粘贴,则可能还有其他“漏洞”,例如仅使用浏览器的存储密码。
2-JWT对声明中包含的用户ID进行加密。用户无法更改此声明并保持其有效(假定为强键),因此无需在其他地方进行检查。
3-是的!由于JWT中有声明(如用户角色),因此您不希望这些声明永远有效。此外,您还希望有一种方法来确保用户重新验证其身份(即再次登录),以防万一出问题/令牌被盗。当您在令牌上放置一个到期时,您就强制这样做。