Jhipster - невозможно использовать приложение Gateway при развертывании всего на хосте докера, кроме самого шлюза, смешанного докера и локального развертывания - PullRequest
0 голосов
/ 28 августа 2018

У меня есть несколько проектов JHipster Spring Microservice и шлюза. Я развернул их все на хосте, используя докер, кроме шлюза. Я запустил шлюз на другом хосте.

Я использую Keycloak для аутентификации OAuth.

Все работает нормально, когда я развертываю все микросервисы и базы данных и шлюзы в качестве док-контейнеров в сети докеров, используя docker-compose.

Но это не работает, когда я просто развертываю все в докере, кроме шлюза. Я имею в виду, если шлюз находится вне сети, созданной докером. мотивация для этого действия состоит в том, что я просто хочу, чтобы мой программист пользовательского интерфейса включил и запустил шлюз на своем собственном ПК и использовал микросервисы, которые развернуты на хосте сервера. Просто для простоты разработки пользовательского интерфейса необходимо настроить и запустить этот единственный шлюз, используя gradle bootRun -Pprod.

Я использовал технику для назначения отдельного IP-адреса каждому контейнеру в моей докерной сети. Эта техника называется сетевым соединением Docker MacVLan. так что каждый контейнер в хосте имеет отдельный IP-адрес в физической сети, и каждый из этих контейнеров виден на других хостах в сети.

проблема в том, что при обычном развертывании докера (когда шлюз развернут в сети докера на том же хосте) все работает нормально. но в моем сценарии после успешного входа в систему каждый микросервис возвращает error 401.

в микросервисе говорится об этой ошибке:

o.s.s.oauth2.client.OAuth2RestTemplate   : Setting request Accept header to [application/json, application/x-jackson-smile, application/cbor, application/*+json]
o.s.s.oauth2.client.OAuth2RestTemplate   : GET request for "http://keycloak:9080/auth/realms/jhipster/protocol/openid-connect/userinfo" resulted in 401 (Unauthorized); invoking error handler
n.m.b.s.o.CachedUserInfoTokenServices    : Could not fetch user details: class org.springframework.security.oauth2.client.resource.OAuth2AccessDeniedException, Unable to obtain a new access token for resource 'null'. The provider manager is not configured to support it.
p.a.OAuth2AuthenticationProcessingFilter : Authentication request failed: error="invalid_token", error_description="token string here"

SSO 401 is Happening

он говорит, что ваш токен недействителен. тот же механизм просто работает, когда все развернуто на том же хосте в докере. это для Keycloak, который предотвращает проверку токена для внешних хостов? Я лично сомневаюсь в этом, потому что это не помешало мне успешно войти в шлюз. и я только что проверил брелок. его по команде -b 0.0.0.0

Пожалуйста, помогите мне подняться и запустить шлюз только к gradle bootRun -Pprod.

Таким образом, я мог бы перефразировать мой вопрос следующим образом: я просто хочу, чтобы разработчик пользовательского интерфейса мог протестировать свой проект angular / spring-gateway на своем собственном ПК, в то время как другие службы развертываются на мощном сервере с использованием docker (аутентификация с использованием Keycloak ). и невозможно развернуть эти другие сервисы на собственном ПК разработчиков пользовательского интерфейса. как это сделать в JHipster?

1 Ответ

0 голосов
/ 29 августа 2018

добавьте server.use-forward-headers = true к вашей конфигурации при использовании шлюза

...