http侦听器的keycloak中的undertow子系统配置

undertow subsystem configuration in keycloak for http listener

大家好,我正在尝试配置 keycloak,在浏览文档时,我在 wildfly 中遇到了 undertow 子系统的配置(运行 keycloak),并在我的 standalone.xml 文件中验证了它

<server name="default-server">
                <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
                <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
                <host name="default-host" alias="localhost">
                    <location name="/" handler="welcome-content"/>
                    <http-invoker security-realm="ApplicationRealm"/>
                </host>
            </server>
.....
.....

 <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
        <socket-binding name="http" port="${jboss.http.port:8080}"/>
        <socket-binding name="https" port="${jboss.https.port:8443}"/>
        <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
        <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
        <socket-binding name="txn-recovery-environment" port="4712"/>
        <socket-binding name="txn-status-manager" port="4713"/>
        <outbound-socket-binding name="mail-smtp">
            <remote-destination host="localhost" port="25"/>
        </outbound-socket-binding>
    </socket-binding-group>

现在我想知道为什么 http-listenerredirect-socket 设置为“https”,因为这个侦听器应该侦听对 keycloak 服务器发出的 http 请求?正确的?我们确实有一个单独的 https-listener。同样在反向代理位于 keycloak 前面的情况下,所有使用 http 通过代理向 keycloak 发出的请求也应该在 http listener 上结束,对吗?那么为什么 http-listener 将请求重定向到 https 套接字绑定?

乍一看似乎不合理的解释很简单:Keycloak 应该通过 https 与用户和客户端通信。因此,如果用户尝试通过 http 启动会话,他会立即重定向到 https。 另一方面,如果用户已经通过 https 启动会话,则无需进一步重定向他。