GLPI 11: Utilizar o Authentik para autenticação através do cabeçalho HTTP

Neste tutorial, vou explicar-vos como integrar o Authentik com o GLPI, de forma a centralizar a autenticação dos utilizadores. Vamos ver juntos como configurar a ligação com base na autenticação transmitida nos cabeçalhos HTTP, o que permite simplificar a gestão das contas e melhorar a segurança do seu ambiente

O que é a autenticação por pedido HTTP?

A autenticação por pedido HTTP é um mecanismo que permite a uma aplicação delegar a gestão da identidade dos utilizadores a um serviço externo. Concretamente, quando um utilizador tenta aceder a uma aplicação como o GLPI, é primeiro autenticado por um serviço de terceiros (neste caso, o Authentik). Assim que a identidade é verificada, as informações do utilizador (por exemplo, o seu nome de utilizador ou endereço de e-mail) são transmitidas à aplicação de destino através de um cabeçalho HTTP.

O GLPI não precisa, portanto, de gerir diretamente a palavra-passe do utilizador. Baseia-se nos dados fornecidos na solicitação HTTP para identificar a pessoa e conceder-lhe acesso. Este método é particularmente interessante para centralizar os acessos, simplificar a gestão de contas e reforçar a segurança, limitando os pontos de armazenamento de palavras-passe.

Em resumo, a autenticação HTTP funciona como uma ponte de confiança entre o serviço de autenticação (Authentik) e a aplicação final (GLPI).

Pré-requisitos

Para começar, é necessário ter o GLPI 11 instalado e o Authenik. O ideal é dispor de um proxy reverso no Nginx (caso contrário, será necessário adaptar o tutorial ao seu ambiente).

Os utilizadores devem estar configurados no GLPI.

Configuração do Authentik para a autenticação HTTP no GLPI

Para começar, vamos adicionar o provedor e a aplicação GLPI 11 no Authentik.

No menu «Aplicações», clique em «Provedor» 1 e, em seguida, clique em «Criar» 2.

Na lista de fornecedores, clique em «Fornecedor de proxy» 1 e, em seguida, no botão «Seguinte» 2.

Atribua um nome ao fornecedor 1, selecione o fluxo de autenticação 2, no tipo, selecione «Transferir a autenticação (aplicação única)» 3, introduza o URL do GLPI 4 e clique no botão «Concluir» 5.

O fornecedor foi criado.

No menu de navegação, desdobre «Aplicações», depois aceda a «Aplicações» 1 e, na página das Aplicações, clique no botão «Criar» 2.

Atribua um nome à aplicação 1 e introduza o slug 2, caso este não seja gerado automaticamente; no campo «Provedor», selecione o GLPI 3 que foi criado anteriormente e clique no botão «Criar» 4.

A aplicação está criada.

Publique o fornecedor GLPI no Avant-Post (Outpost) do Authentik: a partir do menu «Aplicações», clique em «Outposts» 1 e, em seguida, no botão de edição de «Authentik Embedded Outpost» 2.

Adicione a aplicação GLPI às aplicações selecionadas 1 e clique em «Atualizar» 2.

A configuração no Authentik está concluída.

Ativar e configurar a autenticação por pedido HTTP no GLPI 11

Vamos agora passar à configuração do GLPI 11

No menu, aceda a «Configuração» / «Autenticação» e clique em «Outros métodos de autenticação» 1.

Na página de configuração, teremos de adicionar a variável que foi passada para o Authentik; clique no botão + 1.

Introduza o nome da variável, que é: HTTP_X_AUTHENTIK_USERNAME 1 e, em seguida, clique em Adicionar 2.

Em seguida, no GLPI, selecione a variável que acabou de criar 1 no campo: «Campo de armazenamento do identificador na solicitação HTTP» e clique em «Guardar» 2.

Configuração do Nginx

Por fim, vamos passar à configuração do Nginx, que é o proxy inverso para o acesso ao GLPI e ao Authentik.

No seu proxy inverso, comece por guardar o virtualhost do GLPI:

sudo cp vh-glpi vh-glpi.BACKUP

Para nos ajudar a configurar o virtualhost, o Authentik fornece-nos a configuração a implementar; para tal, na lista de «Providers», clique naquele que se destina ao GLPI.

Nos detalhes do Provedor, na secção de configuração, aceda à secção Nginx (standalone) e poderá ver a configuração a aplicar no Nginx.

Utilize os elementos de configuração para os colar no virtualhost do GLPI, adaptando as diretivasproxy_passao seu ambiente, se necessário.

Para o ajudar, eis a configuração do meu virtualhost do 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;
}

Teste a configuração do Nginx:

sudo nginx -t

Atualize a configuração:

sudo systemctl reload nginx

Teste a autenticação com o Authentik

A partir de outro navegador (ou no modo privado), aceda ao URL do GLPI; deverá ser redirecionado para o formulário de autenticação do Authentik. Introduza o nome de utilizador e a palavra-passe de um utilizador existente no Authentik e que tenha sido configurado no GLPI.

Se tudo estiver correto, estou ligado ao GLPI e tenho acesso ao portal do utilizador.

Como complemento para o ajudar na configuração, eis a lista das variáveis $_SERVER do GLPI com o Authentik.

Conclusão

Graças à integração do Authentik com o GLPI através da autenticação por pedido HTTP, beneficia de uma solução simples e segura para centralizar a gestão de identidades. Este método permite delegar a autenticação a um serviço dedicado, garantindo simultaneamente uma experiência fluida para os utilizadores, que já não precisam de memorizar vários credenciais.

Ao implementar esta configuração, facilita a administração do seu ambiente, reforçando simultaneamente a segurança global. Esta abordagem é particularmente útil em infraestruturas onde várias aplicações têm de partilhar um mesmo sistema de autenticação.

Romain Drouche
Romain Drouche
Arquiteto de Sistemas | MCSE: Infraestrutura Essencial
Especialista em infraestruturas de TI com mais de 15 anos de experiência na área. Atualmente, como Gestor de Projetos de Sistemas e Redes e especialista em Segurança de Sistemas de Informação (SSI), utilizo a minha expertise para garantir a fiabilidade e a segurança dos ambientes tecnológicos.