【问题标题】:Keycloak AdminURL infinite redirect loop (nginx proxy)Keycloak AdminURL 无限重定向循环(nginx 代理)
【发布时间】:2021-10-21 00:42:27
【问题描述】:

我之前配置了此设置,但是在尝试将其复制到新实例时,我无法使其正常工作。 我正在使用standalone-ha 模式,但是尝试使用standalone 并没有什么不同。

实例配置了 frontendUrl https://example.com。在standalone-ha.xml 中仅保留此设置,前端和管理控制台都可以毫无问题地访问。 将 adminUrl https://intra.example.com 添加到 spi 主机名部分后,它看起来也像

        <spi name="hostname">
            <default-provider>default</default-provider>
            <provider name="default" enabled="true">
                <properties>
                        <property name="frontendUrl" value="https://example.com/auth/"/>
                        <property name="adminUrl" value="https://intra.example.com/auth"/>
                    <property name="forceBackendUrlToFrontendUrl" value="false"/>
                </properties>
            </provider>
        </spi>

无法再访问管理控制台。

使用欢迎页面上的链接或直接浏览到该链接后,将出现登录页面(https://example.com/auth)。使用有效凭据登录后,它会重定向到https://intra.example.com/auth/admin/master/console/,然后立即重定向到https://intra.example.com/auth/admin/master/console/#state=4626eb82-6993-4fff-8c11-399a05cb8c66&session_state=3198da2f-f6eb-45be-aa87-ae7d52e22068&code=fd73f80a-fe43-4996-b245-efa42efb7b44.3198da2f-f6eb-45be-aa87-ae7d52e22068.e794bdbc-6497-4fc3-8502-e0afedb67492。然后它重定向回https://intra.example.com/auth/admin/master/console/,然后返回到长链接,然后再次返回,依此类推。这个循环永远持续下去。

实例位于 nginx 代理后面,该代理配置了必要的标头:

server {
    listen                  192.168.0.115:443 ssl http2;

    server_name             intra.example.com;
    ssl_certificate            <valid cert>;
    ssl_certificate_key     <key>;

    location                /auth {
            proxy_pass          https://192.168.0.115:8843/auth;
            proxy_ssl_verify    off;
            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   https;
    }
}
server {
    listen                  <public IPv4>:443 ssl http2;
    listen                  [<public IPv6]:443 ssl http2;

    server_name             example.com;

    ssl_certificate            <valid cert>;
    ssl_certificate_key     <key>;

    location                /auth {
            proxy_pass          https://192.168.0.115:8843/auth;
            proxy_ssl_verify    off;
            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   https;
    }

}

经过研究,我尝试了各种组合:

  • 代理根 (/) 而不是 /auth

  • 代理到 http 而不是 https

  • 为 http/https 监听器添加代理地址转发:

     <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true" proxy-address-forwarding="true"/>
    
  • 添加代理监听器:

     <http-listener name="default" socket-binding="http" redirect-socket="proxy-https" enable-http2="true" proxy-address-forwarding="true"/>
    

    结合

     <socket-binding name="proxy-https" port="443"/>
    

     <http-listener name="default" socket-binding="http" redirect-socket="proxy-https" enable-http2="true" proxy-address-forwarding="true"/>
    
  • 在数据库中临时将有效的重定向 URI 设置为 *

这似乎总结了一些关于这个问题的现有线程的想法。我发现的其他线程正在使用 Docker,而我正在使用本机实例。

如果有人知道还有什么可以尝试的,我将不胜感激。我需要将管理控制台分离到一个专用的内部 URL,并且知道以前曾有过这种情况。我什至从 nginx 复制了相同的代理配置,因此不认为问题出在此处,但我当然会保留该选项。

重定向期间似乎没有生成日志条目。我也尝试从--debug 开始。

非常感谢您的阅读。

【问题讨论】:

    标签: nginx jboss wildfly keycloak redhat-sso


    【解决方案1】:

    我认为我遇到了类似的问题,长话短说(经过几天的谷歌搜索)以下对我有帮助

          location / {
                    ....
                    proxy_pass_header       Set-Cookie;
                    ....
          }
    

    这要归功于托马斯·达克斯伯里。这是他的帖子和他随后的解释,他是如何解决的。它帮助了我;-) https://keycloak.discourse.group/t/redirect-loop-logging-into-master-realm-behind-apache-reverse-proxy/8395

    【讨论】:

      猜你喜欢
      • 2021-08-03
      • 2020-09-22
      • 1970-01-01
      • 2016-01-09
      • 2019-08-31
      • 2015-11-28
      • 1970-01-01
      • 2023-03-19
      • 2011-06-04
      相关资源
      最近更新 更多