как обеспечить безопасность запроса веб-браузера и спокойного запроса в весенней безопасности с помощью keycloak - PullRequest
0 голосов
/ 08 мая 2018

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

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

Таким образом, мой вопрос заключается в том, как мне настроить весеннюю защиту и клавиатурный ключ для поддержки запросов браузера и запросов API остальных в одном приложении?

Спасибо!

1 Ответ

0 голосов
/ 08 мая 2018

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

  • Публично: разрешает аутентификацию без секрета клиента.
  • Конфиденциально: разрешает аутентификацию с секретом клиента.
  • Только на предъявителя: для доступа к его ресурсам необходим токен доступа.

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

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