Как настроить Keycloak + Spring Boot + Oauth2 в микросервисной архитектуре - PullRequest
0 голосов
/ 05 ноября 2018

Я успешно установил Keycloak и общедоступное / front-end приложение для весенней загрузки. Все работает как положено. Внешнее приложение Spring Boot настроено в Keycloak как клиент (app-ui) в области, пользователь может войти через keycloak, токены успешно проходят все отлично. Spring Security обеспечивает безопасность конечных точек, и для конечных точек уважаются роли.

Теперь я пытаюсь добавить в смесь нижестоящее Spring Boot App (веб-сервис), и я хочу, чтобы он знал о вошедшем в систему пользователе, чтобы иметь возможность защищать вызовы к нему. Внешнее приложение Spring Boot использует Feign Client для вызова конечных точек REST на внутреннем Spring Boot App, но сервер не выполняет аутентификацию / авторизацию.

У меня есть пара вопросов, которые я не могу понять:

  1. Как настроить внешнее приложение Spring Boot для передачи данных аутентифицированного пользователя во внутреннее приложение Spring Boot (RequestInterceptor / RestTemplate / Feign config / Http Headers)?
  2. Как настроить внутреннее Spring Boot App для использования данных аутентифицированного пользователя, которые он получает из вышестоящего Spring Boot App, и какие зависимости мне нужно добавить в фоновое Spring Boot App, чтобы облегчить это (org. keycloak: keycloak-spring-boot-starter и org.springframework.boot: spring-boot-starter-security)?
  3. Что-нибудь нужно настроить в Keycloak для внутреннего Spring Spring Boot App? Должен ли он быть зарегистрирован в Keycloak как конфиденциальный / непубличный клиент (например, app-api)?
  4. Есть ли что-то конкретное для настройки в бэкэнд-приложении Spring Boot? Говорит ли он с Keycloak, чтобы проверить данные аутентифицированного пользователя, которые он получает от вызывающих абонентов?

Я бы хотел увидеть демонстрацию или учебник, в котором рассказывается о том, что я видел, на How to integrate Keycloak and Spring Boot шаг вперед, чтобы также защитить другие нисходящие сервисы. Если я смогу это выяснить, я выложу один.

Я предполагаю, что это можно сделать с помощью стандартной конфигурации OAuth2 в внутреннем Spring Boot App, но я не был уверен, как это рекомендуется для достижения этой архитектуры.

Вот архитектура, которую я пытаюсь настроить:

Spring Boot and Keycloak Architecture

1 Ответ

0 голосов
/ 05 ноября 2018

Как настроить внешнее приложение Spring Boot для передачи данных аутентифицированного пользователя во внутреннее приложение Spring Boot (RequestInterceptor / RestTemplate / Feign config / Http Headers)?

Вам необходимо передать токен-носитель в заголовке http-запроса.

Как настроить внутреннее приложение Spring Boot для использования данных аутентифицированного пользователя, которые он получает от вышестоящего Spring Boot App, и какие зависимости мне нужно добавить в внутреннее приложение Spring Boot, чтобы облегчить это (org.keycloak: keycloak-spring-boot-starter и org.springframework.boot: spring-boot-starter-security)?

Вам необходимо добавить нового клиента в область, например, «back-end-client» и установить его «Тип доступа» на «только носитель». Вам понадобятся зависимости 'keycloak-spring-boot-starter' и 'spring-boot-starter-security', также в вашем добавлении 'keycloak-adapter-bom'. В вашем application.properties у вас должны быть указанные ниже свойства

keycloak.realm =
keycloak.auth-server-url = your keycloak url
keycloak.ssl-required =external
keycloak.bearer-only=true
keycloak.resource =yout client name
keycloak.credentials.secret= your secret key
keycloak.security-Constraints[0].authRoles[0] = user
keycloak.security-Constraints[0].securityCollections[0].patterns[0] = /*
keycloak.cors=true

Что-нибудь нужно настроить в Keycloak для внутреннего Spring Spring Boot App? Должен ли он быть зарегистрирован в Keycloak как конфиденциальный / непубличный клиент (например, app-api)?

Вам необходимо создать нового клиента, и он должен быть зарегистрирован как «только на предъявителя»

Вы можете обратиться по этой ссылке: https://www.keycloak.org/docs/3.2/securing_apps/topics/oidc/java/spring-boot-adapter.html

...