node.js - 用于 Web 应用程序 JWT 的 Nodejs Express,带有数据库或 session 来对用户进行身份验证

标签 node.js express session jwt

我正在开发一个带有 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/

相关文章:

node.js - nodejs 无法将换行符发布到 redis

javascript - 为什么我的页面会重新加载,即使我有 event.preventDefault (表单处理 jquery + node.js)

node.js - 关闭浏览器选项卡 nodejs

PHP session 困惑

java - Hibernate 检查线程中与数据库的连接(每个时间段)

node.js - Firebase Functions 在 Firebase 部署中工作,但不能在本地工作

node.js - 使用 axios 进行 Azure Zip 部署

node.js - 我应该异步将数据保存到数据库吗

javascript - 在 React 中通过路由查找与用户链接的数据库中的数组?

php - 通过访问器方法在 $_SESSION 中设置数组值