在微服务架构中组织用户和身份验证

时间:2019-11-18 11:39:25

标签: spring authentication architecture authorization microservices

在我们的微服务中,我们将提供自定义身份验证/授权服务,也就是UAA,对吗?拥有用于登录,令牌验证或创建用户的用户控制器对我来说很有意义。

但是有第二个用例。我们还希望进行一些用户管理,以便将收藏夹联系人添加到用户,用一些其他信息,用户地址等填充个人资料。在第二个用例中,我想为此目的使用第二个微服务。您对此有何建议或最佳做法?

  1. 具有一项用于用户管理的微服务,例如个人资料,联系人,凭据以及登录/令牌提供

  2. 有两项微服务-一种用于管理用户凭据,令牌提供(uaa),第二种用于用户附加信息

  3. 有两种微服务-一种用于完全分离的用户管理,第二种用于身份验证,令牌提供,如果需要一些用户数据或验证用户凭据,则会消耗其余的用户服务api

对我来说,这是个不错的选择3.但我想听听您的意见。

2 个答案:

答案 0 :(得分:0)

我的建议是必须使用微服务:

  1. 一个用于用户管理的人,例如他的个人资料,联系人,凭据。在此微服务上,用户将创建密码,发送重置密码等。

  2. 一个用于授权(例如:具有JWT令牌的Oauth2)。此微服务将仅用于授权(在ouath2和JWT的情况下,用于基于用户名/邮件和密码生成JWT令牌)。

当用户创建帐户时,将向授权微服务发出带有用户凭证和权限的请求,以通知已创建新用户。与用户重置密码或删除用户相同。

授权微服务将收到该请求,并将用户凭据和权限保存在自己的数据库(例如Redis或PosgreSQL)中。每个将登录您的服务/应用程序的用户将首先调用授权微服务,将收到一个包含用户元数据(名称,角色和其他信息)的jwt令牌,并使用该令牌将请求发送到您的应用程序/服务的其他微服务。用于用户管理,订单服务或其他。

答案 1 :(得分:0)

在微服务领域,拥有单独的auth服务进行身份验证不是一个好方法。因为如果身份验证服务关闭,您将如何对用户进行身份验证。您的整个应用程序将崩溃。

选择选项1.使用户服务也处理身份验证。假设您构建了许多微服务,那么每个服务都应该在不依赖其他服务的情况下对用户本身进行身份验证。