我正在努力寻找实现授权的最佳方式。在这个时候,我只需要一个简单的免费帐户,但稍后我可能会为一个"溢价;使用类似stripe的支付系统的账户。
我已经开始阅读和尝试Auth0,但后来找到了一些其他方法
- Passport.js+MongoDB,我看到了一些例子,效果很好,但我认为它缺少了一种用友好面板(如Auth0)控制用户、规则等的方法
- 使用Auth0并设置自定义数据库(mongoDB)。似乎也在付费墙后面
- 还找到了一种同时使用Auth0进行身份验证和使用Mongoose进行MongoDB数据库的方法。在本例中,除密码外,所有内容都保存在mongoDB中。这也是唯一一个从Auth0中删除用户不会影响MongoDB的设置(我想这很糟糕)
所以,有些问题是
- 你认为哪种方法更好
- 2和3之间的区别是什么
- 有没有办法在passport中执行规则(例如,在第一次登录时重定向新用户)
- 如果我用MongoDB实现Passport,并且我的数据库有数百个用户,我该如何管理他们
这是一个有点混乱的问题,但任何帮助都会对有所帮助
最佳授权策略取决于短期或长期应用程序的范围。
带有私人登录的单片或简单网络
例如,如果您的组织中只有一个带有一个简单后端(api-rest)的简单(MERN)web,或者像本MERN示例这样的具有内部或私人登录的单片应用程序,那么您的授权策略可以简单到:
- (1*)/login快速路由,接收用户/密码,在数据库中验证它们,并返回用户应该访问的分类jwt令牌和一系列选项(反应路由)
- web应用程序(react)必须呈现路由与接收到的路由匹配的页面
- web应用程序必须将接收到的令牌发送到任何api rest端点调用
- 当api接收到来自reactweb的调用时,必须验证令牌作为头的存在。如果不存在,则必须返回403错误
- (2*)如果存在令牌,则必须尝试验证它(格式正确、未过期、签名正确等)
- (3*)如果它是一个有效的令牌,则必须执行最后一次验证:is user with"客人;允许执行CCD_ 1到端点CCD_
- (4*)经典的解决方案是在数据库中有一些表,如:user、roles、user_roles、role_permission、permission_option。选项表必须已经注册了所有的api端点及其方法。此外,这可以用于创建用户<:>网络路由。检查这个
现代要求
现代和大型组织需要:
- 社交网络登录
- 内部/外部用户
- 非交互式登录(机器人、调度程序等)
- 几个web应用程序
- 几个移动应用程序
- 很多Api Rest
在这种情况下,MERN应用程序不是一个好选择,因为它是ALL-IN-ONE。实现先前需求的常见策略是在几个服务器中部署几个工件:
- web应用程序(react、vue、angular、linkstart等)
- apis-rest(nodejs+express、java、python等)
- 身份验证/授权:oauth2平台/提供商、身份/访问平台等
如果是这种情况,您必须将MERN应用程序拆分为几个可部署的工件:web、api和安全性。
Oauth2
无论你是否只关心登录,或者如何确保你的网络、api和移动应用程序的身份验证和授权,你都需要:OAUTH2
您可以在考虑(1*)、(2*)、(3*)和(4*)的情况下开发自己的安全平台,或者使用类似的东西:
- auth0
- 钥匙扣等
此处提供更多详细信息:https://stackoverflow.com/a/62049409
您的问题
- 你认为哪种方法更好?
- 我认为如果您使用auth0,您将节省时间和精力。使用auth0,您只需要一个简单的express应用程序,其中包含/login、/recallback等端点。或者,如果您使用auth0+passport.js,则这些端点由passport.jss管理
- 我建议您,在使用带/不带passport的auth0之前,请查看OAUTH2流的工作原理。这个链接对我帮助很大
- 2和3之间的区别是什么,
- 正如我所读到的,auth0和其他平台提供用户管理服务,或者它可以连接到您的用户服务(AD/LDAP、数据库、api等)。所以
- 有没有办法在passport中执行规则(例如,在第一次登录时重定向新用户)
- 是的。当回调在nodejs中重定向时,无论是否使用passport,都可以添加一些逻辑
- 如果我用MongoDB实现Passport,并且我的数据库有数百个用户,我该如何管理他们?
- 如今数据库支持很多行。因此,对于您的生产数据库,请尝试优化或监控它。另一种选择是聘请数据库管理员来执行这些任务
参考
- https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2
- https://auth0.com/user-management
- 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-structure-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/
- 脸书OAuth安全使用护照脸书
- 异步Django、Ajax、Jquery信息
- 关系模型