Не удалось определить проблемы с Passkey за прокси Cloudflare

ОБНОВЛЕНИЕ: Решено!

Чтобы устранить проблему, я смог включить force_https, что полностью решило вопрос. Оказалось, что passkeys пытались маршрутизироваться через http://, но такой смешанный трафик не отслеживался браузером. Как выяснилось, Cloudflare вообще не был причиной проблемы. Надеюсь, это поможет кому-то ещё в будущем.

Оригинальный пост:

Проблема

Привет! Недавно я перенёс свой экземпляр Discourse за туннель Cloudflare, и, похоже, всё работает хорошо, за исключением passkeys. И существующая, и новая регистрация passkeys не удаются, но мне кажется, что логи не дают чёткого понимания, ПОЧЕМУ это происходит. Надеюсь, кто-то здесь сможет помочь мне найти остальную информацию для устранения неполадок, необходимую для решения этой проблемы:

Соответствующая информация

О моей конфигурации

  • Использую Discourse Docker для развёртывания Discourse.
  • Postgres и Redis развёрнуты внешним образом.
  • Развёрнуто на Ubuntu на экземпляре AWS EC2.
  • Как уже упоминалось, туннель Cloudflare обеспечивает TLS и выступает в роли прокси.

Что я пробовал

  • Проверил свою конфигурацию, чтобы убедиться, что Discourse ожидает имя хоста моего форума (forums.example.com).
  • Discourse настроен на порт 80 HTTP, так как Cloudflare обрабатывает TLS.
  • Когда HTTP не сработал, я попытался принудительно заставить Discourse использовать только SSL, предоставив самоподписанный сертификат и перенаправив Cloudflare на Discourse через порт 443 с использованием протокола HTTPS.
  • Убедился, что Cloudflare передаёт forums.example.com на мой сайт. Я знаю это, так как любой другой заголовок хоста приводит к ошибке 404 в NGINX Discourse.

Соответствующие логи

  • Этот момент немного сложен. Discourse не предоставляет ничего на стороне сервера (насколько я видел), и независимо от того, использую ли я Bitwarden, iCloud Keychain, Chrome или Firefox, результат одинаков.
  • Логи самого passkeys практически отсутствуют.
  • Наиболее полезная часть, которую я нашёл, была из консоли разработчика Firefox/Chrome при попытке создать новый passkey. Возвращается следующее:
{
  "errors": [
    "The origin of the authentication request does not match the server origin."
  ]
}

Это довольно явное указание на то, что что-то идёт не так между клиентом и Discourse (то есть прокси), но эти логи не указывают, какая информация передаётся туда и обратно для дальнейшего устранения неполадок.

Может ли кто-то помочь мне понять, какие ещё настройки или локи нужно проверить, или предложить другие рекомендации по устранению неполадок? Я считаю это маловероятным, но предположу, что ошибка в конфигурации Nginx также могла стать фактором. У меня фактически двойной прокси между клиентом и Discourse, где работают и CloudFlare, и Nginx. Стоит ли мне пересмотреть какую-либо часть этой конфигурации?

Что касается приоритета, то, конечно, было бы хорошо исправить это, но так как у меня всего около 8 пользователей из нескольких тысяч используют passkeys (при этом другие методы входа работают отлично), я не слишком сильно переживаю по этому поводу.

2 лайка