我正在开发一个带有 Express 服务器的 NodeJs,我在 JWT 身份验证方面遇到了很多问题,而 JWT 身份验证应该是新标准。
主要问题是当我的应用程序中有管理员用户管理器部分时。我不知道删除或避免客户端 token 访问的“好”方法。
我读到过有关使用定义了较短到期时间的 token 制作黑名单数据库的信息,但其想法是允许用户登录数月,而不必重写登录数据(例如facebook)。在这种模式下我认为黑名单数据库将是一个巨大的数据库。
另一种选择可能是将所有 token 保留在数据库中,并在删除用户时验证针对该数据库删除 token 的所有请求。
或者简单地验证针对用户数据库测试的所有请求(如果用户存在)。此方法使用大量数据库交互。
我可能会遇到关于同一用户在不同设备中使用 token 的问题。
另一方面,在前端,我必须通过 ajax 进行导航或将 token 动态添加到所有 href 链接。 (可能是更好的方法?)
我必须使用其中任何一种方法吗?有更好的解决方案吗?使用 session 可以更好吗?
最佳答案
如果您创建自己的 JWT,则可以将该类型的信息存储在 token 本身中。 角色:“用户”
或 isAdmin = true
。然后,当在客户端应用程序上使用 token 时,如果他们不是管理员,则不会显示这些页面。
确保服务器上的 API 调用验证 token ,并检查权限。即使有人使用他们的客户端访问 token 从网络到管理端点(页面意外显示或 super hax0rs),服务器也应该拒绝。
如果访问类型不经常更改(例如“管理员或非管理员”),则这种方法有效。您可能不会一直将用户升级为管理员。如果您尝试使用相同的方法来获取经常更改的更具体的访问权限,则会一团糟,因为您需要不断重新颁发 token 或编辑 token (这更困难)。
关于node.js - 用于 Web 应用程序 JWT 的 Nodejs Express,带有数据库或 session 来对用户进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54445273/