Я пишу Spring Boot приложение, где на странице входа в систему пользователю будет предложено предоставить свой X509 сертификат (сгенерированный моим самозаверяющим CA).Если пользователь не может предоставить сертификат, ему показывают другую страницу с ошибкой.Если пользователь предоставляет правильный сертификат, я хочу показать ему страницу входа в систему с предварительно заполненным адресом электронной почты (прочитанным из сертификата) и ожидающим ввода пароля.Единственный затронутый путь должен быть / admin / login , для которого требуется сертификат, все остальные пути должны быть полностью незащищенными.
На данный момент я обнаружил следующую процедуру:
- сгенерировать правильные сертификаты
- сгенерировать файл jks
- настроить tomcat для запроса сертификата
- настроить безопасность весенней загрузки
- перед загрузкой страницы входа,попросить сертификат, разобрать его, проверить достоверность данных в нем (общее имя, ...)
- показать страницу входа в систему
- проверить данные для входа и, если все в порядке, сделать мои вещи
У меня проблемы с точками 3-5 , так как все найденные мной уроки не совсем то решение, которое я ищу.
Кроме того, позже,этот проект Spring Boot будет работать за виртуальным хостом Apache, поэтому я думаю, что мне понадобится Apache для запроса сертификата, а затем перенаправить его на сервер Spring Boot.
Мне понадобятся некоторые отправные точки, чтобы узнать, что мне нужно реализоватьэто.
Некоторый контекст: я создаю приложение Angular 6 (Spring Boot for backend), где у меня есть два типа ролей: пользователи и администраторы.Пользователи будут входить через обычную (угловую) страницу, используя только имя пользователя и пароль.Администратор должен будет войти в систему, предоставив сертификат и затем войдя в систему с именем пользователя, указанным в сертификате и пароле - это будет сделано на отдельной странице, обслуживаемой Spring Boot с механизмом шаблонов Thymeleaf.Что я предполагал реализовать, так это то, что когда пользователь проходит аутентификацию, я генерирую токен JWT и сохраняю его в cookie, который будет использоваться для всех будущих запросов (в течение срока действия JWT).Единственная проблема в том, что я не знаю, как соединить все эти вещи