Цель : развертывание сторожевого устройства 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)?