Как защитить запрос веб-браузера и запрос Restful в Spring Security с помощью keycloak

Я использую весеннюю загрузку с keycloak для защиты моего приложения. Но у меня есть как обычный запрос веб-браузера (с использованием шаблона тимелеафа), так и запрос api rest (без браузера и метода в контроллере, аннотированного с помощью @ResponseBody в формате json).

Из веб-руководства я обнаружил, что keycloak будет использовать другой тип клиента для запроса браузера (например, общедоступный клиент) и без запроса пользовательского интерфейса (только для носителя), а сеанс в SecurityConfig.java отличается, new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl()) и new NullAuthenticatedSessionStrategy().

Итак, мой вопрос: как я могу настроить безопасность Spring и Keycloak как для поддержки запроса браузера, так и для запроса rest api в одном приложении?

Спасибо!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
2
0
641
1

Ответы 1

Наличие клиента bearer-only имеет смысл только тогда, когда у вас есть другой клиент для аутентификации. Вкратце, это три типа клиентов в Keycloak:

  • Общедоступный: разрешает аутентификацию без секрета клиента.
  • Конфиденциально: разрешает аутентификацию с секретом клиента.
  • Только на предъявителя: у вас должен быть токен доступа для доступа к его ресурсам.

Сказав это, я не вижу смысла делать одно и то же приложение одновременно общедоступным и только на предъявителя. Как правило, вы создаете клиента для каждого приложения. Итак, у вас есть два варианта:

  • Сделайте ваше приложение общедоступным или конфиденциальным. Это будет принимать запросы браузера и не-браузера. Рекомендуемые.
  • Разделите ваше приложение на две части и сделайте одно, которое просто обслуживает пользовательский интерфейс (общедоступное или конфиденциальное), и другое, которое обслуживает REST API (это будет только носитель). Тем не менее, помните, что вам нужно будет войти в систему с помощью клиента пользовательского интерфейса для аутентификации. Рекомендуется только в том случае, если API вашего приложения достаточно велик, чтобы его можно было отделить от пользовательского интерфейса.

Привет @xtreme, как сделать запрос не из браузера для общедоступного клиента keycloak, для которого я должен установить заголовок HTTP-запроса. Я знаю только, если использую клиент-носитель, я могу использовать заголовок «Authetication» с действительным токеном посещения, но что мне делать с типом общедоступного клиента. Спасибо!

Jason Tian 09.05.2018 06:17

Для второго решения да, оно работает. Но поскольку мое приложение - это просто сервис (с простым пользовательским интерфейсом для тех, кто не отдыхает), я не хочу разделять его, если могу.

Jason Tian 09.05.2018 06:20

Что касается вашего первого комментария, вы можете использовать заголовок Authorization для публичных и конфиденциальных клиентов.

Xtreme Biker 09.05.2018 07:45

Другие вопросы по теме