首页 > 解决方案 > 限制用户访问 api 调用?

问题描述

我正在创建一个 rest api 作为消息传递应用程序的后端。我希望用户只能访问自己的数据。例如 user1 可以调用 /users/user1 但不能调用 /users/user2。我将如何去做这件事。

因此,首先用户将登录并通过他们的用户名和密码进行身份验证。但我从这里去哪里?我正在考虑将令牌与用户数据一起存储,这样当他们访问它时,我可以验证这对是否匹配,但必须有更好的方法来做到这一点。我需要重组我的api吗?

标签: restapiauthorization

解决方案


用户登录系统后,您应该向他们提供令牌或为该用户初始化会话。在每次连续调用中,用户应将令牌发送到 API。只要令牌/会话处于活动状态,用户就应该能够调用 API。

您应该有办法在后端为每个 API 调用验证用户令牌。一种非常流行的方法是使用基于 JWT(JSON Web Tokens)的身份验证。有关使用 python 和烧瓶的示例,请参见此处:https ://realpython.com/token-based-authentication-with-flask/

验证用户后,您应该将用户 ID 解析为数据库查询,以便过滤掉该用户的数据。

即使我不了解您的完整用例,您似乎也需要重组 API 调用。您不应为每个用户提供 API 调用。当系统中的用户数量动态增加时会发生什么?

因此,您应该接受用户 ID 作为参数,或者让 JWT 身份验证器处理它。

示例 REST API 调用将是

GET /user/data?userId=1234

推荐阅读