如何防止经过身份验证的用户欺骗 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-only
,guest
, maintainer
、admin
、client
等)定义了哪些端点以及它们可以使用的方式。
【讨论】:
所以要限制API让每个用户只能查询自己的记录,我是不是只检查登录的用户id等于uri中的id? 是的。但是您可以在数据库中存储有关用户权限的附加信息。例如,用户记录中的is_admin
字段。如果他们将其设置为 true,那么他们可以读取任何记录。关于存储 ID:创建令牌时应该知道用户 ID,因为这发生在成功验证之后。
或者你可以走另一条路,例如/我以上是关于如何防止经过身份验证的用户欺骗 RESTful API 调用的主要内容,如果未能解决你的问题,请参考以下文章