【发布时间】:2020-03-25 21:34:43
【问题描述】:
我正在开发我的应用程序,我正在使用 JWT 进行身份验证和授权,我正在尝试找到存储 JWT 的最佳解决方案。 (在当前版本中,我将 JWT 存储在会话对象中的服务器上)
我目前的解决方案有很多问题,所以我决定采用不同的实现方式——将 JWT 存储在客户端的 httpOnly cookie 中。
我的问题是,我如何知道用户是否登录?(我需要知道这一点,因为 AuthGuard - 用于保护路由,例如 /home 应该已注销的用户无法访问)。由于 cookie 是 httpOnly,我无法在客户端验证它。
在当前的实现中,我在后端有特殊的路由,只是为了检查用户是否在会话对象中有 jwt。但这不是很好的实现——客户端每次想要加载受保护的路由时都必须发送请求。
感谢您的想法。
【问题讨论】:
-
但是如果你把它存储在本地存储中,比如说,你仍然可以通过 javascript 访问它。 (您可以将变量设置到本地存储中)。而且,我可能需要验证用户是否在发送请求之前登录。
-
对不起,误删了cmets,反正后端就是master。如果您将用户引导到主页,则必须触发 API(在休息客户端上),API 响应将负责重置值并提供新数据。存储在浏览器上只会让导航更快。
-
顺便说一句,我一直认为 JWT 应该代替服务器端会话存储。当用户登录时,服务器对其进行身份验证,将用户的标识符和可选的权限放入签名的 JWT 中,并将其返回给客户端。然后不需要将令牌保留在会话中 - 客户端持有令牌,将其传递给服务器,服务器验证签名,并从令牌本身确认用户和权限(如果存在)。这使得服务器更具可扩展性 - 不需要会话亲和或共享会话。
-
但是如何在客户端存储令牌?本地存储还是 cookie?两者都有一些缺点..
标签: javascript node.js angular jwt