안녕하세요,
우리는 애플리케이션 내에서 iframe에 Discourse 인스턴스를 임베드하고 있으며, 현재로서는 정상적으로 작동하고 있습니다. 그러나 인증되지 않은 사용자가 접근할 권한이 없는 페이지(존재하지 않거나 그룹 제한이 적용된 페이지)에 접근을 시도하면, 응답에 갑자기 X-Frame-Options: SAMEORIGIN 헤더가 포함되어 브라우저가 프레임 렌더링을 차단하는 문제가 발생합니다.
3.3.1 stable 버전부터 최근 bleeding edge(지난주 중반까지 테스트)까지 다양한 버전에서 확인해 보았습니다.
이 인스턴스는 부모 애플리케이션과 다른 서브도메인으로 실행되며, allow_embedding_site_in_an_iframe: true 설정으로 임베딩이 구성되어 있습니다. 클린 인스턴스를 디버깅해 보니, 이러한 경우 ApplicationController의 conditionally_allow_site_embedding 메서드가 호출되지 않아 응답에 헤더가 그대로 남아 있는 것을 확인했습니다(GH 링크). 이는 어떤 지점에서 예외가 발생하여 플로우가 중단되기 때문인 것으로 파악되었습니다.
재현 방법:
- 클린 Discourse 인스턴스(또는 실제로는 어떤 인스턴스든 – 로컬, 테스트, 프로덕션 환경 모두에서 발생함)를 실행하고
allow_embedding_site_in_an_iframe: true로 설정합니다. - HTTPS로 서빙되는 웹사이트에서 존재하지 않는 경로를 사용하여 404 오류를 트리거하도록 iframe에 임베드합니다.
기대 결과: 브라우저가 Discourse 렌더링을 허용합니다.
실제 결과: 응답에 X-Frame-Options: SAMEORIGIN이 포함되어 있어 브라우저가 Discourse 렌더링을 방지합니다.
부연 설명: 이 시스템은 DNS-only Cloudflare를 통해 실행되고 있으며, 프록시 모드에서 헤더를 삭제하는 것을 시도해 보았습니다. 그러나 커스텀 SSO 구현에 필요한 쿠키가 Cloudflare에 의해 필터링되므로 프록시 모드로 전환할 수 없어, 현재로서는 이 방법이 우리에게 불가능합니다.