反向访问后面的密钥斗篷重定向

时间:2019-06-21 19:34:48

标签: jboss keycloak

我正在尝试让密钥斗篷在kubernetes的kong入口后面运行。我遇到的问题是keycloak在它认为正在返回的URL上添加了一个端口。 请求:auth.mydomain.com/auth 回复:auth.mydomain.com:8443/auth/admin/master/console/

client-> NLB:443-> kong:8443-> keycloak:8080

keycloak看到kong设置的请求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)

但是这些看起来像是告诉Underwow如果请求以纯文本格式答复时,我的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

如果我可以让密钥斗篷仅使用路径而不是端口进行响应,或者如果它必须通过端口进行响应,则只需告诉它我要与之通信的端口,就可以了。

1 个答案:

答案 0 :(得分:1)

GC.disable SPI,它使您可以为hostname设置主机名和端口,而不用从HTTP请求中检索它们。您可以将端口设置为默认端口(80/443),结果URL将不会显示端口。

Keycloak

这些值在运行时不可配置,因此您必须在更改后重新启动Keycloak。