如何防止经过身份验证的用户欺骗 RESTful API 调用

Posted

技术标签:

【中文标题】如何防止经过身份验证的用户欺骗 RESTful API 调用【英文标题】:How to prevent authenticated user from spoofing restful api calls 【发布时间】:2019-03-05 22:11:48 【问题描述】:

所以我构建了一个 RESTful API。它有一个/account/id 端点来返回用户数据。 API 通过身份服务器进行保护,该身份服务器向请求者颁发一个 JSON Web 令牌 (JWT),可以访问 /account/id 端点。用户发送带有用户名和密码的请求,并在成功验证后收到 JWT。现在,用户向/account/id 发送获取其帐户信息的请求。该请求在标头中使用令牌发送,并返回 200 响应,其中包含有效负载中的用户数据。

如何授权端点中的 id?换句话说,经过身份验证的用户可以在端点中添加任何 id 并可能接收另一个用户的数据。使用 JWT 如何防止这种情况发生?

【问题讨论】:

【参考方案1】:

您可以将数据存储在网络令牌中。如果您存储用户的 ID,那么您可以为他们提出的每个请求识别他们。这是安全的,因为令牌的内容是用服务器的私钥签名的。因此它们的内容不能改变。

之后你可以限制API让每个用户只能查询自己的记录,或者你也可以实现一个复杂的角色系统,每个用户都有一组角色(例如read-onlyguestmaintaineradminclient 等)定义了哪些端点以及它们可以使用的方式。

【讨论】:

所以要限制API让每个用户只能查询自己的记录,我是不是只检查登录的用户id等于uri中的id? 是的。但是您可以在数据库中存储有关用户权限的附加信息。例如,用户记录中的 is_admin 字段。如果他们将其设置为 true,那么他们可以读取任何记录。关于存储 ID:创建令牌时应该知道用户 ID,因为这发生在成功验证之后。 或者你可以走另一条路,例如/我

以上是关于如何防止经过身份验证的用户欺骗 RESTful API 调用的主要内容,如果未能解决你的问题,请参考以下文章

RESTful Web 参数篡改

RESTful 身份验证 - 导致高负载时性能不佳?

访问 RESTful Web 服务的最佳身份验证机制

如何使用 Spring Security 做一个 RESTful 登录 API?

如何防止 Ajax 调用使会话保持活动状态?

如何验证用户当前密码?