Google 인증 오류

안녕하세요,

저는 디스코urses(Discourse) 초보입니다. 최근에 포럼을 생성했고, 현재 사이트와 포럼을 새로운 도메인 이름으로 이전하는 과정에 있습니다.

포럼의 기존 도메인: https://forum.skymail.app (비활성 상태, 새 사이트로 리다이렉트됨)

새 도메인: https://forum.sugarmail.app (정상 작동 중)

구글 인증(Google auth) 관련 문제를 겪고 있습니다. Google Cloud 프로젝트를 보유하고 있으며, 새 도메인으로 전환한 후 해당 프로젝트의 Client ID 아래 리다이렉트 URL도 변경했습니다. 현재 설정된 URL은 다음과 같습니다.

https://forum.sugarmail.app/auth/google_oauth2/callback

문제는 다음과 같습니다. "Google으로 가입"을 시도할 때 Discourse에서 다음과 같은 오류가 발생합니다:

https://forum.sugarmail.app/auth/failure?message=csrf_detected Authorization timed out, or you have switched browsers. Please try again.

포럼이 기존 도메인 forum.skymail.app을 사용하던 당시에는 구글 인증이 문제없이 작동했습니다.

도메인을 변경한 후 ./launcher rebuild app을 실행했으며, app.yaml의 DISCOURSE_HOSTNAME 항목에서 도메인을 업데이트하는 것을 잊지 않았습니다. (사실 이 작업을 수행하기 전까지는 포럼이 전혀 로드되지 않았습니다.)

어떤 점을 확인해 봐야 할까요? 조언 부탁드립니다.

일반적으로 로그인 플로우를 시작하면 브라우저에 _forum_session 쿠키가 설정됩니다. 그러나 귀하의 사이트에서는 그런 일이 일어나지 않는 것으로 보입니다.

귀하의 사이트에서 쿠키에 간섭을 일으킬 수 있는 플러그인이나 프록시가 있나요?

답변 주셔서 감사합니다.

플러그인 - 아니요, 사용하지 않고 있습니다. 설치 후 한 유일한 작업은 Google 인증(클라이언트 ID 및 시크릿)을 활성화하고 "항상 https 사용"을 켜는 것이었습니다.

프록시 - nginx를 리버스 프록시로 사용하고 있습니다(이 프록시가 메인 앱 사이트도 서빙합니다).

    # discourse
    location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass_request_headers on;
            proxy_pass http://localhost:10080;
    }

그리고 containers/app.yaml 파일에는 다음과 같이 설정되어 있습니다.

expose:
  - "10080:80"   # http
  - "10443:443" # https

Discourse 설정에서 Let’s Encrypt는 활성화되어 있지 않습니다. 따라서 컨테이너 내부의 nginx는 평문 http를 서빙하고, 외부 nginx가 SSL 종단(termination)을 처리합니다.

이 설정은 이전 도메인을 사용했을 때와 거의 동일하며, 유일한 차이점은 “https 강제(force https)” 설정입니다.

현재 2.6.0.beta3 버전을 실행 중입니다.

아, 실망이네요. 이전에 꺼져 있던 “force https” 때문이었어요.

최근에 Chrome에서 “안전하지 않은 페이지 콘텐츠” 경고가 뜨는 것을 피하려고 활성화했는데, 그 경고는 이미지에 대한 일반 http 링크 때문에 발생하고 있었거든요.

다시 한번 말씀드리면, 저는 “외부” nginx에서 SSL 종단(termination)을 처리하고 있고, Discourse 자체에는 SSL이 설정되어 있지 않습니다.

"force https"를 끄면 Google 인증이 다시 작동합니다(구글 클라우드 프로젝트에 일반 http 리디렉션 URL을 추가해야 했어요).

하지만 이미지가 있는 순간 “안전하지 않은 사이트” / 혼합 콘텐츠 경고가 뜨게 되므로 이 방법은 좋지 않아요.

"force https"를 켜둔 상태에서 Google 인증이 작동하고, SSL 종단을 Discourse 외부에서 처리하는 방법이 있을까요?

(Discourse 자체의 SSL 지원을 사용하려고 해도 도메인을 "소유"한다고 가정하기 때문에, 이 VPS에 추가 IP 주소를 설정하고 메인 사이트와 포럼을 분리해야 합니다… 꽤 번거로운 작업이죠… )

X-Forwarded-Proto: https 헤더를 함께 보내는지 확인하세요.

@riking 감사합니다. 링크에서 nginx 블록을 그대로 복사해서 적용했고, Discourse 관리 콘솔의 권장 사항에 따라 "force https"도 활성화했습니다.

현재 포럼은 정상적으로 다시 작동 중이며, Google 인증도 잘 동작합니다.

하지만 여전히 문제가 남아 있습니다:

Chrome과 Firefox 모두 보안이 되지 않는 페이지 콘텐츠에 대한 경고를 표시하고 있습니다.

Chrome 개발자 도구의 네트워크 트레이스를 살펴보니, 이 링크(일반 http, https가 아님)가 원인이었습니다:

아, 괜찮습니다. 새 사용자 지정 favicon을 설정했는데, 이제 https로 가져와지고 있습니다. 더 이상 “혼합 콘텐츠” 경고가 뜨지 않습니다.

정말 멋지네요, 도움 주셔서 감사합니다!