Navegador impede que Discourse seja renderizado em iframe apesar da configuração adequada (`X-Frame-Options: SAMEORIGIN`)

Olá a todos,

Temos uma instância do Discourse incorporada em um iframe dentro de nosso aplicativo, e isso funciona bem como tal. No entanto, quando um usuário não autenticado tenta acessar uma página à qual não tem acesso (que não existe ou é restrita a um grupo), a resposta agora inclui misteriosamente X-Frame-Options: SAMEORIGIN e os navegadores bloqueiam a renderização do frame.

Verifiquei em diferentes versões, começando com a 3.3.1 estável até quase a versão mais recente (último teste em meados da semana passada).

Ele está rodando em um subdomínio diferente do aplicativo principal e configurado para incorporação com allow_embedding_site_in_an_iframe: true e, ao depurar uma instância limpa, notei que, nesse caso, o método conditionally_allow_site_embedding em ApplicationController não é chamado, deixando assim o cabeçalho na resposta (link do GH), e rastreei isso até o lançamento de uma exceção em algum ponto, quebrando assim o fluxo.

Reprodução:

  1. Execute uma instância limpa do Discourse (ou qualquer instância, na verdade – isso aconteceu em ambientes locais, de teste e de produção) e configure-a com allow_embedding_site_in_an_iframe: true.
  2. Incorpore-o em um iframe em um site servido via HTTPS usando um caminho inexistente para acionar um erro 404.

Esperado: O navegador permite que o Discourse seja renderizado.
Real: O navegador impede que o Discourse seja renderizado devido à presença de X-Frame-Options: SAMEORIGIN na resposta.

Observação: Ele está rodando através de um Cloudflare apenas com DNS e tentamos excluir o cabeçalho no modo proxy, no entanto, não podemos colocá-lo no modo proxy devido ao CF filtrar cookies que são necessários para nossa implementação personalizada de SSO, então esta é uma opção inviável para nós no momento.