Tha*_*cky 7 authentication authorization token node.js jwt
这个问题可能听起来很愚蠢,但我仍然想知道我还能做些什么来实现这个功能。
有一个作为REST API构建的库存系统,有两种类型的用户。
usersadmins假设当用户登录时,他会获得一个包含以下信息的 JWT 令牌。
email, user_id,user_level
该令牌在每个私有路由中被解码,并检查用户是否经过身份验证,并检查用户级别以确保用户有权访问该特定资源。
让我们考虑一个特殊的场景,管理员(管理员 A)登录并开始在系统上执行一些管理操作。突然,另一个管理员(SuperAdmin)出于某种原因想要将管理员 A降级为普通用户。然而,尽管现在管理员 A只是一个普通用户,但他的令牌仍然是管理员令牌。因此,他仍然可以执行管理操作,直到令牌在一小时后自动过期。
那么,在这种情况下,如何手动使令牌过期呢?系统是否应该使用数据库查询来检查每个管理路由的用户级别?或者还有其他方法可以实现这一目标吗?
希望你能清楚地明白这一点。
Tim*_*sen 10
处理此问题的一种可行方法是维护一个由 JWT/用户状态组成的缓存,这些用户的权限自初始 JWT 发布以来已发生更改。工作流程通常是这样的:
关于缓存的关键点是它速度快。访问缓存中的条目大约比访问数据库快 100 倍。至于缓存中过期的过时条目,许多缓存实现(例如 Redis)允许在写入条目时设置条目的过期时间。在这种情况下,服务器将仅使用exp原始 JWT 内的声明来设置过期时间。如果设置正确,缓存的内存需求可以保持在最低限度。
| 归档时间: |
|
| 查看次数: |
14856 次 |
| 最近记录: |