use*_*300 4 node.js microservices passport.js
我正在使用node.js实现基于微服务的应用程序.在搜索如何实现api网关的示例时,我遇到了以下文章,它似乎提供了一个实现api网关的示例:https://memz.co/api-gateway-microservices-docker-node-js/.虽然找到在node.js中实现api网关模式的例子到目前为止似乎有点难以实现,但本文似乎是一个非常好的例子.
有一些项目仍然不清楚,我仍然有找到doc的问题.上.
1)安全性是应用程序的主要项目.我正在开发,我很难看到应该在哪里进行身份验证(即使用护照,我应该在api网关中添加身份验证项目,并将jwt令牌与请求一起传递给相应的微服务,因为用户的登录信息是某些活动需要什么?这里唯一的问题似乎是所有的微服务都需要护照才能解密jwt令牌以获取用户的个人资料信息.除了通过api网关外,微服务在技术上是不可访问的因为这似乎是目的?
2)如果我需要在每个服务器上使用docker镜像扩展到多个服务器,这种情况会如何变化?这将如何影响负载平衡,因为似乎某些东西必须处于更高级别来处理负载平衡?
我可以说,这在很大程度上取决于您的应用要求.真.我现在已经超过了使用从中型到大型系统的多种语言的生产微服务的5年经验.
他们都没有共享相同的要求,并且没有深入了解您的需求以及您的业务(产品)要求,很难知道什么是正确的答案,我将尝试分享一些经验帮助你做对.
理想情况下,您希望将安全性封装在外部服务中,以便您可以更快地更新和应用新策略.如果您发现系统中存在违规行为,或者团队中的某个人无意中将某个密钥(或证书)推送到外部服务,您也可以弃用所有现有令牌.
您可以处理每个服务的身份验证或使用边缘newtwork工具(例如API网关).选择如何处理它因为每个人都拥有自己的特权:
选择API网关您的服务将保持更轻,并且不需要了解有关身份验证步骤的任何信息,但在某些时候您肯定需要知道经过身份验证的用户是谁,并且您需要一些简单的引用(JSON记录, "用户个人资料"服务的链接或ID.如何做到这一点取决于您的要求,我们甚至可以更深入地讨论适用于您的案例的每种可能选择的不同利弊.
选择在服务级别处理它需要您(和您的团队)更好地了解正在发生的安全过程(您可以使用一个好的库隐藏它),并且您需要向他们提供安全团队的支持(可能是也是你自己,因为你知道更多的服务实现安全性,你需要考虑更多的事情,以避免添加不必要的功能).这里最大的问题是你经常会停止你的任务来考虑什么可以帮助你在这个特定的服务上,你会被诱惑扩展你的身份验证服务(和上帝,除非你真的知道你是什么这样做,不要添加不需要用于身份验证的单个调用).
有一件事很容易确定:你肯定需要考虑令牌(jwt,jwe或者,无论你的要求是什么).
JWT有很好的好处,但是数据暴露在欺骗之下,所以永远不要放在敏感的数据或你不会公开分享的关于你的用户的事情(例如,ID可能没问题,而安全问题或2FA的解决方案则不然).JWE是规范的加密形式.一个公共令牌(没有任何意义)需要后端来获取数据,但它的工作方式与cookie会话非常相似,数据不会离开您的服务器.
您需要定义自己的服务边界并帮助自己:使每个服务边界清晰,定义和标准.
尝试定义通用策略并标准化交互,我知道在这里添加队列可能更容易,在那里添加一个REST端点,在那里有一个RPC,但是你很快就会得到一堆你将无法再处理的IPC它会很快引起你的注意.
此外,如果您的业务解决方案非常繁重,我认为自己做API网关,安全性等并不是一个好主意.我会选择开源,社区支持(如果你有一些预算,甚至公司支持)和经过生产测试的解决方案.
根据定义,微服务架构是非常动态的,你将努力使它在每个部署版本之间保持不变,但除非你是一个大公司,否则你不能努力保持数千台服务器的生命.这意味着您将发现仅在某些情况下出现的错误,您无法在其他环境中发现(通常无法重现它们).
通过选择自己开发整个堆栈,您同意必须在整个堆栈中处理维护和错误发现.因此,当您尝试加载具有25个服务交互的页面时,您知道它可能会因为以下错误而失败:您的API网关,您的安全实施,您的令牌解析器,您的用户帐户服务,您的业务服务A到N,您的数据库服务(如果有),数据库负载平衡(如果有),您的数据库实例.
我知道做一切都很诱人,但要尽量保持平衡并做你需要做的事情.通过遵循这条路径,您将考虑您的产品,我认为这是现在最重要的想法.
为了完成我的答案,关于缩放问题:没关系.无论您选择哪种选择,它都可以无缝扩展:
API网关应该能够在后端池上工作(因此,从该服务器,您应该能够重定向到可以在需要时投入使用的N个后端计算机,甚至可以使用一些API来支持新实例的自动注册,甚至简单地将Elastic Load Balancer或HAproxy的IP或等价物放入其中,当您向它们添加后端时,它将起作用 - 您已将多个IP问题从API网关移至一层向下).
如果您在服务级别处理身份验证(并且您有一个API网关),请参阅#1
如果您在服务级别处理身份验证(没有API网关),那么您需要查看堆栈中的其他级别:负载平衡(第3层或第7层)或DNS级别,您可以使用DNS的几个功能来放置如果您需要延迟分发,甚至可以使用Anycast等高级功能来回答不同的IP.
我知道这个答案引入了很多其他问题,但我真的试着回答你的问题.事实上,在规划微服务架构时,您需要了解和评估很多事情,如果没有在我办公室的每个墙上印上非常书面的计划,我就不会写SLOC.
你经常需要精神集中并退出单一服务,以审查全球视野并检查一切正常.
我不想吓唬你,我宁愿让你想到成功.我只是想让你确保在决定从头开始做所有事情之前正确评估了所有的可能性.
PS如果您选择使用API网关进行操作,请确保将服务限制为仅通过它接受请求.在同一台机器上开始监听localhost,在多台机器上,根据您的操作系统,您需要一些高级网络规则.
祝好运!
| 归档时间: |
|
| 查看次数: |
1326 次 |
| 最近记录: |