本文介绍了对像 MERN Stack 这样的 web 和 api 解决方案进行身份验证和授权的最佳方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在努力寻找实现授权的最佳方式.目前,我只需要一个简单的免费帐户,但稍后我可能会包含高级"帐户的用户角色.使用 Stripe 等支付系统的帐户.

I'm trying to find the best way to implement authorization. At this time, only thing I need is a simple free account, but later I may include user roles for a "premium" account using a payment system like stripe.

我已经开始阅读并尝试使用 Auth0,但后来找到了一些其他方法.

I have already started reading and experimenting with Auth0 but then found some other ways I can do it.

  1. Passport.js + MongoDB,我看过一些示例并且效果很好,但我认为它缺少一种使用友好面板(如 Auth0)控制用户、规则等的方法
  2. 使用 Auth0 并设置自定义数据库 (mongoDB).似乎也在付费墙后面.
  3. 还找到了一种使用 Auth0 进行身份验证和使用 Mongoose 进行 MongoDB 数据库的方法.在这个中,除了密码之外,所有内容都保存在 mongoDB 中.这也是从 Auth0 中删除用户不会影响 MongoDB 的唯一设置(我猜这很糟糕).

所以,有些问题是

  1. 您认为哪种方法更好?
  2. 2 和 3 有什么区别,
  3. 有没有办法在护照中实施规则(例如,在首次登录时重定向新用户)
  4. 如果我使用 MongoDB 实施 Passport,并且我的数据库有数百个用户,我该如何管理他们?

有点混乱的问题,但任何帮助都会有帮助

A bit of a chaos question but any help would be helpful

推荐答案

最佳授权策略取决于您的应用程序的短期或长期范围.

The best authorization strategy depends of the scope of your applications in a short or long term.

例如,如果您只有一个简单的(MERN)网络和一个简单的后端(api rest)或一个像这样的整体应用程序 mern 示例 在您的组织中使用内部或私人登录名,您的授权策略可能非常简单:

For example, if you will have just a simple(MERN) web with a one simple backend (api rest) or a monolithic application like this mern example with an internal or private login in your organization, your authorization strategy could be as simple as :

  • (1*)/login express 路由接收用户/密码,在数据库中验证它们并返回用户应该有权访问的经典 jwt 令牌和一组选项(反应路由)
  • web 应用程序 (react) 必须呈现其路由与接收到的路由匹配的页面
  • Web 应用程序必须将接收到的令牌发送到任何 api rest 端点调用
  • 当 api 收到来自 react web 的调用时,必须验证令牌是否存在作为标头.如果不存在,则必须返回 403 错误.
  • (2*) 如果令牌存在,必须尝试对其进行验证(格式正确、未过期、签名正确等).
  • (3*)如果它是一个有效的令牌,你必须执行最后一次验证:用户是否为guest"?角色允许对端点 /user/100 执行 DELETE.
  • (4*) 经典解决方案是在您的数据库中有一些表,例如:用户、角色、用户角色、角色权限、权限选项.选项表必须已注册所有 api 端点及其方法.这也可用于创建用户 之间的关系.网络路线.检查这个

现代和大型组织需要:

  • 社交网络登录
  • 内部/外部用户
  • 非交互式登录(机器人、调度程序等)
  • 多个网络应用
  • 多个移动应用
  • Api Rest 很多

对于这种情况,MERN 应用程序不是一个好的选择,因为它是一体机.实现上述要求的常见策略是在多个服务器中部署多个工件:

For this case, MERN app is not a good choice because is ALL-IN-ONE. Common strategy to implement the previous requirements is to have several artifacts deployed in several servers:

  • 网络应用(react、vue、angular、linkstart 等)
  • apis rest(nodejs + expres、java、python 等)
  • 身份验证/授权:oauth2 平台/提供商、身份/访问平台等

如果是这种情况,您必须将您的 MERN 应用拆分为几个可部署的工件:Web、API 和安全性.

If this is your case, you must split your MERN app into several deployable artifacts: web, api and security.

无论您是只关心登录,还是如何确保您的网站、API 甚至移动应用程序的身份验证和授权,您都需要:OAUTH2

No matter if you are concern just for login or how ensure the authentication and authorization for your webs, apis and maybe your mobile apps, you will need : OAUTH2

您可以考虑 (1*)、(2*)、(3*) y (4*) 或使用以下内容来开发自己的安全平台:

You could develop your own security platform taking into consideration (1*), (2*), (3*) y (4*) or use something like:

  • auth0
  • 钥匙扣等

更多详情:https://stackoverflow.com/a/62049409

09-17 19:43