Почему ограничения безопасности Keycloak не активны в @SpringBootTest и как их активировать? - PullRequest
0 голосов
/ 06 ноября 2019

Я нахожусь в процессе создания нового микросервиса и обеспечения его токенами доступа от Keycloak. Пока я добился успеха, конечная точка / токен / тест доступен только с действительным токеном от Keycloak, свойства приложения выглядят так:

keycloak.auth-server-url=http://localhost:8888/auth
keycloak.realm=realm
keycloak.resource=api
keycloak.public-client=true
keycloak.securityConstraints[0].authRoles[0]=basic-token
keycloak.securityConstraints[0].securityCollections[0].name=secured by basic access token
keycloak.securityConstraints[0].securityCollections[0].patterns[0]=/*

Это нормально работает при запуске проекта с помощью mvnspring-boot: run (я использую spring-boot-starter, keycloak-spring-boot-starter и без spring-boot-starter-security, которых я хочу избежать, если это возможно.

Сейчас я пишу несколько тестов для удовольствия, и ограничения безопасности Keycloak просто не работают. Я следовал настройке теста с https://github.com/cremich/testcontainers-keycloak (с обновленными версиями и JUnit 5), единственное отличие заключается вчто в примере выполняется ручная настройка Keycloak с использованием spring-boot-starter-security. Почему он работает только в тестах, когда выполняется с -security, и почему мой способ не работает?

AmЯ что-то упустил?

Спасибо.

Редактировать: Пример проекта

1 Ответ

0 голосов
/ 07 ноября 2019

После нескольких часов отладки я наконец понял это. Проблема в том, что аутентификация Keycloak (по любой причине, lol) выполняется в клапане Tomcat, а не в фильтре. MockMvc не проходит через контейнер сервлета (и его клапаны), поэтому он даже не достигает точки, где он будет аутентифицирован.

TestRestTemplate делает, хотя (и если вы используете стартер-безопасность, это такжефильтр не клапан). Я не знаю проектного решения, связанного с использованием клапана, а не фильтра, но вы можете либо использовать конфигурацию из keycloak-starter и протестировать ее с помощью TestRestTemplate, либо использовать более «дорогую» конфигурацию безопасности для стартера в сочетании с MockMvc.

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