2017-02-20 5 views
3

Я перемещался через Google, не найдя какие-либо конкретные ответов или примеров, поэтому снова пытаюсь своей удачи здесь (часто повезти).Keycloak позади апача обратного прокси

Проблема

  • У меня есть один пружинный загрузочный RESTful сервис работает позади апача обратного прокси-сервера. Эта служба RESTful работает только с HTTP. Скажем, он работает на локальном порту ip 172.s 8080.

  • Я также настроил обратный прокси-сервер Apache. Скажем, он работает на локальном ip 172.a и общедоступном ip 55.a. Этот прокси отвечает на оба порта 80, но весь HTTP-трафик автоматически перенаправляется на 443.

  • У меня есть другой сервер, на котором работает автономный сервер Keycloak. Также этот сервер настроен на доступ общественности через обратный прокси . Скажем, он работает на локальном ip 172.k. Этот сервер Keycloak работает только по протоколу HTTP. HTTP-запросы обрабатываются с использованием SSL через обратный прокси-сервер.

  • Последнее, у меня есть другой интерфейс-webapp, работающий на локальном ip 172.f. Этот интерфейс frontend-webapp работает под Nodejs, а также настраивается через обратный прокси. Он также работает только с HTTP, но клиент (браузер) использует SSL через обратный прокси-сервер, как и для службы Keycloak и RESTful. Этот интерфейс использует службу RESTful и также настроен на аутентификацию с помощью адаптера javascript keycloak.

  • Служба RESTful сконфигурирована как переносная лента с использованием адаптера Spring Boot Keycloak, а приложение frontend настроено с открытым доступом.

Сервисный сервер RESTful, сервер Keycloak и внешний сервер не являются общедоступными; они доступны только через обратный прокси. Но они могут общаться друг с другом (поскольку они находятся в одной частной сети).

В файле frontend keycloak.json auth-server-url установлен на прокси-адрес https://example.com/auth, и интерфейс может успешно получить действительный токен. Теперь, когда я пытаюсь использовать службу RESTful, я получаю ошибку в адаптере RESTful, что маркер-маркер недействителен. В http-заголовке я, конечно же, отправляю Authorization: Bearer <token>. Причина, по которой я получаю эту ошибку, заключается в том, что в конфигурации RESTful keycloak я сконфигурировал auth-server-url, чтобы использовать локальный url http://172.k:9080/auth, поэтому этот URL-адрес отличается от указанного в токене (который равен https://example.com/auth).

Вопрос

я не могу включить тот же auth-server-url в RESTful службы как для интерфейса, так что потребуется мне также установка HTTPs на RESTful службы (потому что URL-адрес является HTTPS), и это будет сложно усложнять материал, включая необходимость установки сертификатов и тому подобного. Также я считаю, что это неэффективно и нецелесообразно настраивать SSL на локальных серверах.

Итак, мой вопрос заключается в том, как я могу заставить адаптер поговорить с Keycloak, не пройдя через обратный прокси. Я хочу, чтобы адаптер RESTful разговаривал с сервером Keyclok для проверки токена через auth-server-url: http://172.k:9080/auth.

Раньше был другой URL для внутреннего интерфейса, который получил удален: https://issues.jboss.org/browse/KEYCLOAK-2623

+0

Вы пытаетесь установить для Web Origins значение *. Если я прав, у меня такая же проблема при доступе через кросс-домен – OkieOth

+0

Да, я пробовал устанавливать веб-истоки на «*» без каких-либо успехов. – Moni

ответ

1

Я пробовал разные вещи, но не может решить эту проблему. Мне кажется, что нет способа указать auth-server-url: http://172.k:9080/auth в backend-адаптере, в то время как интерфейсный адаптер кладет auth-server-url:https://example.com/auth в токен. Поэтому я решил настроить все бэкэнд-услуги на auth-server-url: https://example.com/auth.

Единственным недостатком этого является то, что мой адаптер вспомогательных услуг обменивается информацией с клавиатурным надзором по сети, что, вероятно, не так хорошо работает, но по крайней мере все работает так, как должно. Должно было быть возможно каким-то образом указать локальную конечную точку keycloak в той же локальной сети или одну и ту же VPN в AWS.

+0

Читателю: если у вас есть альтернативные решения, пожалуйста, предоставьте ответ, я с радостью приму наш ответ. – Moni

1

Я использую Keycloak для проекта в контейнерах докеров. У меня была та же проблема, но в локальной сети (так что, возможно, это не будет решением, в этом случае мне жаль). Так что это была ситуация:

  • REST Java веб-приложение работает на wildfly, в одном Докер контейнере
  • Keycloak работает в одном контейнере Докер в одной и той же сети предыдущего
  • Apache работает локально на моем машина снаружи Докер, выступающая угловое 2 приложение, с адаптером правильно CONFIG

  • углового 2 приложения указывали на URL http://aaa.auth.com (я модифицировал локальные узлы файлов с записью 127.0.0.1 aaa.auth.com)

  • Я добавил ссылку между Wildfly Docker и Keycloak Docker по имени хоста http://aaa.auth.com, и я использовал это имя хоста в адаптере Java webapp.
  • Оба адаптера указывал на тот же адрес, насколько я знаю, что это требование Keycloak см https://issues.jboss.org/browse/KEYCLOAK-2067

Есть много отличий от вашего случая (докер, HTTP против HTTPS и т.д.), но, во избежание связи REST-Keycloak через Интернет, вы пробовали модифицировать файловые хосты вашего сервера (хостинг службы RESTful), вставив запись с локальным IP-адресом вашего обратного прокси (172.a) и «example.com», ?

Или, может быть, вы можете решить это с помощью частного DNS?

Смежные вопросы