基于令牌的身份验证:将路由限制到特定用户

Token-based Authentication: Restricting Routes to Specific Users

我有一个实现 JSON Web 令牌身份验证的快速后端。一旦用户提供了正确的用户名和密码,就会使用 Secret 生成令牌。

现在假设这个用户想要删除他们的一个项目,为此向 programs/:programId 发送一个 DELETE 请求。 API 服务器使用 JWT 中间件验证令牌是否有效,然后更新数据库。

基本上我的问题是:如何确保发出请求的用户是项目的所有者?如果我可以使用 any 有效令牌和有效主体简单地将请求发送到正确的路由,那么如何阻止任何用户发送恶意请求和 removing/editing/accessing 其他用户的数据?

这与 JWT 负载有关吗?

谢谢。

有几种方法可以解决这个问题,您选择的确切解决方案取决于您的体系结构、您是否使用 API 网关等。

防止用户删除其他人的项目的一种方法是更改​​删除 API,使其还需要用户 ID 作为输入参数之一。假设您只做了这个更改,那么您的工作流程将是这样的:

  • 用户使用 JWT 向服务器发出请求
  • 服务器尝试 unsign/open JWT
  • 如果成功,服务器会检查声明(例如过期)以确保令牌有效,然后提取用户名
  • 然后服务器将来自请求的传入 programId 连同来自 JWT 的用户 ID 路由到删除端点
  • 内容被删除

上面的关键点是服务器接受来自外部的用户ID。相反,由用户证明他有一个有效的 JWT,从中可以提取他的用户 ID。