在过去的几天里,我一直在阅读关于这个主题的所有内容,但我无法决定什么是最好的方法。
仅有的两个要求是:
我需要知道已登录的用户以及他们拥有的每个会话,以便用户能够看到包含此信息的列表并能够关闭他们选择的任何会话。
两个应用程序都应该使用相同的 rest API 端点。
起初我使用会话 cookie,并使用 setCredentials=true 调用 API,但我发现移动应用程序处理 cookie 的方式不同,我无法控制(例如,它们在过期之前由于各种原因被删除)。我曾考虑将 cookie 保存在本机存储中并将其附加到每个请求中,但我无法以任何方式访问 cookie,因为 httpOnly 设置为 true。解决方案是将 httpOnly 设置为 false,但这样我会暴露 cookie,我不确定应该采取哪些安全措施来保护 cookie 不被盗或篡改。
另一种解决方案是使用 JWT 并将其存储在 web/native 存储中。我还将每个仍然有效的令牌(使用密码算法散列)存储在一个表中,以获取登录用户及其会话的列表,以及另一个用于当用户选择结束特定会话/更改密码/时的无效令牌表等等。但我再次不确定我应该采用这种方法的安全措施。我也应该加密令牌吗?我正在考虑向其附加有关请求令牌的设备的数据,以始终检查请求令牌的设备是否是使用它的设备。我还应该做些什么来保护这个令牌?
如果我正确实施其中任何一个选项,哪个对网络和移动设备都更安全?