如何为 REST 创建安全规则 API

How to create security rules for a REST API

我正在开发一个 Web App,它有一个 Angular 2 前端和一个访问 PostgreSQL 数据库的 Flask 后端。我的应用向我的后端发送请求,例如 GET /items/{user_id}GET /items/{user_id}/{item_id}POST /items/{user_id}/{item_id}

我对 Web 开发比较陌生,这是我第一次设计 REST API,我如何允许用户只能访问他 user_id 下的项目?例如,如果他们的 user_id=123 GET /items/123 可以,但 GET /items/234 不行 ?

这是从 PostgreSQL 端完成的,或者我必须在后端代码服务器代码中编写逻辑才能执行如下操作:?

if current_user.id != req.params.user_id:
    // Send response status 403
else
    // Send response 200 with items as the body

有没有更好的方法来完成这个?

谢谢。

由于这是一个非常广泛的问题,有很多例外情况,所以我会非常笼统。但这应该表示为数据库中的 One-to-Many/Many-to-One 关系。也就是说,一个User可以拥有多个Item,但一个Item只能由一个User拥有。您将希望在您的项目 table 中有一个外键约束,它表示 user_id 或所有者的 ID。您将希望从他们的数据库中查询仅与请求用户 ID 匹配的项目。

就防止用户请求其他项目而言,您可能必须实施某种在后端运行的中间件,以检查用户何时请求特定项目,如果他们请求 returns 则会出错不拥有它(就像你建议的那样)。

老实说,如果您担心它的安全性,您应该考虑重组您的 API 调用。由于您是根据 url 中的 user_id 参数确定身份,因此您正在向用户敞开心扉,随意更改其广告 ID。使用 Web 令牌建立身份将在增强应用程序安全性方面大有帮助。