基于令牌的身份验证:将路由限制到特定用户
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。
我有一个实现 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。