问题描述
我正在努力寻找实现授权的最佳方式.目前,我只需要一个简单的免费帐户,但稍后我可能会包含高级"帐户的用户角色.使用 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
- 钥匙扣等
更多详情:https://stackoverflow.com/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 中重定向回调时添加一些逻辑.
- 现在的数据库支持很多行.因此,对于您的生产数据库,请尝试对其进行优化或监控.另一种选择是聘请数据库管理员来执行这些任务.
- 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管理单点登录——共享登录
- https://aws.amazon.com/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 解决方案进行身份验证和授权的最佳方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!