GLPI 11: utilice Authentik para la autenticación mediante encabezado HTTP

En este tutorial, os explicaré cómo integrar Authentik con GLPI para centralizar la autenticación de los usuarios. Veremos juntos cómo configurar la conexión basándonos en la autenticación transmitida en los encabezados HTTP, lo que permite simplificar la gestión de las cuentas y mejorar la seguridad de vuestro entorno

¿Qué es la autenticación mediante solicitud HTTP?

La autenticación mediante solicitud HTTP es un mecanismo que permite a una aplicación delegar la gestión de la identidad de los usuarios a un servicio externo. En la práctica, cuando un usuario intenta acceder a una aplicación como GLPI, primero es autenticado por un servicio de terceros (en este caso, Authentik). Una vez verificada la identidad, los datos del usuario (por ejemplo, su nombre de usuario o su dirección de correo electrónico) se transmiten a la aplicación de destino a través de un encabezado HTTP.

Por lo tanto, GLPI no necesita gestionar directamente la contraseña del usuario. Se basa en los datos proporcionados en la solicitud HTTP para identificar a la persona y concederle el acceso. Este método resulta especialmente interesante para centralizar los accesos, simplificar la gestión de cuentas y reforzar la seguridad al limitar los puntos de almacenamiento de contraseñas.

En resumen, la autenticación HTTP actúa como un puente de confianza entre el servicio de autenticación (Authentik) y la aplicación final (GLPI).

Requisitos previos

Para empezar, necesitarás tener instalado GLPI 11 y Authenik. Lo ideal es disponer de un proxy inverso en Nginx (de lo contrario, deberás adaptar el tutorial a tu entorno).

Los usuarios deben estar creados en GLPI.

Configuración de Authentik para la autenticación HTTP en GLPI

Para empezar, vamos a añadir el proveedor y la aplicación GLPI 11 en Authentik.

En el menú Aplicaciones, haz clic en Proveedor 1 y, a continuación, en Crear 2.

En la lista de proveedores, haz clic en «Proxy Provider» 1 y, a continuación, en el botón «Siguiente» 2.

Asigne un nombre al proveedor 1, seleccione el flujo de autenticación 2, en el tipo, seleccione «Transferir la autenticación (aplicación única)» 3, introduzca la URL de GLPI 4 y haga clic en el botón «Finalizar» 5.

El proveedor ya está creado.

En el menú de navegación, despliega «Aplicaciones», ve a «Aplicaciones» 1 y, en la página de aplicaciones, haz clic en el botón «Crear» 2.

Asigna un nombre a la aplicación 1 e introduce el slug 2 si no se genera automáticamente; en el proveedor, selecciona GLPI 3, que se ha creado anteriormente, y haz clic en el botón «Crear» 4.

La aplicación ya está creada.

Publica el proveedor GLPI en el Avant-Post (Outpost) de Authentik: desde el menú «Aplicaciones», haz clic en «Outposts» 1 y, a continuación, en el botón de edición de «Authentik Embedded Outpost» 2.

Añada la aplicación GLPI a las aplicaciones seleccionadas 1 y haga clic en «Actualizar» 2.

La configuración en Authentik ha finalizado.

Activar y configurar la autenticación mediante solicitud HTTP en GLPI 11

Ahora pasaremos a la configuración de GLPI 11

Desde el menú, ve a «Configuración» / «Autenticación» y haz clic en «Otros métodos de autenticación» 1.

En la página de configuración, tendremos que añadir la variable que se ha pasado a Authentik; haz clic en el botón + 1.

Introduce el nombre de la variable, que es: HTTP_X_AUTHENTIK_USERNAME 1 y, a continuación, haz clic en Añadir 2.

A continuación, en GLPI, selecciona la variable que acabamos de crear 1 en el campo: «Campo de almacenamiento del identificador en la solicitud HTTP» y haz clic en «Guardar» 2.

Configuración de Nginx

Por último, pasaremos a la configuración de Nginx, que es el proxy inverso para acceder a GLPI y a Authentik.

En tu proxy inverso, empieza por guardar el virtualhost de GLPI:

sudo cp vh-glpi vh-glpi.BACKUP

Para ayudarnos a configurar el host virtual, Authentik nos proporciona la configuración que debemos aplicar; para ello, en la lista de proveedores, haz clic en el que se utiliza para GLPI.

En los detalles del proveedor, en la configuración, ve a la sección Nginx (autónomo) y podrás ver la configuración que debes aplicar en Nginx.

Utilice los elementos de configuración para pegarlos en el host virtual de GLPI, adaptando las directivasproxy_passa su entorno si es necesario.

Para ayudarte, aquí tienes la configuración de mi host virtual de GLPI:

