Página em branco do Keycloak atrás do proxy reverso nginx

Página em branco do Keycloak atrás do proxy reverso nginx

Depois de descompactar e iniciar o keycloak para escutar em 127.0.0.1, configurei o nginx para funcionar como um proxy reverso acessível a partir de um domínio disponível publicamente via https.

Esta é a configuração do nginx:

http
{
    server_tokens off;

    upstream keycloak { ip_hash; server 127.0.0.1:8080; }

    server
    {   
        server_name name.domain.tld;
        listen 443 ssl http2; # managed by Certbot
        ssl_certificate /path/to/cert; # managed by Certbot
        ssl_certificate_key /path/to/key; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

        location /
        {   
            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-Proto $scheme;
            add_header Access-Control-Allow-Origin *;
            proxy_pass http://keycloak;
        }
    }


    server
    {   
        server_name name.domain.tld;
        listen 80;
        location / { return 301 https://$server_name; }
    }

}

Nada foi alterado em nenhum arquivo dentro do diretório keycloak.

O Keycloak é acessível, no entanto, ao navegar para a página de login, encontro uma página em branco devido a um javascript de conteúdo misto do arquivo /auth/js/keycloak.js?version=df45z.

Isso pode ser resolvido temporariamente desativando a proteção do navegador contra conteúdo misto; no entanto, isso me levará a uma página de login disfuncional, exibindo esta mensagem de erro: We are sorry... Invalid parameter: redirect_uri.

Além disso, um HTTP 400 foi retornado do /auth/realms/master/protocol/openid-connect/auth?client_id=security-admin-console&redirect_uri=https%3A%2F%2Fname.domain.tld%2Fauth%2Fadmin%2Fmaster%2Fconsole%2F&state=5abb646f-d1c8-49ef-8ae1-9358bfc50d6d&response_mode=fragment&response_type=code&scope=openid&nonce=525b593c-07ab-4afa-8ca0-bd64499061eb.

(Esperando que sua origem tenha algum valor)

Perguntas anteriores relacionadas a esse problema apenas sugeriram adicionar as diretivas proxy_set_header, o que evitou uma tela em branco do painel inicial que você vê ao acessar a página do keycloaks, mas não ajudou no último problema mencionado.

Por favor, leve em consideração que sou muito novo neste assunto, caso tenha perdido algo trivial.

Qualquer conselho para corrigir esse comportamento é muito apreciado.

Responder1

Sua configuração do Nginx parece boa. Recentemente tive o mesmo problema que você e tinha mais ou menos a mesma configuração do Nginx.

A única coisa que ainda precisava fazer era atualizar o arquivo de configuração independente na pasta KeyCloak. Você pode encontrar esse arquivo em keycloak_folder/standalone/configuration/standalone.xml.

Aqui você deverá procurar o seguinte (+- linha 572):

<server name="default-server">
    <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" />
    ...
</server>

E adicione proxy-address-forwarding=trueassim:

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

Isso garantirá que seu servidor KeyCloak JBoss interno esteja ciente do endereço proxy.

Responder2

Keycloak aceita PROXY_ADDRESS_FORWARDINGenv que é colocado nostandalone.xml

<http-listener name="default" socket-binding="http" redirect-socket="https" proxy-address-forwarding="${env.PROXY_ADDRESS_FORWARDING:false}" enable-http2="true"/>

forneça ao docker com a seção PROXY_ADDRESS_FORWARDINGdocker -e ou docker-composeenvironment

Responder3

Adicional ao que Thorchy escreveu:

Eu tinha http_auth habilitado no nginx. Perdi reiniciar o nginx depois de removê-lo da configuração.

Desativar o http_auth reiniciando o nginx finalmente resolveu o problema.

Responder4

Finalmente resolvi o problema.

A maioria das respostas no Google é definida PROXY_ADDRESS_FORWARDINGcomo verdadeira. Mas não funciona no meu ambiente.

Finalmente vi esta resposta:https://github.com/codecentric/helm-charts/issues/271#issuecomment-920600882

Depois de definir KEYCLOAK_FRONTEND_URL, agora funciona

Adicione a variável de ambiente abaixo.

KEYCLOAK_FRONTEND_URL=https://{{ URL }}/auth

informação relacionada