java - 微服务 - 使用 OAuth2 和 Spring Boot 进行用户注册和登录
问题描述
我正在使用 Java 和 Spring Boot 来实现微服务生态系统。
在注册流程中,我对应该将用户的个人信息(性别、地址、联系方式等)保存在哪里有一些想法。我的意思是,它应该在资源服务器上还是在授权服务器上?
想象一下我有一个作为授权服务器的微服务 A 的情况。另一方面,我有微服务 B,它是一个资源服务器。
现在,假设我决定在 B 微服务(资源服务器)上创建用户个人信息。
微服务 A - 授权服务器公开以下端点:
POST /oauth/token
POST /oauth/check_token
微服务 B - 资源服务器公开以下端点:
GET /users
GET /users/{id}
现在,我向微服务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。如何让它们在两个数据库中同步?(授权和资源)
这是正确的方法吗?(资源服务器提供用户的个人信息,授权服务器只提供用户的“登录”信息)
解决方案
推荐阅读
- r - 有没有办法抑制 R 中 tbl_regression 函数中的 p 值?
- javascript - React Native 中的 if else 函数
- javascript - 来自 api 的 json 数据的 react-table v7 动态列和行
- javascript - 使用反应渲染页面
- css - 如何确保填充在高度有限的网格项上有效?
- spring-webflux - 协程中的阻塞操作
- arrays - 有什么方法可以将字符串附加到数组?
- linux - selenium webdriver MSEdgeDriver 89.0 版的 nuget 包缺少 linux 二进制文件
- javascript - 如何根据传单中的 latlng 获取标记?
- reactjs - 如何通过 React 中的状态列表进行动画处理?