首页 > 解决方案 > 微服务 - 使用 OAuth2 和 Spring Boot 进行用户注册和登录

问题描述

我正在使用 Java 和 Spring Boot 来实现微服务生态系统。

在注册流程中,我对应该将用户的个人信息(性别、地址、联系方式等)保存在哪里有一些想法。我的意思是,它应该在资源服务器上还是在授权服务器上?

想象一下我有一个作为授权服务器的微服务 A 的情况。另一方面,我有微服务 B,它是一个资源服务器。

现在,假设我决定在 B 微服务(资源服务器)上创建用户个人信息。

微服务 A - 授权服务器公开以下端点:

微服务 B - 资源服务器公开以下端点:

现在,我向微服务APOST发送了一个包含最终用户信息的请求,并接收了一个用于资源服务器事务的令牌。

好的,我得到了一个令牌,现在,我需要用它在微服务 B中获取用户的个人信息。为此,我需要请求向/users/1(1 是登录的用户 ID)发送请求。

登录的用户只能看到自己的个人信息,不应该看到其他人的个人信息。为了做到这一点,我的令牌有一个userId属性。有了令牌上的这些信息,资源服务器就很容易验证。

在春天,会是这样的:

@GetMapping("/users/{id}")
@PreAuthorize("#id == authentication.userId")
public ResponseEntity<Object> handleGetUsersInformations(@PathVariable("id") Long id) {
    // logic and return
}

授权服务器数据库有以下信息:

资源服务器数据库具有以下信息:

如果我决定走这条路,主要问题是:由于我的资源服务器需要根据登录的用户(令牌上的用户 id)和请求的资源来保护一些资源,因此需要同步这些 id。如何让它们在两个数据库中同步?(授权和资源)

这是正确的方法吗?(资源服务器提供用户的个人信息,授权服务器只提供用户的“登录”信息)

标签: javaspringspring-bootoauth-2.0microservices

解决方案


推荐阅读