对像 MERN Stack 这样的 web 和 api 解决方案进行身份验证和授权的最佳方法是什么?

编程入门 行业动态 更新时间:2024-10-07 16:19:21
本文介绍了对像 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.

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

  • 您认为哪种方法更好?
  • 2 和 3 有什么区别,
  • 有没有办法在护照中实施规则(例如,在首次登录时重定向新用户)
  • 如果我使用 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
    • 钥匙扣等

    更多详情:stackoverflow/a/62049409

    • 您认为哪种方法更好?
      • 我认为如果您使用 auth0,您将节省时间和精力.使用 auth0,您只需要一个简单的 express 应用程序,带有一些端点,如/login、/callback 等.或者如果您使用 auth0 +passport.js,这些端点由passport.js 管理
      • 我建议您,在使用带/不带护照的 auth0 之前查看 OAUTH2 流程的工作原理.这个链接对我帮助很大.
      • which method you think is better?
        • I think if you will use auth0, you will save time and effort. With auth0 you just need a simple express app, with some endpoints like /login, /callback, etc. Or if you use auth0 + passport.js, these endpoints are managed by passport.js
        • I advice you , review how OAUTH2 flow works before to use auth0 with/without passport. This link helped me a lot.
        • 据我所知,auth0 和其他平台提供了用户管理服务,或者它可以连接到您的用户服务(AD/LDAP、数据库、api 等).所以
        • 是的.无论是否使用通行证,您都可以在 nodejs 中重定向回调时添加一些逻辑.
        • 现在的数据库支持很多行.因此,对于您的生产数据库,请尝试对其进行优化或监控.另一种选择是聘请数据库管理员来执行这些任务.
        • www.digitalocean/community/tutorials/an-introduction-to-oauth-2
        • auth0/user-management
        • stackoverflow/a/62049409
        • fiware-tutorials.readthedocs.io/en/latest/roles-permissions/index.html
        • dba.stackexchange/questions/36935/best-relational-database-structure-for-this-data
        • www.mind-it.info/2010/01/09/nist-rbac-data-model/
        • 在我自己的网络应用程序中使用passportjs管理单点登录——共享登录
        • aws.amazon/blogs/apn/how-to-integrate-rest-apis-with-single-page-apps-and-secure-them-使用-auth0-part-1/
        • 使用passport-facebook的Facebook OAuth安全性
        • 异步 Django、Ajax、Jquery 信息
        • 关系模型

    更多推荐

    对像 MERN Stack 这样的 web 和 api 解决方案进行身份验证和授权的最佳方法是什么?

    本文发布于:2023-11-01 01:01:24,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1547789.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:身份验证   解决方案   方法   Stack   MERN

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!