Impossível determinar problemas de Passkey por trás do Proxy Cloudflare

ATUALIZAÇÃO: Resolvido!

Para resolver o problema, consegui ativar o force_https, o que resolveu tudo para nós. Acontece que as passkeys estavam tentando rotear para http://, mas esse tráfego misto não estava sendo sinalizado pelo navegador. Acontece que o CloudFlare não era o problema direto. Espero que isso possa ajudar alguém no futuro.

Post Original:

O Problema

Olá! Recentemente, coloquei minha instância do Discourse atrás de um túnel do Cloudflare, e parece que tudo está funcionando bem, com exceção das passkeys. Tanto o registro de passkeys existentes quanto o de novas falham, mas não acho que os logs deixam muito claro o PORQUÊ de falhar. Espero que alguém aqui possa me ajudar a encontrar o restante das informações de solução de problemas que preciso para resolver isso:

Informações Relevantes

Sobre a minha configuração

  • Usando Discourse Docker para implantar o Discourse.
  • Postgres e Redis são implantados externamente.
  • Implantado no Ubuntu em uma instância AWS EC2.
  • Como afirmado anteriormente, o túnel do Cloudflare está fornecendo TLS e atuando como um proxy.

O que tentei

  • Verifiquei minha configuração para garantir que o Discourse esteja esperando o nome de host dos meus fóruns (forums.example.com)
  • O Discourse foi configurado para a porta 80 HTTP, pois o Cloudflare está lidando com TLS
  • Quando o HTTP não teve sucesso, tentei forçar o Discourse apenas para SSL, fornecendo um certificado autoassinado e redirecionando o Cloudflare para o Discourse na porta 443 usando o protocolo HTTPS.
  • Certifiquei-me de que o Cloudflare está passando forums.example.com para o meu site. Eu sei que está, pois qualquer outro cabeçalho de host faz com que o NGINX do Discourse retorne 404.

Logs Relevantes

  • Esta parte é um pouco complicada. O Discourse não está fornecendo nada do lado do servidor (que eu tenha visto) e, quer eu use Bitwarden, iCloud Keychain, Chrome ou Firefox, o resultado é o mesmo.
  • Os logs para a própria passkey são quase inexistentes.
  • A parte mais útil que encontrei foi do console de ferramentas de desenvolvedor do Firefox / Chrome ao tentar criar uma nova passkey. O seguinte é retornado:
{
  "errors": [
    "The origin of the authentication request does not match the server origin."
  ]
}

Esta é uma indicação bastante clara de que há algo errado acontecendo entre o cliente e o discourse (também conhecido como o proxy), mas esses logs não indicam quais informações estão sendo passadas para frente e para trás para solucionar isso ainda mais.

Alguém pode me ajudar a descobrir outras configurações ou locais de log para verificar, ou tem alguma outra recomendação para solução de problemas? Acho improvável, mas suponho que um erro na configuração do Nginx também possa ser um fator. Eu essencialmente tenho um proxy duplo entre o cliente e o Discourse com CloudFlare e Nginx rodando. Devo reconsiderar alguma parte dessa configuração?

Em termos de prioridade, certamente é bom ter resolvido, mas como tenho apenas cerca de 8 usuários de alguns milhares usando passkeys (com outros métodos de login funcionando perfeitamente), não estou me estressando muito com isso.

2 curtidas