我正在开发我的应用程序,并且正在使用JWT进行身份验证和授权,并且我试图找到用于存储JWT的最佳解决方案。 (在当前版本中,我将JWT存储在会话对象的服务器上)
我当前的解决方案有很多问题,所以我决定采用不同的实现方式-将JWT存储在客户端的httpOnly cookie中。
我的问题是,如何确定用户是否登录?(由于AuthGuard,我需要知道这一点-用于保护路由,例如{{1} }不适用于注销的用户)。由于cookie是httpOnly,因此我无法在客户端上对其进行验证。
在当前的实现中,如果用户在会话对象中有jwt,我在后端有一条特殊的路由用于检查。但这不是很好的实现-客户端每次要加载受保护的路由时都必须发送请求。
感谢您的想法。
答案 0 :(得分:1)
您可以设置JWT本身的到期日期。在客户端,您可以创建一个不断检查到期时间的循环(即:setInterval
)。
我将不仅依赖于存在一个JWT令牌的事实,即“会话”有效。仅使用JWT令牌来识别用户,例如使用UUID,随机字符串等。
对于每个随后的API请求,在传递JWT令牌的同时,您应始终在服务器端执行验证,以确保:
请勿使用httpOnly
cookie,几乎可以用于任何东西!
如果此JWT令牌泄漏(即:被仅HTTP流量通过的无数设备捕获),它将暴露出攻击媒介,攻击者可以借此模仿该用户会话。
要回答另一个问题,您可以将JWT令牌存储在localStorage
之类的介质中。 JWT的重量很轻,可以预期您将其与每个请求一起发送。
希望可以帮助您了解一些事物。让我知道您是否还有其他疑问或疑问!