我使用 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.
如果您的身份验证系统设计正确,则为了获得对 /api/users/:id
端点的初始访问权限而提供的访问 token 将允许您知道哪个用户正在调用您的应用程序,因此现在您需要做的是实现业务规则,规定用户可以在每个单独的端点上访问哪些数据。
对于 /api/users/:id
情况,如果您希望只允许用户访问自己的数据,则规则可能很简单,只需检查在API 路由与与访问 token 关联的用户标识符相匹配。鉴于访问 token 需要以不可篡改的方式实现,您可以保证只有正确的用户才能访问数据。
关于node.js - 如何将 REST API 限制为用户特定的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39965304/