Falha na ativação do Discourse ID na minha instância

O proxy_set_header X-Forwarded-Proto https; simples funcionaria?

A solicitação http/s vem do contêiner para o servidor IDP para Discourse ID na internet. Não há instância entre onde eu poderia adicionar/alterar quaisquer cabeçalhos de solicitação.

IMHO e assumindo que “Discourse ID” é apenas OAuth padrão, a maneira correta seria ou
a) uma opção de configuração para o Discourse ID onde eu poderia adicionar um endpoint de configuração “well-known” que tenha todos os valores de configuração OIDC necessários, incluindo o prefixo “https://…”.
b) o mesmo, mas já codificado no código

Ainda estou quebrando a cabeça com os detalhes técnicos do Discourse ID …

Você pode consultar os detalhes do Discourse ID em nosso código, o protocolo que usamos está todo em nosso repositório Github. A única diferença em relação a outras implementações OAuth é que registramos uma instância automaticamente. E durante esse registro automático, garantimos que a instância que solicita o registro é quem diz ser e está em https (nos dias de hoje, nenhuma instância do Discourse deve estar em http://).

Os erros http que compartilhei acima me dizem que seu site não está configurado corretamente.

Você pode verificar a saída do seguinte via console:

Discourse.base_url

SiteSetting.force_https

Se você obtiver uma URL http:// do primeiro comando e false do segundo, talvez você queira definir SiteSetting.force_https = true e ver se isso resolve. (No entanto, isso também pode quebrar coisas se a configuração estiver incorreta em outros lugares. Cuidado.)

1 curtida

Olá Penar,
talvez precisemos esclarecer os detalhes da minha configuração primeiro. Ela é um pouco diferente em comparação com a implantação padrão.

  • balanceador de carga central (https://www.haproxy.org/) atuando como acelerador SSL para alguns serviços web diferentes (não apenas para o Discourse). O acesso da Internet a qualquer um desses serviços só é permitido via https. A mudança de http para https é feita no próprio balanceador de carga, veja Redirect HTTP to HTTPS in a Few Easy Steps with HAProxy como referência)
  • o haproxy encaminha as requisições front-end para o backend em uma rede privada (10.x.x.x) sem criptografia. Esse tráfego termina em um nginx local no host do docker.
  • o nginx encaminha as requisições para o socket http do contêiner web_only com proxy_pass ``http://unix``:/mnt/data/discourse/shared/web-only/nginx.http.sock
    (Estou usando uma configuração de dois contêineres com web_only.yml e data.yml). Veja templates/web.socketed.template.yml como referência

Eu não preciso de SiteSetting.force_https, pois toda a criptografia https é feita fora do contêiner do Discourse. Eu já uso OAuth com base no plugin Discourse OpenID Connect (OIDC) e com meu próprio IDP. O plugin Discourse OIDC contém uma configuração para o “well-known” OpenID Connect discovery document. No meu caso: https://login.netzwissen.de/realms/netzwissen/.well-known/openid-configuration

Se o Discourse ID implementasse algo semelhante para o link entre a instância do contêiner Discourse e o IDP do Discourse ID, não haveria problemas. Como o “Discourse ID” usa um IDP fixo, tal “URL well-known” poderia até ser codificada, incluindo o prefixo https.

Thomas, desculpe, não posso realmente ajudá-lo com sua configuração específica. Tudo o que posso dizer é que algo em sua instância está incorreto.

Bem, o console JS em seu site não acha que a criptografia https fora do contêiner está cobrindo tudo. Esses avisos JS que compartilhei acima são sintomas de um problema semelhante que você está tendo com o ID, o próprio Discourse em sua configuração pensa que está rodando em http e isso é um problema, pois ele gerará URLs em http em alguns casos.

2 curtidas

Peço imensas desculpas:

Comparei as configurações em nossa instância produtiva (PROD) com as da instância DEV. Apenas a instância DEV tinha a configuração force_https desativada. E isso só funcionou porque temos o acelerador SSL haproxy na frente dela.

Agora ativei a configuração SiteSetting.force_http na instância DEV e o Discourse ID funciona bem. Assim, também implantarei o Discourse ID em nossa instância PROD (forum.netzwissen.de).

Desculpe pela confusão.

3 curtidas

Sem problemas, fico feliz que tenha sido resolvido. Obrigado por acompanhar!

2 curtidas