使用微服务架构时,在哪里添加我的注册逻辑?

时间:2018-01-19 12:40:56

标签: spring-boot spring-security microservices spring-cloud

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

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

在oauth服务中还是在网关中?

最终解决方案: 我在用户服务中执行此操作并从网关进行调用。一切似乎都很好!

2 个答案:

答案 0 :(得分:2)

用户注册是一个单独的bounded context,因此单独的微服务是最好的方法。有一篇关于此here的博文。

身份验证是一个可以由API Gateway处理的交叉问题。这将释放出这一责任的上游微服务 - 他们的主要工作不是验证用户是否是他声称的用户。

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

<强> P.S。我的回答是假设微服务无法从外部直接访问,只能通过API网关访问。

答案 1 :(得分:1)

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

通过这种方式,您可以删除OAuth授权逻辑重复,否则会出现这种重复。

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

BTW,通过共享库,您还可以了解Java / Spring微服务的其他交叉问题(监控,错误挂起......)。我已经看到这对于使用20多个微服务的团队非常有效。

编辑:原始回复容器工作&#34;身份验证&#34;,但我的意思是&#34;授权&#34;。对不起,这个混乱。 &#34;验证&#34;应该在OAuth中由单独的专用服务执行。这不是交叉问题,因为只有一个服务接受提交并返回Oauth令牌。最好的解决方案是使用第三方OAuth提供商,因为您不需要处理凭据 - &gt;对您而言安全性较低。 &#34;授权&#34;是跨领域的关注。