使用httpOnly cookie中的JWT-AuthGuard和受保护的路由(Node.js,Angular)

时间:2019-11-30 18:43:39

标签: javascript node.js angular jwt

我正在开发我的应用程序,并且正在使用JWT进行身份验证和授权,并且我试图找到用于存储JWT的最佳解决方案。 (在当前版本中,我将JWT存储在会话对象的服务器上)

我当前的解决方案有很多问题,所以我决定采用不同的实现方式-将JWT存储在客户端的httpOnly cookie中。

我的问题是,如何确定用户是否登录?(由于AuthGuard,我需要知道这一点-用于保护路由,例如{{1} }不适用于注销的用户)。由于cookie是httpOnly,因此我无法在客户端上对其进行验证。

在当前的实现中,如果用户在会话对象中有jwt,我在后端有一条特殊的路由用于检查。但这不是很好的实现-客户端每次要加载受保护的路由时都必须发送请求。

感谢您的想法。

1 个答案:

答案 0 :(得分:1)

您可以设置JWT本身的到期日期。在客户端,您可以创建一个不断检查到期时间的循环(即:setInterval)。

我将仅依赖于存在一个JWT令牌的事实,即“会话”有效。仅使用JWT令牌来识别用户,例如使用UUID,随机字符串等。

对于每个随后的API请求,在传递JWT令牌的同时,您应始终在服务器端执行验证,以确保:

  1. 令牌信封有效(由您的秘密密钥签名)。
  2. 唯一标识符对应于有效的帐户/用户。

请勿使用httpOnly cookie,几乎可以用于任何东西! 如果此JWT令牌泄漏(即:被仅HTTP流量通过的无数设备捕获),它将暴露出攻击媒介,攻击者可以借此模仿该用户会话。

要回答另一个问题,您可以将JWT令牌存储在localStorage之类的介质中。 JWT的重量很轻,可以预期您将其与每个请求一起发送。

希望可以帮助您了解一些事物。让我知道您是否还有其他疑问或疑问!