Keycloak gatekeepr за nginx входной обратный прокси - PullRequest
0 голосов
/ 10 апреля 2020

Цель : развертывание сторожевого устройства Keycloak, когда nginx вход имеет активную функцию перезаписи-цели.

Вход перезаписывает цель в соответствии с:

  • rewrite.bar.com/something/ переписывает в rewrite.bar.com/
  • rewrite.bar.com/something/new переписывает в rewrite.bar.com/new

и добавляет следующий заголовок:

X-Forwarded-Prefix: /something

Конфигурация сторожевого устройства Keycloak:

#deployment.yaml:
...
- name: keycloak-gatekeeper
  image: quay.io/keycloak/keycloak-gatekeeper:9.0.2
  imagePullPolicy: IfNotPresent
  args:
    - --listen=0.0.0.0:3000
    - --discovery-url=https://auth.server.com/auth/realms/realm
    - --client-id={client_id}
    - --client-secret={client_secret}
    - --redirection-url=https://rewrite.bar.com/something/
    - --upstream-url=http://127.0.0.1:8080
    - --skip-upstream-tls-verify=false
    - --skip-openid-provider-tls-verify=false
    - --enable-default-deny=true

Проблема :
Гейткипер перенаправляет неавторизованные запросы на https://rewrite.bar.com/oauth/authorize?state=00191..., но конечная точка находится на https://rewrite.bar.com/something/oauth/authorize. Гейткипер игнорирует заголовок X-Forwarded-Prefix. Когда путь корректируется вручную в браузере путем добавления something/ к пути, все работает. Существует правильное перенаправление на сервер аутентификации и обратный вызов также работает.

Когда конфигурация привратника увеличивается путем установки базового URI в развертывании:

    ...
    - --redirection-url=https://rewrite.bar.com/something/
    - --base-uri=/something
    ...

неавторизованные запросы правильно перенаправляются на https://rewrite.bar.com/something/oauth/authorize, что перезаписывается при входе в https://rewrite.bar.com/oauth/authorize, что не соответствует незащищенной конечной точке авторизации в привратнике (something/oauth/authorize). Это приводит к постоянному перенаправлению.

Вопрос : Есть ли способ настроить шлюз таким образом, чтобы он добавлял /something к запросам перенаправления, но не ожидает его (proxy-base- URL)?

...