Как Spring Security может защитить пользователя A от данных пользователя B? - PullRequest
0 голосов
/ 16 мая 2018

Я знаю, что Spring Security имеет много возможностей авторизации на основе ролей.Но что, если у меня есть два обычных пользователя, обращающихся к данным.Как я не позволю Пользователю А видеть записи, принадлежащие Пользователю Б?Например, чтобы пользователь А не мог видеть заказы, созданные другими пользователями?

Обратите внимание, что это НЕ авторизация на основе ролей.Пользователь A, пользователь B и т. Д. - все обычные пользователи, отличающиеся только своей идентичностью.

В существующем приложении Spring в настоящее время я выполняю работу с фильтром в каждом DAO, гарантируя это "... and user_id = $ 1 ... "является частью запросов.Это также уменьшает объем извлекаемых данных и снижает стоимость доступа к базе данных.

В будущем я буду разбивать свое приложение на микросервисы.Мне кажется, что каждый запрос микросервиса также должен содержать информацию UserDetails.Это звучит как анти-паттерн.

Шлюз API был бы просто потребителем подходов, которые я упоминал ранее.Итак, является ли передача информации UserDetails каждому микросервису моим лучшим подходом?

Я надеюсь, что ответ не в том, чтобы "создать роль для каждого обычного пользователя, такого как" ROLE_USER_A "," ROLE_USER_B "и т. Д.

Спасибо,

Джером.

1 Ответ

0 голосов
/ 16 мая 2018

В существующем приложении Spring в настоящее время я выполняю работу с фильтром в каждом DAO, гарантируя, что "... and user_id = $ 1 ..." является частью запросов.Это также уменьшает объем извлекаемых данных и снижает стоимость доступа к базе данных.

Это правильный подход

В будущем я буду разбивать свое приложение на микросервисы.Мне кажется,

, что каждый запрос микросервиса также должен содержать информацию UserDetails.Это звучит как анти-паттерн.

Здесь вы можете использовать несколько подходов.Вы можете использовать Spring Security oauth и разделить сервер аутентификации на его собственный компонент.Тогда учетные данные будут храниться в центральном месте.Это избавит вас от необходимости передавать учетные данные.

Другим подходом будет использование защиты периметра.По сути, ваша служба шлюза будет аутентифицировать каждый запрос и затем передавать пользовательские данные каждому компоненту.

Существуют другие подходы, но эти два довольно распространены.

...