Auth服务器是否应与微服务架构中的用户服务结合使用?

时间:2017-07-03 13:23:23

标签: spring authentication oauth-2.0 microservices

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

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

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

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

2 个答案:

答案 0 :(得分:7)

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

如果您正在考虑使用Spring Security的UserService,它将与Auth服务器配合使用。

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

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

希望这会有所帮助。

答案 1 :(得分:0)

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

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

如果我正确地说明了您的用户名称,那么用户对应oauth2术语中的资源所有者角色,某些oauth2流(例如client_credentials)直接允许客户端获取对资源服务器的访问权限,并且不会隐含任何用户无论如何。