我正在尝试找到实施授权的最佳方法。此时,我唯一需要的是一个简单的免费帐户,但稍后我可能会包含使用 Stripe 等支付系统的“高级”帐户的用户角色。
我已经开始阅读和尝试 Auth0,但后来发现了一些其他方法可以做到这一点。
- Passport.js + MongoDB,我看过一些示例并且工作得很好,但我认为它缺少一种通过友好面板(如 Auth0)来控制用户、规则等的方法
- 使用 Auth0 并设置自定义数据库 (mongoDB)。似乎也处于付费墙后面。
- 还找到了一种使用 Auth0 进行身份验证并使用 Mongoose 进行 MongoDB 数据库的方法。在这个例子中,除了密码之外的所有内容都保存在 mongoDB 中。这也是从 Auth0 删除用户不会影响 MongoDB 的唯一设置(我猜这很糟糕)。
所以,有些问题是
- 您认为哪种方法更好?
- 2和3有什么区别
- 有没有办法在护照中实施规则(例如,在首次登录时重定向新用户)
- 如果我用 MongoDB 实现 Passport,并且我的数据库有数百个用户,我该如何管理它们?
有点混乱的问题,但任何帮助都会有帮助
最佳授权策略取决于短期或长期的应用程序范围。
具有私人登录功能的整体或简单网络
例如,如果您只有一个简单的(MERN)网络和一个简单的后端(API REST)或像这样的整体应用程序默恩的例子通过您组织的内部或私人登录,您的授权策略可能非常简单:
- (1*) /login 快速路由,接收用户/密码,在数据库中验证它们并返回经典 jwt 令牌和用户应有权访问的选项数组(反应路由)
- Web 应用程序(React)必须渲染其路由与接收到的路由匹配的页面
- Web 应用程序必须将收到的令牌发送到任何 api 休息端点调用
- 当 api 收到来自 React Web 的调用时,必须验证 token 作为标头是否存在。如果不存在,必须返回403错误。
- (2*) 如果令牌存在,必须尝试验证它(格式正确、未过期、签名正确等)。
- (3*)如果它是有效令牌,则必须执行最后一次验证:是否允许具有“来宾”角色的用户执行
DELETE
到一个端点/user/100
.
- (4*) 经典的解决方案是在数据库中包含一些表,例如:user、roles、user_roles、role_permission、permission_option。选项表必须已注册您的所有 api 端点及其方法。这也可用于创建用户 <:> Web 路由之间的关系。查看this
现代要求
现代大型组织需要:
- 社交网络登录
- 内部/外部用户
- 非交互式登录(机器人、调度程序等)
- 几个网络应用程序
- 几个移动应用程序
- 很多Api休息
对于这种情况,MERN 应用程序不是一个好的选择,因为它是一体式的。实现上述要求的常见策略是将多个工件部署在多个服务器中:
- Web 应用程序(React、Vue、Angular、LinkStart 等)
- apirest(node js +express、java、python 等)
- 身份验证/授权:oauth2 平台/提供商、身份/访问平台等
如果是这种情况,您必须将 MERN 应用程序拆分为几个可部署的工件:Web、API 和安全性。
Oauth2
无论您是否只关心登录或如何确保您的网站、API 甚至移动应用程序的身份验证和授权,您都需要:OAUTH2
您可以开发自己的安全平台,考虑 (1*)、(2*)、(3*) y (4*) 或使用类似以下内容的内容:
更多详细信息请参见此处:https://stackoverflow.com/a/62049409
你的问题
- which method you think is better?
- 我认为如果您使用 auth0,您会节省时间和精力。使用 auth0,您只需要一个简单的 Express 应用程序,带有一些端点,例如 /login、/callback 等。或者,如果您使用 auth0 + Passport.js,这些端点由 Passport.js 管理
- 我建议您在使用带/不带护照的 auth0 之前先回顾一下 OAUTH2 流程的工作原理。这link对我帮助很大。
- What is the difference between 2 and 3,
- 据我所知,auth0 和其他平台提供用户管理服务,或者它可以连接到您的用户服务(AD/LDAP、数据库、api 等)。所以
- Is there a way to implement rules in passport (e.g. redirect new users on first login)
- 是的。无论有或没有护照,您都可以在 Nodejs 中重定向回调时添加一些逻辑。
- If I implement Passport with MongoDB, and my database has hundreds of users, how can I manage them?
- 如今数据库支持很多行。因此,对于您的生产数据库,请尝试优化或监控它。另一种选择是聘请数据库管理员来执行这些任务。
参考
- https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2
- https://auth0.com/用户管理
- https://stackoverflow.com/a/62049409
- https://fiware-tutorials.readthedocs.io/en/latest/roles-permissions/index.html
- https://dba.stackexchange.com/questions/36935/best-relational-database-struct-for-this-data
- https://www.mind-it.info/2010/01/09/nist-rbac-data-model/
- 使用 Passportjs 为我自己的 Web 应用程序管理单点登录 - 共享登录
- https://aws.amazon.com/blogs/apn/how-to-integrate-rest-apis-with-single-page-apps-and-secure-them-using-auth0-part-1/
- 使用 Passport-facebook 的 Facebook OAuth 安全性
- 异步 Django、Ajax、Jquery 信息
- 关系模型
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)