server{
    listen 443 ssl;
    http2 on;
    server_name glpi.domain.tld;

    access_log /var/log/nginx/glpi.domain.tld_access.log;

    more_clear_headers Server;
    more_clear_headers X-Powered-By;

    client_max_body_size 0;

    ssl_certificate /etc/nginx/ssl/san-internal.pem;
    ssl_certificate_key /etc/nginx/ssl/san-internal.key;

    proxy_buffers 8 16k;
    proxy_buffer_size 32k;

    location /{
        proxy_pass http://ip-glpi-server;
        proxy_ssl_verify off;
        include proxy_params;

        ##############################
        # authentik-specific config
        ##############################
        auth_request     /outpost.goauthentik.io/auth/nginx;
        error_page       401 = @goauthentik_proxy_signin;
        auth_request_set $auth_cookie $upstream_http_set_cookie;
        add_header       Set-Cookie $auth_cookie;

        # translate headers from the outposts back to the actual upstream
        auth_request_set $authentik_username $upstream_http_x_authentik_username;
        auth_request_set $authentik_groups $upstream_http_x_authentik_groups;
        auth_request_set $authentik_entitlements $upstream_http_x_authentik_entitlements;
        auth_request_set $authentik_email $upstream_http_x_authentik_email;
        auth_request_set $authentik_name $upstream_http_x_authentik_name;
        auth_request_set $authentik_uid $upstream_http_x_authentik_uid;

        proxy_set_header X-authentik-username $authentik_username;
        proxy_set_header X-authentik-groups $authentik_groups;
        proxy_set_header X-authentik-entitlements $authentik_entitlements;
        proxy_set_header X-authentik-email $authentik_email;
        proxy_set_header X-authentik-name $authentik_name;
        proxy_set_header X-authentik-uid $authentik_uid;

        proxy_set_header HTTP_AUTH_USER $authentik_username;

    }

    # all requests to /outpost.goauthentik.io must be accessible without authentication
    location /outpost.goauthentik.io {
        # When using the embedded outpost, use:
        proxy_pass              http://ip-authentik:80/outpost.goauthentik.io;
        # For manual outpost deployments:
        # proxy_pass              http://outpost.company:9000;

        # Note: ensure the Host header matches your external authentik URL:
        proxy_set_header        Host $host;

        proxy_set_header        X-Original-URL $scheme://$http_host$request_uri;
        add_header              Set-Cookie $auth_cookie;
        auth_request_set        $auth_cookie $upstream_http_set_cookie;
        proxy_pass_request_body off;
        proxy_set_header        Content-Length "";
    }

    # Special location for when the /auth endpoint returns a 401,
    # redirect to the /start URL which initiates SSO
    location @goauthentik_proxy_signin {
        internal;
        add_header Set-Cookie $auth_cookie;
        return 302 /outpost.goauthentik.io/start?rd=$scheme://$http_host$request_uri;
        # For domain level, use the below error_page to redirect to your authentik server with the full redirect path
        # return 302 https://authentik.company/outpost.goauthentik.io/start?rd=$scheme://$http_host$request_uri;
    }


}
server{
    listen 80;
    server_name glpi.domain.tld;

    more_clear_headers Server;
    more_clear_headers X-Powered-By;

    if ($host = glpi.domain.tld;) {
        return 301 https://$host$request_uri;
    }

    return 404;
}

Prueba la configuración de Nginx:

sudo nginx -t

Recarga la configuración:

sudo systemctl reload nginx

Prueba la autenticación con Authenik

Desde otro navegador (o en modo incógnito), acceda a la URL de GLPI; debería aparecer el formulario de inicio de sesión de Authentik. Introduzca el nombre de usuario y la contraseña de un usuario que figure en Authentik y que haya sido configurado en GLPI.

Si todo va bien, estaré conectado a GLPI y tendré acceso al portal de usuario.

Además, para ayudarte con la configuración, aquí tienes la lista de variables $_SERVER de GLPI con Authentik.

Conclusión

Gracias a la integración de Authentik con GLPI mediante la autenticación por solicitud HTTP, dispones de una solución sencilla y segura para centralizar la gestión de identidades. Este método permite delegar la autenticación a un servicio específico, al tiempo que garantiza una experiencia fluida para los usuarios, que ya no necesitan recordar varias credenciales.

Al implementar esta configuración, facilitarás la administración de tu entorno al tiempo que refuerzas la seguridad general. Este enfoque resulta especialmente útil en infraestructuras en las que varias aplicaciones deben compartir un mismo sistema de autenticación.

Romain Drouche
Romain Drouche
Arquitecto de sistemas | MCSE: Infraestructura básica
Experto en infraestructura de TI con más de 15 años de experiencia en el sector. Actualmente, como Gerente de Proyectos de Sistemas y Redes y experto en Seguridad de Sistemas de Información (ISS), utilizo mi experiencia para garantizar la fiabilidad y seguridad de los entornos tecnológicos.