
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=true
assim:
<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_FORWARDING
env 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_FORWARDING
docker -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_FORWARDING
como 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