Безопасность Spring REST: как реализовать двухэтапную аутентификацию - PullRequest
1 голос
/ 18 октября 2019

Мы создаем консольное приложение управления (службы REST API) для управления базами данных и серверами (виртуальными машинами и контейнерами). Службы API могут вызываться веб-интерфейсом (например, ReactJS) и удаленными клиентами http (например, SDK).

В силу различных причин нам потребуется реализовать «двухэтапную» аутентификацию с использованием Springзагрузочный MVC и пружинная охрана. Шаги таковы: 1) аутентификация на уровне приложения, 2) и затем аутентификация на уровне DB / OS.

Позвольте мне кратко описать два шага:

  1. Пользователь приложения или клиенты http могут войти в систему, используя имя пользователя / пароль, которые хранятся в репозитории центрального управления. После входа в систему пользователям / клиентам разрешается просматривать информацию об управляемых целях (БД и Серверы). Информация может быть собрана определенными инструментами и хранится в хранилище управления.

  2. Когда пользователь / клиент приложения хочет подключиться к управляемым целям, необходимо установить удаленное соединение икэшируется - следовательно, требуется аутентификация DB / OS.

Мои вопросы:

a. В целом, какое решение / передовой опыт вы рекомендуете для удовлетворения требований?

b. Какие методы аутентификации могут использоваться для проверки подлинности на уровне приложения: обычная проверка подлинности, вход в форму или их сочетание? и как реализовать?

c. На втором этапе (аутентификация на уровне БД / ОС) я понятия не имею, как его реализовать. Пожалуйста, прокомментируйте или укажите мне некоторые документы / фрагменты кода.

d. При наличии нескольких целей нам нужно проверить, можно ли получить существующее соединение из «кэша», прежде чем запрашивать учетные данные для создания нового соединения. Как мы можем проверить и решить, требуется ли аутентификация для каждой цели? Каков наилучший способ кэширования соединения - сеанс http, SecurityContex или другое?

Пожалуйста, помогите. Любые идеи, комментарии, направления очень ценятся! Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Ну, нет однозначного ответа, и любой ответ может быть слишком широким. Одним словом, одним из решений может быть аутентификация на основе ролей .

. Кажется, вам нужно ограничить некоторые ресурсы для определенных привилегированных людей, или им нужна другая авторизация, отличная от той, которая у них уже есть. Для этого случая: аутентификация на основе ролей кажется идеальной.

Для некоторой идеи вы можете проверить следующие ресурсы: Spring Security Role Based Access Authorization

Также вы найдете так много ресурсов в поиске Google. Ключевое слово: Spring Security Role Based Authorization Access

0 голосов
/ 18 октября 2019

Я могу только дать вам совет относительно б). Вопрос а) слишком широк для меня, чтобы дать вам полезный совет. Не зная больше об задействованных технологиях, я не могу дать вам никаких советов относительно c) или d).

Если вы планируете создать REST-API для SPA, я бы порекомендовал использовать токен JWT для аутентификации. В Интернете доступно множество учебных пособий по внедрению токенов JWT. Вы можете настроить JwtTokenFilter, который обрабатывает входящие запросы и - если маркер JWT содержится в запросе - загружает Принципал в SecurityContextHolder.

Как указано в этой статье , сохраняя данные сеансав токене JWT может быть не очень хорошая идея. Вместо этого я бы рекомендовал взглянуть на Spring Session . Это невероятно легко и просто в использовании. Вам следует использовать внешнее решение для кэширования, такое как Redis, чтобы иметь возможность доступа к сеансам из различных экземпляров вашего бэкэнда Spring.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...