如何阻止用户使用 JWT 创建自定义 POST 请求?

Posted

技术标签:

【中文标题】如何阻止用户使用 JWT 创建自定义 POST 请求?【英文标题】:How would I stop user creating custom POST requests with JWT? 【发布时间】:2021-06-28 05:02:20 【问题描述】:

我理解访问令牌的方式是服务器向客户端授予访问令牌,然后客户端会将请求标头中的任何请求连同请求头中的任何请求一起发送回服务器以证明其身份验证/声明。

什么会阻止用户获取他们授予的访问令牌并在 Postman 中自定义 POST 请求的标头中使用它,从而使他们能够将他们喜欢的任何数据添加到数据库中?

有什么办法可以防御吗?

【问题讨论】:

【参考方案1】:

一旦出现客户端应用程序,您就根本无法控制它,而且您是对的,很容易假装自己的应用程序并发出自定义请求。客户端代码中的任何内容都可以由用户更改或复制。

因此,您应该假设所有用户都是邪恶的,并且您在客户端对输入数据进行的任何检查都应该在服务器端进行复制。

仅仅考虑数据输入也是不够的,您还应该检查给定用户是否有权查询他们要求的内容,因为在请求某些数据时更改 id 是微不足道的。尤其是当 id 是增量整数时,它们很容易简单地更改 url,而无需靠近邮递员。

【讨论】:

以上是否有任何指南/最佳实践?这听起来像是应该有据可查的东西,但同时实际上似乎没有任何东西。【参考方案2】:

有效的令牌不会被阻止。

所以你不能阻止一个人拿走令牌并放入“邮递员”。

但它们只能用来调用您的 API。因此,适当的 API 设计可以缓解这个问题。 您可以做的另一件事是为您的应用程序添加不同的权限级别

【讨论】:

以上是关于如何阻止用户使用 JWT 创建自定义 POST 请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用访问和刷新令牌返回自定义数据以识别 Django Rest Framework 简单 JWT 中的用户?

Auth 尝试方法在 Laravel/Lumen + JWT + 用户自定义模型中如何工作

如何使用完全自定义的有效负载制作 JWT

springboot 微服务中的自定义 JWT 令牌

NestJS:如何在从 JWT AuthGuard 扩展的 GraphQL 自定义 Guard 中从请求中获取用户

有没有办法使用 Spring Security 实现 google 登录和使用 jwt 令牌自定义登录?