[英]Spring Microservice - Account Management
让我们假设一个使用 OAuth2 保护的微服务架构。 通常, authentication-service
(OAuth2 授权服务器)同时是account-service
,即管理帐户/用户。
我当前的帐户域 model 更复杂:因此,将这些问题分开是有意义的:
account-service
:负责账户管理(例如上传个人资料图片,添加送货地址,...)。authentication-service
:只负责安全问题(例如签名令牌、登录……)。 好吧,当然, authentication-service
需要有关由另一个微服务管理的帐户的知识,因为它必须使用UserDetailsService
加载主体。
第一种方法
所有 Account + UserDetails(凭据)都由account-service
存储和管理。 因此,位于authentication-service
的UserDetailsService
ervice 调用 RESTful API 来加载用户详细信息。
public class UserService implements UserDetailsService {
public UserDetails loadUserByUsername(String username) {
// Call the RESTful API of the account-service instead of common data source
}
}
第二种方法
帐户详细信息由account-service
管理,而所有与安全相关的用户详细信息(凭据)由authentication-service
存储在单独的数据源中。 这种方法要求每次创建帐户时, account-service
必须调用authentication-service
的 RESTful API 来创建适当的用户条目。 挑战在于使这两个服务/数据库保持同步。
对于复杂的账户管理,您会推荐其中哪种(或另一种)方法? 很高兴有例子或源代码!
在微服务中,当我们必须在另一个服务的数据库中保留我们需要的服务数据副本时,会发生很多次。 正如您所说,帐户详细信息应出现在身份验证服务中。
您可以通过在身份验证服务中注册时存储用户的详细信息并向帐户服务发送 JMS 或 Kafka 消息以保留其副本来简单地处理此问题。
通过这种方式,仅在身份验证服务处解码传入的 JWT,您就可以轻松验证委托人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.