Auth Server 是不是应该在微服务架构中与 User Service 结合使用?

Posted

技术标签:

【中文标题】Auth Server 是不是应该在微服务架构中与 User Service 结合使用?【英文标题】:Should the Auth Server be combined with the User Service in a microservices architecture?Auth Server 是否应该在微服务架构中与 User Service 结合使用? 【发布时间】:2017-12-06 18:57:34 【问题描述】:

我目前正在使用以下服务在 Spring Boot 中构建基于微服务的应用程序

身份验证服务器(分发访问令牌) 用户服务(用户信息,如用户名、密码、电子邮件等) 其他各种不相关的服务

当用户将其凭据发送到身份验证服务器时,身份验证服务器应验证它们是否正确,然后返回访问令牌。

我的问题是,我应该将身份验证服务器与用户服务结合起来,以便查找凭据是一个简单的数据库调用,还是应该将它们保留为单独的应用程序并让它们都指向同一个共享数据库?有更好的选择吗?

【问题讨论】:

【参考方案1】:

我通常做的是将它们分开。帐户信息(名字、姓氏、联系方式、隶属关系、性别等)与身份验证/授权无关。此外,一个帐户可以有多种身份验证方法(即 OAuth、uname-pass、私钥),这与帐户数据无关。因此,我将它们视为独立的实体。我知道 auth 和 account data 看起来是一样的,但是它们代表了两个非常不同的东西,有着非常不同的职责,所以我把它们分开了。如果一个用户必须看到其他用户的名字和姓氏,我不希望从数据库中获取其他用户的凭据(很多可能会出错)。

如果您正在考虑 Spring Security 中的 UserService,它与 Auth 服务器一起使用。

从安全角度来看,拥有单一事实点(身份验证服务器)并能够在一个地方解决问题是一个巨大的优势。

无论如何,恕我直言,account 和 auth 可以共享一些属性,但它们是两个不同的东西 - 因此我将它们分开。

希望这会有所帮助。

【讨论】:

如果你把它们放到一个单独的服务中,你如何为你的认证服务器创建资源所有者(用户)?假设您使用 oauth2。【参考方案2】:

您应该将它们分开,oauth 与身份管理无关,而是与授权委托有关。

在 oauth2 中有 4 个角色(资源服务器、资源所有者、客户端和授权服务器),您当前询问授权服务器是否必须是绝对没有意义的资源服务器的一个微服务的一部分。

如果我正确理解了你的情况,你命名的用户对应于 oauth2 术语中的资源所有者角色,一些 oauth2 流程(例如 client_credentials)直接允许客户端访问资源服务器,并且不会隐含用户以任何方式。

【讨论】:

以上是关于Auth Server 是不是应该在微服务架构中与 User Service 结合使用?的主要内容,如果未能解决你的问题,请参考以下文章

微服务之间的关系应该如何架构

在微服务架构中组织授权的最佳实践?

Node.JS JavaScript socket.io 在微服务架构中发出消息

在微服务架构的每个服务中验证访问令牌 (JWT)

SQL Server中与IO相关的等待类型:IO_COMPLETION和PAGEIOLATCH_*

在微服务架构中链接数据?