Я использую Java с Spring Boot для реализации экосистемы микросервисов.
Во время регистрации у меня возникли мысли о том, где следует сохранять личную информацию пользователя (пол, адрес, контактные данные и т. Д.).
Я имею в виду, он должен идти на сервере ресурсов или на сервере авторизации?
Представьте себе ситуацию, когда у меня есть микросервис А, который является сервером авторизации. С другой стороны, у меня есть микросервис B, который является сервером ресурсов.
Теперь представьте, что я решил создать личную информацию пользователя на микросервисе B (Resource Server).
Microservice A - Сервер авторизации предоставляет следующие конечные точки:
POST /oauth/token
POST /oauth/check_token
Микросервис B - Сервер ресурсов предоставляет следующие конечные точки:
GET /users
GET /users/{id}
Теперь я отправил запрос POST
с информацией о конечном пользователе в Microservice A и получил токен для использования в транзакциях сервера ресурсов.
Хорошо, я получил токен, теперь мне нужно использовать его для получения личной информации пользователя в Микросервис B . Для этого мне нужно запросить отправить запрос на /users/1
(1 - идентификатор зарегистрированного пользователя).
Зарегистрированный пользователь может видеть только свою личную информацию и не должен видеть чужую личную информацию. Для этой защиты мой токен имеет атрибут userId
. Имея эту информацию на токене, Resource Server может просто проверить.
Весной будет что-то вроде этого:
@GetMapping("/users/{id}")
@PreAuthorize("#id == authentication.userId")
public ResponseEntity<Object> handleGetUsersInformations(@PathVariable("id") Long id) {
// logic and return
}
База данных сервера авторизации имеет следующую информацию:
- Имя пользователя, роли, пароль;
База данных сервера ресурсов имеет следующую информацию:
- Имя, Фамилия, Адрес, ContactMediums, Пол и т. Д.
Если я решу пойти по этому пути, главная проблема:
Поскольку мой сервер ресурсов должен защищать некоторые ресурсы на основе зарегистрированного пользователя (идентификатор пользователя в токене) и запрошенного ресурса, идентификаторы должны быть синхронизированы. Как мне синхронизировать их в обеих базах данных? (Авторизация и Ресурс)
Это правильный путь? (Сервер ресурсов, обслуживающий личную информацию пользователя, и Сервер авторизации, обслуживающий только информацию о входе пользователя)