Node.js 应用程序的授权方法和设计模式 [关闭]
Posted
技术标签:
【中文标题】Node.js 应用程序的授权方法和设计模式 [关闭]【英文标题】:Authorization approaches and design patterns for Node.js applications [closed] 【发布时间】:2012-11-12 19:57:58 【问题描述】:我正在为内部企业软件平台构建多页面管理界面。想想很多将各种 API、数据库查询和 shell 脚本捆绑在一起的粘合逻辑。
我们将使用 node.js、express 框架(包括 Jade 模板)和 LDAP 进行身份验证。
我正在努力寻找有关节点应用程序中授权的设计模式和最佳实践的信息。我最好使用基于角色的模型,因为我的用户熟悉这种方法及其护理和喂养方式。
我是 node.js 的新手,所以请不要以为我已经看过一个模块或流行的博客文章。可能有大量的信息,我就是不知道去哪里找。
提前感谢您提供的任何信息!
【问题讨论】:
【参考方案1】:根据您的第一个问题,您希望在 NodeJs 中实现一些授权流程。我已经探索并使用了许多 NodeJs 的 API。我更喜欢以下用于企业应用程序的 API。
对于身份验证:Passport 或 Satellizer 如果在 AngularJS 中开发 SPA(前端)。
授权:ACL。方法和 REST API 上基于角色的安全性。如果您也想使用 RABC、ABAC,我想提一下casbin。
其次,您需要一些 NodeJs 中的实现和开发方法。
Easy 和我最喜欢的 NodeJs 设计模式和框架:MVC 框架,SailsJs。因其准备启动和模块化架构。从长远来看,代码管理很容易(企业应用程序的最实际需求)。易于维护。 SailsJs 还预配置了Socket.io,您可以使用它在项目中创建实时模块、小部件、聊天小部件。
Express 您可以使用 Express 并设计您自己的自定义 MVC 项目结构。这也是流行和强大的。您可以在 Yeoman
上找到相同的热门种子项目Redis 作为缓存或会话层。使用单独的缓存或会话层总是好的,因为它不会阻止您将云上的应用程序扩展到第 n 个实例。
您可以使用Redis 和Socket.io 创建实时功能,例如Geo-location、用户状态(在线/离线)、聊天、推送通知等等。
ORM:Waterline。由于其简单的查询方法。它也是 SailsJs 的内置和默认 ORM。如果不使用 SailsJs,您也可以使用 Sequelizejs。我建议使用数据库提供商提供的本机连接器。
数据库:根据您的要求。 Waterline ORM 支持 PostgreSQL、mysql、MongoDB 等。
我最喜欢的视图引擎:EJS。无需学习新事物来开发您的表示层。它也是 SailsJs 的内置默认视图引擎,这就是我喜欢 SailsJs 的原因。我想,我已经介绍了在 NodeJs 中创建企业应用程序的所有重要信息。我并不是说,以上软件包是最好的,但是通过协作,它们可以最适合任何企业场景。还有其他已知的包,大家可以根据自己的需求使用。
【讨论】:
水线和sails.js +1 @kosnkov 大多数都很好。查看HapiJS 以获得更强大的 Express 替代方案,查看 Sequelize 以获得 Waterline 的替代方案。在我看来,我认为 SailsJS 是矫枉过正。如果你来自 RAILS 或 Django 背景,你应该理解足够的概念来使用 Express/Hapi 和 Waterline/Sequelize;与 Sails 相比,它的重量要轻得多。我选择 Hapi / Sequelize。 不错的清单。添加一个关于蛮力保护的小注释也很好。像rate-limiter-flexible 这样的包应该很合适。【参考方案2】:以下是一些入门信息:
passport 是一种流行的身份验证模块 express auth example 展示了如何在没有额外模块的情况下实现简单的身份验证 express route middleware example 解释如何实现基于角色的身份验证 blog post 在 nodejs.org 上关于 ldapjs module希望这能让你更容易开始。
【讨论】:
谢谢!我会检查这些链接。快速路由中间件示例似乎非常接近我的用例 奇怪的是你的答案不包含授权这个词:) 完美答案,对我帮助很大。即使没有授权这个词:) 链接失效github.com/expressjs/express/blob/master/examples/auth/app.js @Green - github.com/expressjs/express/blob/master/examples/auth/index.js【参考方案3】:另一个选择是使用CASL,它与MongoDB 的集成非常好。还有一篇关于如何将基于 CASL 的授权集成到 expressjs 应用中的文章 - https://medium.com/@sergiy.stotskiy/authorization-with-casl-in-express-app-d94eb2e2b73b
【讨论】:
【参考方案4】:我应该说Node-Authorization 也是一个不错的候选人。这个想法是从SAP(ERP提供商)借来的,它是一种面向对象的授权。它还可以与其他框架一起使用,例如:Passport 和 Express。
【讨论】:
以上是关于Node.js 应用程序的授权方法和设计模式 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
node.js @sendgrid/mail 错误:未经授权
node.js 中与 fs.createWriteStream 关联的事件