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

Sumário

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

Architecte Système | MCSE: Core Infrastructure

Expert en infrastructures IT avec plus de 15 ans d'expérience sur le terrain. Actuellement Chef de projet Systèmes et Réseaux et Référent SSI (Sécurité des Systèmes d'Information), je mets mon expertise au service de la fiabilité et de la sécurité des environnements technologiques.

GHinM▶