jwt 通过 httponly cookie 提供服务,以某种方式找出 is-logged-in

Posted

技术标签:

【中文标题】jwt 通过 httponly cookie 提供服务,以某种方式找出 is-logged-in【英文标题】:jwt served via httponly cookie with someway to find out is-logged-in 【发布时间】:2020-07-04 16:51:56 【问题描述】:

在构建 javascript SPA(单页应用程序)时,我需要根据用户是否登录以不同方式显示一些页面。

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

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

我确实查看了一些有关如何解决此问题的帖子,并找到了一些建议,例如

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

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

在没有 cookie 的情况下将 JWT 存储在本地(由于安全原因以及我必须编写大量代码来缓解各种可能的窃取攻击,显然不可行)

我参加 SPA 派对迟到了,但我确信这一定是一个长期解决的问题。我猜我看不到明显的东西。

请指点我正确的方向。

为了完整起见,这里有一些未回答、半回答的相关帖子

Send a GET request on page load only if user is logged in How to find out if user is logged in having httpOnly JWT token cookie? JWT in httpOnly cookie - AuthGuard and protected routes (Node.js, Angular) http-only cookie + token : double job?

【问题讨论】:

【参考方案1】:

你基本上有两种选择:

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

优点

无需额外的 HTTP 请求 在您知道用户是否登录之前没有延迟

缺点

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

使用一个 HTTP 请求来告诉你用户是否登录

优点

不易出错 无需更改后端

缺点

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

【讨论】:

以上是关于jwt 通过 httponly cookie 提供服务,以某种方式找出 is-logged-in的主要内容,如果未能解决你的问题,请参考以下文章

将 JWT 令牌存储到 HttpOnly cookie 中

用于 JWT 刷新令牌的 react-native 中的 httpOnly cookie

如何在前端使用 HttpOnly jwt cookie

在 Django/DRF 中使用 JWT 身份验证并将 JWT 存储在 HttpOnly Cookie 中

如何使用 DRF djangorestframework-simplejwt 包将 JWT 令牌存储在 HttpOnly cookie 中?

ReactJS 和 DRF:如何将 JWT 令牌存储在 HTTPonly cookie 中?