부엉이 개발자 사이트 제작 막바지..
Local 에서는 100% 완벽하게 동작하던 녀석이었지만.. Nginx 프록시를 태우면서, 아키텍처 구상부터 6개월 가까이 진행해 왔던 프로젝트에 3일 가까이 나를 붙잡고,,,, 피폐하게 만들었던 녀석에 대해서 해결 방법 과정을 공유하려 합니다.
'부엉이 개발자' 사이트는 프론트, 백엔드 서버를 활용한 시스템으로 비록 서버는 단일 RaspberryPi4 에서 돌아가지만
도메인은 각각 다르게 가져가도록 구성한 시스템입니다. localhost 도메인을 사용하던 개발서버에서는 이슈가 없었지만
각 서버간, 다른 도메인을 사용하는 시스템에서 어떻게 Cookie 를 서로 공유하는 지에 대한 글 입니다.
Front - Next.js ( www.owl-dev.me)
Backend - .Net Core ( backend.owl-dev.me)
|
API 를 통해 Front -> Backend 로 Login 요청을 보내면 Backend 에서 Secure Cookie를 생성 후, 다시 Front 서버로
보내주지만, 받아온 쿠키의 Domain Name 이 Client 쪽 브라우저의 도메인과 동일 하지 않아서, Next.js 의 SSR 시에
해당 쿠키를 저장하거나 가져오지를 못하는 이슈가 발생 했습니다.
(* 해당 쿠키의 도메인을 브라우저에서 강제로 변경하면 정상동작 확인.)
1. Nginx 가이드 삽질
처음에 쿠키 관련 이슈가, 받아온Cookie 의 domain 이 달라서 발생한 것임을 알기까지도 시간이 많이 소요되었으나,
해당 이슈를 해결하기 위해 거의 Nginx 의 모든 Stackoverflow 글 및 Nginx 가이드 문서를 찾아본 것으로 기억됩니다.
이중 Nginx 의 proxy_cookie_domain 이 녀석을 건드리면 proxy_pass 하는 과정에서 쿠키의 도메인을 변경할 수 있었을 것으로 기대했었지만....
아래 여러 삽질 및 구글링 에서도 아무런 변화가 없었습니다. ( 이떄부터 정신이 피폐해짐이 느껴짐..)
2.Community 문의
결국 직접 Stackoverflow 형님들의 도움을 받고자 글을 올리게 되었고, 코멘트에서 영양가 있는 내용을 확인하게 되었습니다.
https://stackoverflow.com/questions/72087524/nginx-proxy-cookie-header-not-working-domain-sub-domain |
3. Domain 에 대한 고찰
기존에 내가 알던 지식은, 도메인은 단순히 네임서버에서 IP 를 매핑해 주는 것으로 간혹 HTTPS 통신할 때 필요한 것으로 알았지만,
1개의 도메인으로 여러 서브 도메인 생성할 수 있었고,,, 여러 다른 문의 글에서 서브 도메인 간의 쿠키 전송에 대한 문의가 있었던 것을 확인했습니다.
사실 삼성 반도체 쪽 여러 시스템도 SSO 로그인 인증을 위해 여러 서브 도메인을 활용하고 있었고,,, 내가 일하는 시스템도 직접
AD(Active Directory) 전환 및 HTTPS 전환까지 도맡아 한 상황에서, 이런 글을 보니 뭔가 머릿속을 스쳐 지나가는 느낌이 들었고..!!!!!
이건 Nginx 가 아니라 Backend 를 조져야해!!!!
Microsoft 에서 제공해주는 MSDN 문서를 보면 아래와 같이 asp.net 앱간의 인증 쿠키 공유에 대한 글이 있습니다
간략하게 요약하면, 메인 도메인과 서브 도메인 간에는 기본적으로 쿠키 공유가 가능하다는 의미였고...
아래 이미지와 같이 메인 도메인이 contoso.com 이라면 앞에 '.' 붙여줌으로서 서브도메인 간에 쿠키 공유가 가능하다는 얘기입니다.
https://docs.microsoft.com/en-us/aspnet/core/security/cookie-sharing?view=aspnetcore-6.0 |
Starup.cs 인증 부분 options.Cookie.Domain 추가
|
[정상적으로 동작하는 Cookie].