无法访问Keycloak管理控制台

时间:2019-12-16 17:53:07

标签: nginx keycloak

我正在尝试在根服务器上设置Keycloak,但无法从Internet访问管理控制台。 我已经安装了keycloak服务器,并将其放在同一台计算机上的nginx反向代理后面。我已经为域设置了一个letencrypt证书。我还通过脚本设置了管理员的密钥斗篷。

当我访问域为https://<my-domain>的服务器时,我将被转发到https://<my-domain>/auth,并且有一个带有“管理控制台”链接的密钥访问欢迎页面。该链接指向https://<my-domain>/admin,但显示404。

起初,我认为这可能是nginx的问题,因此我按照文档中的指南设置了负载均衡器(https://www.keycloak.org/docs/latest/server_installation/index.html#_setting-up-a-load-balancer-or-proxy)。在那里,在“验证配置”下,它告诉您打开路径https://<my-domain>/auth/realms/master/.well-known/openid-configuration,该路径可以按预期工作,并且我得到一个包含几个链接和其他信息的json文件。但是,这些链接都不起作用-都给我一个404。

当我尝试https://<my-domain>/auth/realms/master时,我得到一个JSON响应。 因此某些链接确实有效,所以我认为这与nginx无关,而与密钥斗篷本身无关。

所以基本问题是:如何配置Keycloak,以便可以通过Internet访问管理控制台?我读过默认情况下,您只能在localhost上访问它,但是必须有一种方法可以覆盖此默认值?

相关的nginx配置:

upstream keycloak {
    server 127.0.0.1:8080;
}

server {
    listen 443 ssl http2;
    # some ssl configuration for letsencrypt

    location / {
        proxy_pass          http://keycloak;
        proxy_set_header    Host                $host;
        proxy_set_header    X-Real-IP           $remote_addr;
        proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Host    $host;
        proxy_set_header    X-Forwarded-Server  $host;
        proxy_set_header    X-Forwarded-Port    $server_port;
        proxy_set_header    X-Forwarded-Proto   $scheme;
    }
}

keycloak/standalone/configuration/standalone.xml中我已编辑的某些部分:

<subsystem xmlns="urn:jboss:domain:undertow:10.0" ...>
    ...
    <server name="default-server">
        <http-listener name="default" 
            socket-binding="http" 
            redirect-socket="proxy-https"
            enable-http2="true"
            proxy-address-forwarding="true" />
        ...
    </server>
    ...
</subsystem>
...
<interfaces>
    <interface name="management">
        <any-address />
    </interface>
    <interface name="public">
        <any-address />
    </interface>
</interfaces>
<socket-binding-group name="standard-sockets" ...>
    ...
    <socket-binding name="proxy-https" port="443" />
    ...
</socket-binding-group>

编辑

我能够修复它。问题在于,密钥斗篷正在将初始页面从https://<my-domain>/重定向到https://<my-domain>/auth,但是在所有其他链接中都缺少了这个额外的/auth。因此,管理链接指向没有https://<my-domain>/admin/master/console部分的/auth,因此该页面不存在。当我手动输入带有/auth的URL时,我得到一个带有“正在加载..”消息的页面,但是所有样式和JavaScript文件都链接在一起,因此URL中也缺少/auth部分,因此没有任何内容工作。

要解决此问题,我现在在standalone.xml的{​​{1}}行中更改为<web-context>auth</web-context>,现在一切正常。在起始页上没有任何重定向,并且所有链接都可以在没有<web-context>/</web-context>部分的情况下正常工作。 但是,很有趣的是,为什么它一开始就不起作用,以及如果打算进行/auth重定向的话,如何解决这个问题。

3 个答案:

答案 0 :(得分:1)

在我的kubernetes集群中,nginx反向代理后面的keycloak实例存在相同的问题。我通过将env PROXY_ADDRESS_FORWARDING设置为true来修复它。 PROXY_ADDRESS_FORWARDING=true

答案 1 :(得分:0)

尝试打开 / auth / admin / master / console / 在浏览器中。

其他信息:

https://www.keycloak.org/docs/latest/getting_started/index.html

https://www.keycloak.org/docs-api/8.0/rest-api/index.html

哦,我建议使用dockerized Keycloak。如果更容易,则可以升级到较新版本。

答案 2 :(得分:0)

您帮助我解决了我的问题。我正在设置Java系统属性keycloak.frontendUrl(或env KEYCLOAK_FRONTEND_URL),显然它需要一个完整的URL,而不仅仅是主机名。附加/auth可以解决我的重定向问题。

如果未附加keycloak.hostname.fixed.hostname,似乎KEYCLOAK_HOSTNAME/auth)也会引起问题。

有关主机名提供程序的详细信息,请参见文档,在这里:https://www.keycloak.org/docs/latest/server_installation/index.html#hostname