检查 RESTful API 中的用户权限

Posted

技术标签:

【中文标题】检查 RESTful API 中的用户权限【英文标题】:Check user permissions in RESTful API 【发布时间】:2017-10-03 21:35:57 【问题描述】:

我正在使用 NodeJS、Express、MongoDB 开发一个 SaaS API。它实现了 JWT 身份验证/安全方法。

就我个人而言,我(目前)有两个集合:用户和客户。

您可以查看每个集合具有的字段(用于定义目的)。因此,在端点设计方面,我使用了一种真正宁静的方法:

/api/users/userId/clients:插入客户端,即

这正是我想要提出的观点,即在发布新客户之前检查价格计划是否允许用户这样做。逻辑上:

function post(req,res)
    // Check if the JWT user.id is the same of the endpoint request
    if(req.user._id == req.params.id) 
       // Here I want to know which is the price plan and to count the Clients that the user has

   

就我的怀疑而言,我曾在一些假设中考虑过,但我真的不知道哪个是最好的:

在 User 集合中执行查询以获取价格计划,对 Clients 集合执行查询计数验证,然后发布新客户。 将用户的价格计划信息放入 JWT,对用户的 Clients 集合进行查询计数验证,然后发布新的 Client。

这是我考虑过的两种主要可能的解决方案,但我严重怀疑安全性和性能方面我应该实施/遵循哪一个。

提前谢谢你。

【问题讨论】:

【参考方案1】:

我也有同样的疑问。此外,如果您将任何内容放入令牌中,那么当信息更改时,您将不得不重新发布这些令牌(必须让用户登录和注销)或实施复杂的令牌更新逻辑。应用程序也在发展:今天你需要价格,明天需要别的东西。每次更改所有用户的令牌(实际上将其用作分发器存储)可能不是一个好主意。这就是为什么让 JWT 尽可能短的原因。

您的问题更多基于意见,但根据我自己的意见,我肯定会仅将 userId 存储在 jwt 中(如果需要,还可以添加元信息)。但不是应用程序特定的东西。从数据库读取是要走的路。

【讨论】:

再来一次,谢尔盖,我非常重视您的意见,您总是很准确。分析我的具体需求,对于这个工作流程,我需要 3 个查询,你不觉得这有点开销吗?是的,我目前的困难不是代​​码方面的问题,而是架构和决策方面的问题,单独获得这种知识是很困难的。 我个人有一条规则,并将其强制执行到公司中,即任何 api 响应都应在 300 毫秒内给出。这是最高限制,但您当然想要尽可能快的速度。另一方面,我个人将优化分为微观优化和有意义的优化。在微优化上,您花费了昂贵的时间,但结果不值得花费时间。我之前参与的一个项目进行了大约 400 db 查询来呈现每个页面。并且仍然有效。在这种情况下,3 个查询不值得考虑。但是,您的情况由您决定。

以上是关于检查 RESTful API 中的用户权限的主要内容,如果未能解决你的问题,请参考以下文章

使用before_request来做权限和用户检查

win32 api - 如何检查远程机器上的用户权限

如何在 RestFul 应用程序中使用 OAuth 2 在前端处理用户权限?

检查用户是不是对windows中的文件具有读取权限

GitLab CE API:检查使用的令牌是不是具有管理员权限

检查Android中的用户是不是已经授予权限