Микросервисы - регистрация пользователей и вход в систему с использованием OAuth2 и Spring Boot - PullRequest
0 голосов
/ 24 мая 2019

Я использую 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, Пол и т. Д.

Если я решу пойти по этому пути, главная проблема: Поскольку мой сервер ресурсов должен защищать некоторые ресурсы на основе зарегистрированного пользователя (идентификатор пользователя в токене) и запрошенного ресурса, идентификаторы должны быть синхронизированы. Как мне синхронизировать их в обеих базах данных? (Авторизация и Ресурс)

Это правильный путь? (Сервер ресурсов, обслуживающий личную информацию пользователя, и Сервер авторизации, обслуживающий только информацию о входе пользователя)

...