Используя адаптер пружинной загрузки Keycloack (с защитой пружины), определяя типичный SecurityConfig
(который расширяется от KeycloakWebSecurityConfigurerAdapter
) и переопределяя метод "configure", я сталкиваюсь с проблемой при определении ролей доступа для конечной точки. , например, следующим образом:
// typically access is defined something like this:
http
.authorizeRequests()
.antMatchers(GET, "/SOME_ENDPOINT").hasRole("SOME_ROLE")
....
Это работает для меня, но когда я меняю GET на POST, вдруг мой API отвечает - 403 Forbiden - для намеченной конечной точки (да, я тожеобновил метод HTTP самого метода аннотации @RequestMapping контроллера).
Что еще более странно, так это то, что я уже создал множество API-интерфейсов «только носитель», также защищенных через Keycloak + адаптер Springboot + безопасность пружины, которые не имеют никаких проблем при дифференциации этого типа доступа к конечной точке с помощью метода HTTP (Iиспользовали POST, PATCH, PUT и т. д.), и они работают нормально.
Есть ли какое-то ограничение для клиентов "не только на предъявителя", или я могу что-то пропустить? Любая обратная связь будет принята с благодарностью.
РЕДАКТИРОВАТЬ: Проблема, как представляется, связана с тем, что пружинная безопасность допускает только методы GET по умолчанию, и способ обойти это, как предложено вссылка, которой я поделился в комментариях, будет отключать csrf следующим образом:
.csrf().disable()
Как также объяснено там, это деактивирует безопасность для всех конечных точек, что я не собираюсь делать. Я ожидал бы, что все вызовы метода http POST (или любого метода HTTP) будут обрабатываться и защищаться той же схемой, что и их аналог «GET».