Erro de incorporação

Hi Support team!
When I try embedding with the provided js snippet, it will stuck at “Loading Discussion” and I get the following error:
Invalid X-Frame-Options: “ALLOWALL” header from ...
How can I resolve this issue?
Thanks!

Isso pode estar atrasado, mas encontrei o mesmo problema e teria apreciado uma resposta aqui. Meu problema só apareceu ao usar o Firefox. O Chrome funcionou, sem problemas. Corrigi adicionando o site que incorpora o conteúdo à configuração “origens CORS”. Obtive a pista aqui.

Acabei de notar que nossos sites também estão enfrentando esse problema, mas apenas com novas postagens, não com postagens existentes que já tinham um tópico complementar criado para elas. O cabeçalho Invalid X-Frame-Options parece ser mais um aviso do Firefox do que um erro real, pois ele sempre aparece, mesmo quando a incorporação tem sucesso.

Um exemplo funcional (com um tópico existente quando a incorporação funcionava anteriormente):

Já esta página de destino:

acaba recebendo uma resposta de erro 400 (Bad Request) da nossa instância do Discourse.

Tenho vasculhado esses fóruns e a documentação para entender por que isso pode estar ocorrendo, mas ainda não encontrei nada. Pensei que pudesse estar relacionado à inclusão do nome de usuário do Discourse no payload de incorporação, mas isso também ocorre para conteúdo criado por usuários que estão devidamente sincronizados (por exemplo, Winter School on Agent-Based Modeling of Social-Ecological Systems).

Coisas que verifiquei:

  1. DISCOURSE_ENABLE_CORS: true está configurado
  2. Os hosts CORS estão corretos nas configurações do Discourse com https
  3. Os hosts permitidos estão configurados corretamente (além disso, a incorporação funciona para postagens do Discourse já criadas)

Há mais alguma coisa que eu deva considerar investigar? A única outra coisa que consigo pensar é que recentemente integramos nossos sites com o CloudFlare, então talvez haja alguma configuração do CloudFlare que precise ser feita para que tudo funcione corretamente. Ainda estou confuso sobre por que tópicos existentes funcionam corretamente…

Você deve tentar desativar o Cloudflare temporariamente e ver se isso ajuda. É fácil de fazer…

Boa sugestão. Testei em nosso ambiente de staging, mas, infelizmente, não resolveu o problema..

No Chrome, vejo erros como o seguinte:

Falha ao executar 'postMessage' em 'DOMWindow': A origem de destino fornecida ('https://test-discourse.comses.net') não corresponde à origem da janela de destino ('https://test.comses.net').

