jwt通过httponly cookie提供,并通过某种方式来查找是否已登录



在构建javascript SPA(单页应用程序(时,我需要根据用户是否登录来显示不同的页面。

Auth由JWT处理,JWT通过httpOnly cookie和安全头提供服务。

这使得cookie无法从SPA javascript访问,这反过来意味着我不知道用户是否登录。

我确实查看了一些关于如何解决这个问题的帖子,发现了一些建议,比如

  • 发送另一个不是httpOnly的cookie,该cookie带有一些标志,如会话ID或具有到期日期的用户ID,并且在客户端JS中,使用该cookie来查看用户是否经过了身份验证。

  • 在API服务器上创建一个端点,类似/is-logged-in,并从JS进行http调用,以在显示页面之前检查用户是否通过了身份验证。

  • 在本地存储JWT而不使用cookie(显然,由于安全原因和我必须编写的代码量,以减轻各种可能的窃取攻击,这是不可行的(

我参加SPA派对迟到了,但我相信这是一个长期解决的问题。我想我看不出什么明显的东西。

请给我指正确的方向。

为了完整起见,以下是一些未回答、半回答的相关帖子

  • 只有当用户登录时,才在页面加载时发送GET请求
  • 如何发现用户是否使用httpOnly JWT令牌cookie登录
  • httpOnly cookie中的JWT-AuthGuard和受保护的路由(Node.js,Angular(
  • 仅http cookie+令牌:双重作业

您基本上有两个选择:

保存用户使用第二个过期的非http cookie登录

优点

  • 不需要添加HTTP请求
  • 在您知道用户是否登录之前没有延迟

缺点

  • 您需要保持两个cookie的过期和续订同步
  • 如果您的cookie由于边缘情况而不再同步,您将需要检测到它并采取相应行动

使用HTTP请求,该请求将告诉您用户是否已登录

优点

  • 不易出错
  • 无需更改后端

缺点

  • 您仍然需要检测用户在使用应用程序时是否不再登录

最新更新