javascript - jwt 通过 httponly cookie 提供服务,以某种方式找出 is-logged-in
问题描述
在构建 javascript SPA(单页应用程序)时,我需要根据用户是否登录以不同方式显示一些页面。
Auth 由 JWT 处理,JWT 通过 httpOnly cookie 和安全标头提供服务。
这使得 cookie 无法从 SPA javascript 访问,这反过来意味着我不知道用户是否已登录。
我确实检查了一些有关如何解决此问题的帖子,并找到了一些建议,例如
发送另一个不是 httpOnly 的 cookie,带有一些标志,如会话 ID 或具有到期日期的用户 ID,在客户端 JS 中,使用该 cookie 来查看用户是否已通过身份验证。
在 API 服务器上创建一个端点,类似于
/is-logged-in
从 JS 进行 http 调用,以在显示页面之前检查用户是否已通过身份验证。在没有 cookie 的情况下在本地存储 JWT(由于安全原因和我必须编写的代码量来减轻各种可能的窃取攻击,显然不行)
我参加 SPA 派对迟到了,但我相信这一定是一个长期解决的问题。我猜我看不到明显的东西。
请指出正确的方向。
为了完整起见,这里有一些未回答、半回答的相关帖子
解决方案
你基本上有两种选择:
保存用户使用过期的第二个非 http cookie 登录
优点
- 无需额外的 HTTP 请求
- 在您知道用户是否登录之前没有延迟
缺点
- 您需要使两个 cookie 的到期和续订保持同步
- 如果您的 cookie 由于边缘情况而不再同步,您将需要检测它并采取相应措施
使用一个 HTTP 请求来告诉你用户是否登录
优点
- 不易出错
- 无需更改后端
缺点
- 您仍然需要检测用户在使用应用程序时是否不再登录
推荐阅读
- html - 响应式标题不起作用
- botframework - 通过 ReplyToActivityAsync 发送消息时,Bot 框架没有响应
- java - 使用 Java ResultSet 选择多个列值
- c - 如何在C中的数组内定义函数?
- python - 在 Python 3 环境中使用 f2py 时出现错误“需要类似字节的对象,而不是 'str'”
- php - 我只想要 php laravel 中的手机号码范围,我在下面使用哪个?
- node.js - 如何在 AWS 云端托管 Node.js 服务器?我正在尝试制作社交媒体
- android - 如何在 Android Studio 中设置默认 NDK 的路径?
- c++ - 为什么 'std::cout << !+2 ' 输出 0?
- php - 在 url 中获取 basename