node.js - 如何将 REST API 限制为用户特定的内容

标签 node.js authentication passport.js mean-stack

我使用 PassportJS 在 MEAN 堆栈上设置了相当简单的 API。我在设置没有安全性(获取一般数据)和用户身份验证(安全信息)的路由时没有任何问题。但是,我似乎找不到授予基于用户的访问权限的最佳实践。

例如: /api/users/:id 是需要身份验证的路由。因此,如果没有访问 token ,您永远无法获取用户信息。

但是,一旦我有了 token ,我只需将其与请求和其他人的 ID 一起发送即可访问他们的内容而不是他们自己的内容。尽管 ID 很乱,但如果有人从系统中获取一个人的 ID,他们只需要自己的密码即可访问该数据。

我考虑将 token 保存在一个名为“ session ”的新集合中,并进行额外的验证以匹配 token /用户 ID 组合。但我不知道这是否是最佳实践。

Passport 是否会自动神奇地处理该问题,而我错过了该部分?

谢谢, 韦恩

最佳答案

您已经设置了身份验证,因此您现在需要实现的是授权

Authentication: Validating an identity as true or false—generally used to verify that a user is who he/she says they are. Most commonly achieved through a username/password combination, but the same principle applies to other forms of authentication like secret questions, secret links, bio-metric identification, etc.

Authorization Specifying which resources a user (with a given identity) should be allowed to access.

(来源:Auth0 Identity Glossary)

如果您的身份验证系统设计正确,则为了获得对 /api/users/:id 端点的初始访问权限而提供的访问 token 将允许您知道哪个用户正在调用您的应用程序,因此现在您需要做的是实现业务规则,规定用户可以在每个单独的端点上访问哪些数据。

对于 /api/users/:id 情况,如果您希望只允许用户访问自己的数据,则规则可能很简单,只需检查在API 路由与与访问 token 关联的用户标识符相匹配。鉴于访问 token 需要以不可篡改的方式实现,您可以保证只有正确的用户才能访问数据。

关于node.js - 如何将 REST API 限制为用户特定的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39965304/

相关文章:

angularjs - Node 中的错误 : 401 (Unauthorized) , Passport 身份验证

node.js - Express Passport (node.js) 错误处理

javascript - 如何将 ESM 测试与 jest 一起使用?

node.js - 恢复node_modules文件夹

node.js - azure 网站上出现 404 错误

mysql - CakePHP 3.x 从 AppController 以外的其他 Controller 启动 Auth 组件给出错误结果

PHP 登录表单不会使用正确的凭据登录用户

email - DMARC/SPF/DKIM 未通过第三方邮件进行身份验证

javascript - "TypeError: req.flash is not a function"使用带有 nodejs 的 Passport ,用户名和密码 auth

node.js - NodeJS - 正在下载的流式视频