(de https://test.comses.net/codebases/f0613922-9cb1-4656-a26c-af57f823fb69/releases/3.2.0/)

Outras pessoas aqui pareceram resolver isso garantindo que o DiscourseEmbed.discourseEmbedUrl fosse o mesmo da URL de referência, mas verifiquei que ele ainda estava correto.. Procurei nos logs do Discourse (devo estar olhando para /var/discourse/shared/standalone/log/rails/production.log?), mas não vi nenhum erro lá também.. Alguma outra ideia de onde procurar para solucionar isso?

Um exemplo dos logs do Discourse:

Started GET "/embed/comments?embed_url=https%3A%2F%2Ftest.comses.net%2Fcodebases%2Ff0613922-9cb1-4656-a26c-af57f823fb69%2Freleases%2F3.2.0%2F" for 72.201.57.141 at 2020-08-05 05:15:40 +0000
Processing by EmbedController#comments as HTML
  Parameters: {"embed_url"=>"https://test.comses.net/codebases/f0613922-9cb1-4656-a26c-af57f823fb69/releases/3.2.0/"}
  Rendering embed/loading.html.erb within layouts/embed
  Rendered embed/loading.html.erb within layouts/embed (Duration: 0.4ms | Allocations: 134)
Completed 200 OK in 91ms (Views: 1.8ms | ActiveRecord: 0.0ms | Allocations: 16308)
Started GET "/service-worker-c8000968830b6f6bd33f1e842dffdd569664119d449f93dc7d428d963a71635d.js" for 72.201.57.141 at 2020-08-05 05:15:42 +0000
Processing by StaticController#service_worker_asset as */*
  Rendering text template
  Rendered text template (Duration: 0.0ms | Allocations: 1)
Completed 200 OK in 27ms (Views: 1.3ms | ActiveRecord: 0.0ms | Allocations: 6617)

Tenho o mesmo problema. Você pode ver isso ao vivo, por exemplo, em: Making sure you're not a bot!, onde, na parte inferior, há uma discussão incorporada de @mock/mock - Fedora Discussion. Note que o discussion.fedoraproject.org é uma instância paga fornecida como serviço pelo Discourse.

O que me intriga é que a discussão às vezes carrega e, às vezes, não. Consigo reproduzir o problema (quase sempre) no Modo Anônimo do Firefox (versão 80).

A ferramenta de desenvolvimento mostra:

Cabeçalho X-Frame-Options inválido encontrado ao carregar “https://discussion.fedoraproject.org/embed/comments?embed_url=https%3A%2F%2Fcopr.fedorainfracloud.org%2Fcoprs%2Fg%2Fmock%2Fmock%2F”: “ALLOWALL” não é uma diretiva válida.

De fato, a documentação X-Frame-Options header - HTTP | MDN não reconhece ALLOWALL como um valor válido.

Parece que o tópico ao qual você vinculou em https://discussion.fedoraproject.org/t/mock-mock/3107 está em uma categoria protegida — não consigo acessá-lo como usuário anônimo. Desde que seu fórum Discourse e seu site compartilhem o mesmo domínio raiz, eu esperaria que os comentários incorporados carregassem para usuários logados no fórum, mas falhassem ao carregar para usuários que não estão logados. Isso parece corresponder ao que você está observando?

Eu esperaria que comentários incorporados carregassem para usuários logados no fórum, mas falhassem em carregar para usuários que não estão logados. Isso parece corresponder ao que você está observando?

De fato, parece ser esse o caso. Consigo reproduzir esse comportamento tanto no Google Chrome quanto no Firefox. No entanto, a discussão não carrega no modo anônimo de nenhum desses navegadores; não sei se isso significa algo. Mas acho que ainda nos aponta para atualizar a categoria, para que possa ser vista por todos.

Obrigado. Após editar a categoria e, na aba de Segurança, adicionar que “todos” podem “criar/responder/ver”, a incorporação voltou a funcionar.

Então, após a última atualização do Discourse, todas as páginas incorporadas agora relatam um erro :sweat_smile:

Uma mensagem de erro típica que vemos agora é algo assim, que parece indicar que o navegador está fazendo alguma remoção de referer e fazendo com que o código de incorporação do Discourse falhe em suas verificações de validação:

Referer: `https://www.comses.net/`

O referer não foi enviado ou não correspondeu a nenhum dos seguintes hosts:

* www.comses.net/codebases/.* 

Página de exemplo: Artificial Anasazi

No Chrome, mesmo com o Privacy Badger e todas as outras extensões desativadas, a mensagem de erro de referer sempre parece aparecer e provavelmente se deve a A new default Referrer-Policy for Chrome - strict-origin-when-cross-origin  |  Blog  |  Chrome for Developers ATUALIZAÇÃO: isso agora funciona para tópicos existentes após adicionar uma política de referer explícita ao site de origem (por exemplo, https://www.comses.net), então para o haproxy algo como: http-response set-header Referrer-Policy "no-referrer-when-downgrade"

No Firefox e no Chrome, páginas com tópicos existentes funcionam, mas páginas que tentam criar um novo tópico falham como esta: The Bronze Age Collapse model (BACO model).

Mudei nossa configuração do haproxy para definir cabeçalhos de resposta para Content-Security-Policy frame-ancestors, e isso corrigiu um erro de X-Frame-Options ALLOWALL não reconhecido inválido no Firefox, mas agora a solicitação expira e eventualmente resulta em um erro 400 Bad Request do nosso fórum Discourse..

O erro parece estar relacionado ao postMessage:

Falha ao executar 'postMessage' no 'DOMWindow': A origem de destino fornecida ('https://forum.comses.net') não corresponde à origem da janela receptora ('https://www.comses.net').

Terei mais tempo para fazer uma análise mais aprofundada no final deste mês, quando terei um pouco mais de tempo livre, mas quis despejar minhas ideias enquanto ainda está semi-fresco — espero que alguém mais descubra uma solução alternativa no meio do caminho! :grin:

Acontece o mesmo comigo. Espero que alguém aqui possa ajudar um pouco com esse erro. No meu caso, tenho um blog de testes e um blog oficial… ambos feitos com Webflow… no blog de testes tudo funciona bem, mas esse erro aparece no blog ao vivo…

### Erro ao incorporar


Referenciador: `https://www.pynk.io/blog/what-to-invest-in-look-around-you`

O referenciador não foi enviado ou não corresponde a nenhum dos seguintes hosts:

[espaço em branco aqui]

Desculpe pela resposta tardia. Você pode tentar adicionar discourseReferrerPolicy: 'no-referrer-when-downgrade' ao objeto DiscourseEmbed definido no trecho de código de incorporação? Há um exemplo completo de um trecho de código que adiciona essa propriedade aqui: Embed Discourse comments on another website via Javascript - #353.

Se você tentar isso, por favor, nos informe se resolveu o problema para você.

Acho que isso foi resolvido aqui: Embed Discourse comments on another website via Javascript - #365. Nesse caso, o problema era um subdomínio www ausente no registro do host incorporável do Discourse.

Edição: esse problema agora foi corrigido no código principal do Discourse. Não há mais necessidade de definir a variável discourseReferrerPolicy como 'no-referrer-when-downgrade'. O Discourse agora define a política de referrer como 'no-referrer-when-downgrade' por padrão. Para mais detalhes sobre isso, veja https://meta.discourse.org/t/embedding-discourse-comments-via-javascript/31963#setting-the-referrer-policy.

Adicionar o discourseReferrerPolicy resolveu o problema - obrigado, @simon !! :100:

Isso pode estar causando problemas com o SSO. Tenho um current.discourse.example que está usando o sso.discourse.example como host SSO. Quando você está logado, a lista de tópicos é exibida corretamente. Mas quando você está anônimo, eles não são exibidos e mostram o erro acima. A URL /embed/topics?... mostra uma página em branco.

Acho — ou espero — que isso deva ser corrigido com:

Content-Security-Policy: frame-ancestors https://current.discourse.example https://sso.discourse.example;