Spring boot 使用microservice体系结构时,在何处添加注册逻辑?

Spring boot 使用microservice体系结构时,在何处添加注册逻辑?,spring-boot,spring-security,microservices,spring-cloud,Spring Boot,Spring Security,Microservices,Spring Cloud,在我的微服务架构项目中,它将使用oauth服务来验证用户,网关作为前端api工作 我的问题是在哪里写寄存器逻辑 在oauth服务中还是在网关中 最终解决方案: 我在用户服务中这样做,并从网关调用。一切似乎都很好!我认为最好的方法是将所有授权逻辑放入库中,通过私有工件存储库跨微服务共享。这个库可以配置bean,当这个JAR库位于类路径上时,可以对这些bean进行组件扫描。如果您明智地构建包,组件扫描可能是自动的。或者,您可能希望使扫描或包含此共享逻辑显式化 通过这种方式,您可以删除OAuth授权逻

在我的微服务架构项目中,它将使用oauth服务来验证用户,网关作为前端api工作

我的问题是在哪里写寄存器逻辑

在oauth服务中还是在网关中

最终解决方案:
我在用户服务中这样做,并从网关调用。一切似乎都很好!

我认为最好的方法是将所有授权逻辑放入库中,通过私有工件存储库跨微服务共享。这个库可以配置bean,当这个JAR库位于类路径上时,可以对这些bean进行组件扫描。如果您明智地构建包,组件扫描可能是自动的。或者,您可能希望使扫描或包含此共享逻辑显式化

通过这种方式,您可以删除OAuth授权逻辑复制,否则就会出现这种情况

当然,我假设您的微服务是基于Spring/Java的。如果您的微服务会改变编程语言,那么您的授权逻辑将被复制

顺便说一句,通过共享库,您还可以涵盖Java/Spring微服务的其他交叉关注点(监控、错误悬挂…)。我已经看到,对于使用20多个微服务的团队来说,这一点非常有效


编辑:原始响应容器工作于“身份验证”,但我指的是“授权”。很抱歉让你感到困惑。“身份验证”应在OAuth中由单独的专用服务执行。这不是横切关注点,因为只有一个服务接受crendentials并返回Oauth令牌。最好的解决方案是使用第三方OAuth提供程序,因为您不需要处理凭证->安全问题。“授权”是一个贯穿各领域的问题。

我认为最好的方法是将所有授权逻辑放入库中,该库通过私有工件存储库跨微服务共享。这个库可以配置bean,当这个JAR库位于类路径上时,可以对这些bean进行组件扫描。如果您明智地构建包,组件扫描可能是自动的。或者,您可能希望使扫描或包含此共享逻辑显式化

通过这种方式,您可以删除OAuth授权逻辑复制,否则就会出现这种情况

当然,我假设您的微服务是基于Spring/Java的。如果您的微服务会改变编程语言,那么您的授权逻辑将被复制

顺便说一句,通过共享库,您还可以涵盖Java/Spring微服务的其他交叉关注点(监控、错误悬挂…)。我已经看到,对于使用20多个微服务的团队来说,这一点非常有效


编辑:原始响应容器工作于“身份验证”,但我指的是“授权”。很抱歉让你感到困惑。“身份验证”应在OAuth中由单独的专用服务执行。这不是横切关注点,因为只有一个服务接受crendentials并返回Oauth令牌。最好的解决方案是使用第三方OAuth提供程序,因为您不需要处理凭证->安全问题。“授权”是一个贯穿各领域的问题。

用户注册是一个单独的过程,因此单独的微服务是最好的方法。有一篇关于这个的博客文章

身份验证是一个跨领域的问题,可以由。这将免除上游微服务的这一责任——他们的主要工作不是验证用户是否是他声称的用户

授权应由专门的微服务负责。它可以由API网关或单个微服务调用


p.S.我的回答假设微服务不能从外部直接访问,只能通过API网关访问。用户注册是单独的,因此单独的微服务是最好的方法。有一篇关于这个的博客文章

身份验证是一个跨领域的问题,可以由。这将免除上游微服务的这一责任——他们的主要工作不是验证用户是否是他声称的用户

授权应由专门的微服务负责。它可以由API网关或单个微服务调用


p.S.我的回答假设微服务不能从外部直接访问,它们只能通过API网关访问。

我认为所有需要验证的微服务都应该调用一个验证服务来完成验证工作,而不是通过验证逻辑的依赖项jar。是这样吗?当然,如果您使用的是OAuth,那么将有服务提供/验证令牌。您正确理解此服务将是外部的。但调用此服务的逻辑(很可能是某个servlet文件管理器)可以通过共享JAR在您的微服务中共享。现在这更清楚了吗?您的答案假设所有的微服务都使用相同的编程语言,这与微服务的最佳实践背道而驰。好的,那么您对微服务的最佳实践就是让每个微服务使用不同的语言。根据我的经验,你在工作中使用正确的工具。最终会有3-4种语言,但大多数业务域微服务通常使用一种语言(例如Java/Python/Node)。如果是Java(这里似乎是这样),我的答案是相关的。spring security充当过滤器,与身份验证服务提供商对话,并解码来自客户端的令牌。我认为所有需要身份验证的微服务都应该调用身份验证服务来完成身份验证工作,而不是通过身份验证逻辑的依赖关系。是这样吗?当然,如果您使用的是OAuth,那么将有服务提供/验证令牌。哟