Keycloak перенаправить за обратный прокси - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь заставить ключник бежать за входом в Гонконг. Проблема, которую я имею, состоит в том, что keycloak добавляет порт, который, как он думает, включен в URL, которые он возвращает. запрос: auth.mydomain.com/auth ответ: auth.mydomain.com:8443/auth/admin/master/console/

клиент -> NLB: 443 -> конг: 8443 -> брелок: 8080

keycloak видит запросы x-forwarded-port: 8443, которые устанавливает и отвечает конг с путем на порт 8443

Kong должен быть на 8443 сейчас из-за того, как он запускается в контейнере под пользователем kong и не имеет доступа к привилегированным портам.

Я установил подсказки на клавиатуре конфигов,

/socket-binding-group=standard-sockets/socket-binding=proxy-https:add(port=443)
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=redirect-socket, value=proxy-https)
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=proxy-address-forwarding, value=true)

Но они выглядят так, как будто они говорят undertow ответить 443, если запрос приходит в виде простого текста, мой x-forwarded-proto: https установлен правильно.

Также возможно, что проблема заключается в заголовке host.

----------------------------REQUEST---------------------------
               URI=/auth/admin/
 characterEncoding=null
     contentLength=-1
       contentType=null
            header=X-Real-IP=<REDACTED>
            header=Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
            header=Accept-Language=en-us
            header=Accept-Encoding=br, gzip, deflate
            header=User-Agent=<REDACTED>
            header=Connection=keep-alive
            header=X-Forwarded-Proto=https
            header=X-Forwarded-Port=8443
            header=X-Forwarded-For=<REDACTED>
            header=Referer=https://auth.my-domain.com/auth/
            header=Host=auth.my-domain.com:8443
            header=X-Forwarded-Host=auth.my-domain.com
            locale=[en_US]
            method=GET
          protocol=HTTP/1.1
       queryString=
        remoteAddr=/<REDACTED>
        remoteHost=<REDACTED>
            scheme=https
              host=auth.my-domain.com:8443
        serverPort=8443
          isSecure=true
--------------------------RESPONSE--------------------------
     contentLength=0
       contentType=null
            header=Connection=keep-alive
            header=Location=https://auth.my-domain.com:8443/auth/admin/master/console/
            header=Content-Length=0
            header=Date=Fri, 21 Jun 2019 07:05:28 GMT
            status=302

Было бы замечательно, если бы я мог заставить keycloak отвечать только путем, а не портом, или если он должен отвечать портом, просто скажите ему, с каким портом я хочу, чтобы он говорил.

1 Ответ

1 голос
/ 24 июня 2019

Существует hostname SPI, который позволяет вам установить имя хоста и порт для Keycloak вместо извлечения их из HTTP-запроса. Вы можете установить порты на порты по умолчанию (80/443), и в результирующих URL-адресах порт не будет отображаться.

# Replace `request` provider with `fixed`
/subsystem=keycloak-server/spi=hostname:write-attribute(name=default-provider,value=fixed)
# Set hostname and ports for http and https
/subsystem=keycloak-server/spi=hostname/provider=fixed:write-attribute(name=properties.hostname,value=example.org)
/subsystem=keycloak-server/spi=hostname/provider=fixed:write-attribute(name=properties.httpsPort,value=443)
/subsystem=keycloak-server/spi=hostname/provider=fixed:write-attribute(name=properties.httpPort,value=80)

Эти значения не настраиваются во время выполнения, поэтому вам нужно перезапустить Keycloak после изменений.

...