我使用 PassportJS 在 MEAN 堆栈上设置了相当简单的 API。我在设置没有安全性(获取一般数据)和用户身份验证(安全信息)的路由时没有任何问题。但是,我似乎找不到授予基于用户的访问权限的最佳实践。
例如:
/api/users/:id 是需要身份验证的路由。因此,如果没有访问令牌,您永远无法获取用户信息。
然而,一旦我有了令牌,我就可以简单地通过请求和其他人的 ID 来发送该令牌,以访问他们的内容而不是他们自己的内容。尽管 ID 很乱,但如果有人从系统中获取一个人的 ID,他们只需要自己的密码即可访问该数据。
我考虑将令牌保存在一个名为“会话”的新集合中,并进行额外的验证以匹配令牌/用户 ID 组合。但我不知道这是否是最佳实践。
Passport 是否会自动神奇地处理该问题,而我错过了该部分?
谢谢,
韦恩
你已经拥有了验证到位,所以你现在需要实施的是授权.
验证:验证身份的真假——通常用于验证用户是否是他/她所说的人。最常见的是通过用户名/密码组合来实现,但同样的原理也适用于其他形式的身份验证,例如秘密问题、秘密链接、生物特征识别等。
授权指定应允许用户(具有给定身份)访问哪些资源。
(来源:Auth0 身份术语表)
如果您的身份验证系统设计正确,则提供访问令牌以获得初始访问权限/api/users/:id
端点将允许您知道哪个用户正在调用您的应用程序,因此现在您需要做的是实施业务规则来规定用户可以在每个端点上访问哪些数据。
For the /api/users/:id
在这种情况下,如果您希望只允许用户访问自己的数据,则规则可能很简单,只需检查 API 路由上请求的用户标识符是否与与访问令牌关联的用户标识符相匹配。鉴于访问令牌需要以不可篡改的方式实现,您可以保证只有正确的用户才能访问数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)