我正在开发我的应用程序,我正在使用 JWT 进行身份验证和授权,我正在尝试找到存储 JWT 的最佳解决方案。 (在当前版本中,我将 JWT 存储在服务器上的 session 对象中)
我当前的解决方案有很多问题,所以我决定采用不同的实现 - 在客户端的 httpOnly cookie 中存储 JWT。
我的问题是,我如何知道用户是否已登录? (我需要知道这一点,因为 AuthGuard - 用于保护路由,例如 /home
不应该被注销的用户访问)。由于 cookie 是 httpOnly,我无法在客户端验证它。
在当前的实现中,我在后端有特殊的路由,只是为了检查用户是否在 session 对象中有 jwt。但这不是很好的实现 - 客户端每次要加载 protected 路由时都必须发送请求。
谢谢你的想法。
最佳答案
您可以设置 JWT 本身的到期日期。在客户端,您可以创建一个不断检查到期时间的循环(即: setInterval
)。
我会不是 仅依赖于存在 JWT token 这一“ session ”有效这一事实。仅使用 JWT token 来识别用户是谁,例如使用 UUID、随机字符串等。
对于 API 的每个后续请求,在传递 JWT token 时,您应该始终执行服务器端验证以确保:
不要使用
httpOnly
cookie,几乎适用于任何事物! 如果这个 JWT token 被泄露(即:被无数设备捕获,你的 http only 流量将通过),它会暴露一个攻击向量,允许攻击者冒充这个用户 session 。
要回答您的其他问题,您可以将 JWT token 存储在类似
localStorage
的介质中。 . JWT 应该足够轻,您可以将它与每个请求一起发送。希望这有助于为你阐明一些事情。如果您有更多疑虑或问题,请告诉我!
关于javascript - httpOnly cookie 中的 JWT - AuthGuard 和 protected 路由(Node.js、Angular),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59119152/