Задать вопрос

Как грамотно засекьюрить REST приложение Angular 2 + Spring?

Доброго времени суток всем! Столкнулся со следующей проблемой: собираю Front-end (Angular 2+ TypeScript) Webpack-ом. Приложение должно быть полностью засекьюрено, заходя на любую страницу требуется наличие роли(ADMIN,USER).
Webpack же оптимизирует код одним из своих плагинов(CommonsChunkPlugin), в результате получается множество небольших кусочков: Js, один html фаил, и assets, как на скриншоте ниже:
757fc9f853a6440e9f4d19f9eab9b78e.png

Я вижу следующий сценарии защиты, но, как мне кажется, он не идеальный:

С помощью Spring Security определим доступ, к примеру так:

.antMatchers("/home", "/") 
.hasAnyRole("USER", "ADMIN") 
 Определим кастомную форму логирования : 
.formLogin().loginPage("/login") 
.usernameParameter("username").passwordParameter("password")


Так же реализуем следующие интерфейсы, чтобы они отдавали исключительно статусы, кроме – AuthentificationEntryPoint, т.к мне от него еще редирект нужен :
AuthentificationSuccessHandler, AuthentificationFailureHandler, AuthentificationEntryPoint

В купе с этим на клиенте при загрузке каждого следующего компонента необходимо делать запрос на наличие роли у данного принципала(ну, как я это понимаю, может что еще спросить надо, буду рад помощи), и если ее нет, то редирект на страницу логирования. По идее, это должен сделать сам спринг при запросе на сервер, т.к я требую к каждому ресурсу роль. Но если я перенесу все на клиента, и сделаю на всех ресурсах permitAll(), то можно же, по идее, взять мой код, убрать проверку и сервер останется вообще без защиты на ресурсы.
Если же перекинуть все на сервер, то придется открыть доступ ко всем ресурсам, т.к я не знаю, какой из чанков отвечает за форму логирования, а мне необходимо, чтобы она загрузилась, и можно было залогиниться. Чтобы было понятнее: при таком подходе я, конечно, могу засекьюрить URL-лы : /admin, /user, но когда я зайду на тот же /user, то могу спокойно пойти туда, где прав у меня нету, допустим “/admin/dashboard”, главное, это не через URL обращаться, а через внутренние router-link перейти, и приложение запрос сделает не к localhost:8080/admin/dashboard, а к localhost:8080/4.chunk.js, т.е к ресурсу, к которому открыт доступ. Повторюсь, т.к я не знаю, какой из чанков за что отвечает и, соответственно, не могу ограничить к ним доступ.
Большое спасибо за внимание, надеюсь, вы подскажете наиболее рациональное решение!
  • Вопрос задан
  • 1753 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Правильное решение - секьюрить апи бэкенда а не клиентский код
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы