GLPI 将 :80 附加到 CAS 回调 URL

GLPI 将 :80 附加到 CAS 回调 URL

问题:

GLPI 正在附加:80到使用 Keycloak 进行 CAS 身份验证的回调 URL。在 Keycloak 上成功登录后,用户将被重定向到包含在 URL 中的 GLPI URL ,并在 Firefox 和其他浏览器上:80遇到类似的错误页面。SSL_ERROR_RX_RECORD_TOO_LONG

细节:

我已经使用docker部署了GLPI 9.1.3,配置如下:

Environment: AWS EC2 Instance (Ubuntu 18.04)
Reverse-Proxy: Nginx
GLPI mapped to port 6969

这是我的docker-compose.yaml文件:

    version: "3.2"

    services:
    #Mysql Container
      mysql:
        image: mysql:5.7.23
        container_name: mysql
        hostname: mysql
        command: --default-authentication-plugin=mysql_native_password
        volumes:
          - ./mysql_data:/var/lib/mysql
        environment:
          - MYSQL_ROOT_PASSWORD=password
          - MYSQL_DATABASE=glpidb
          - MYSQL_USER=glpi_user
          - MYSQL_PASSWORD=glpi_password
        restart: always

    #GLPI Container
      glpi:
        build: .
        container_name : glpi
        hostname: glpi
        depends_on:
          - mysql
        ports:
          - 127.0.0.1:6969:80
        volumes:
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
          - ./html/glpi/:/var/www/html/glpi
          - ./plugins:/var/www/html/glpi/plugins
        environment:
          - TIMEZONE=Europe/Brussels
        restart: always
        links:
          - "mysql:mysql"

您可能会注意到,这不使用官方的 GLPI 图像。下面是我Dockerfile构建图像的方法:

    FROM diouxx/glpi

    RUN echo 'ServerName glpi.example.com' >> /etc/apache2/apache2.conf

部署容器的命令: docker-compose up --build

我还启用了 Keycloak 服务 CAS 身份验证github/jacekkow的项目。

GLPI 服务在 Nginx 代理后面运行,监听端口 80:

    server {
            listen 80;
            server_name glpi.example.com;
            location / {
                    proxy_pass http://localhost:6969;
                    proxy_http_version 1.1;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection 'upgrade';
                    proxy_set_header Host $host;
                    proxy_cache_bypass $http_upgrade;
                    proxy_buffering off;
            }
    }

答案1

经过大量搜索,我发现这篇博客文章并了解到问题可能出在 PhpCAS 模块上。

正如文章中提到的,我在插件代码库中搜索了这一行:

$server_port = $_SERVER['HTTP_X_FORWARDED_PORT'];

Client.phpphpCAS 模块在以下路径下运行:$GLPI_ROOT_DIR/vendor/jasig/phpcas/source/CAS/Client.php

我注释掉了在末尾附加端口号的逻辑privat function _getClientUrl()

        /* if (!strpos($server_url, ':')) {
            if (empty($_SERVER['HTTP_X_FORWARDED_PORT'])) {
                $server_port = $_SERVER['SERVER_PORT'];
            } else {
                $ports = explode(',', $_SERVER['HTTP_X_FORWARDED_PORT']);
                $server_port = $ports[0];
            }

            if ( ($this->_isHttps() && $server_port!=443)
                || (!$this->_isHttps() && $server_port!=80)
            ) {
                $server_url .= ':';
                $server_url .= $server_port;
            }
        } */

保存更改后,GLPI 在重定向到 Keycloak 时正确设置了回调 URL。

相关内容