Asp.net core 한 서버에서 여러 사이트를 운영할 경우 인증은 어떻게 하나요?

안녕하세요.

오랜만에 Asp.net Core를 이용해서 코딩을 해 보고 있습니다.
아직 유저가 많지 않은 몇개의 Site를 한개의 linux 서버에서 운영 할려구 합니다.

아직 Asp.net core가 낮설어서 인터넷을 뒤지다 보니 ClaimsIdentity 를 이용한 인증이 나오길래
이 방식을 사용해서 코딩을 했습니다.

< 로그인 >
ClaimsIdentity identity = null;

                HttpContext.Session.SetString("username", userLogin.UserId);

                identity = new ClaimsIdentity(new[] {
                    new Claim(ClaimTypes.Name, userLogin.UserId),
                    new Claim(ClaimTypes.Role, "User")
                }, CookieAuthenticationDefaults.AuthenticationScheme);

                var principal = new ClaimsPrincipal(identity);
                var login = HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);

                return RedirectToAction("Index", "Home");

<로그아웃>
HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
return RedirectToAction(“Login”);

문제는 로그인시 ( ClaimsIdentity identity = null; ) 이 부분을 지날때 와 로그아웃을 할때 로그인된 모든 사이트가 로그아웃이 되더군요. 이걸 개별 사이트가 영향을 안 받게 하나의 사이트에서만 로그인/로그아웃이 되게 하려면 어떻게 해야 될까요?

1개의 좋아요

서버보다는 서버-클라이언트 모두 아우르는 state management에 대한 이해가 필요하신 것 같습니다.

애매한 표현이 있어 상황을 풀어서 설명을 드리겠습니다.

1. A사이트(A.example.com)에서 로그아웃 하였을 때 B사이트(B.example.com)에는 영향이 가지 않게 해주세요.

A사이트에서 로그인 했을 때 B사이트도 로그인 되어있어야 하고, A사이트에서 로그아웃 하였을 때 B사이트에서 로그아웃 되어있지 않아야 한다…라는 상황은 아닌것 같아 A사이트와 B사이트의 세션을 다르게 관리하려고 한다라는 상황을 가정하겠습니다.

세션은 클라이언트에서는 HTTP 쿠키로 관리된다 라고 나와 있고, 서버에서 HTTP 쿠키를 보낼때 세부 도메인을 설정할 수 있는 것으로 알고 있습니다. 이것을 통해 세션을 따로 관리할 수 있을 것으로 보입니다.

2. A 브라우저 탭에서 로그아웃 하였을 때 B 브라우저 탭에는 영향이 가지 않게 해주세요.

이 경우에는 브라우저 탭 간 상태를 격리하여야 하는데, HTTP 쿠키는 탭 간 공유가 되므로 브라우저측에서 쓸 수 있는 Web Storage 중에도 sessionStorage를 통해 관리를 해야합니다. 이 경우에는 SPA를 따로 구축해야 할 수도 있겠네요.

4개의 좋아요

앗 감사합니다.
너무 오랜 만에 개인 PC에 개발 환경 잡아서 하다 보니 개념이 헷갈렸네요.
개인 PC에 여러 사이트 오픈해 놓고 개발하다 보니 생긴 문제였네요.

서버 배포하면 아무 이상이 없네요. ㅠ.ㅠ
님 설명 보다가 아 이건 하고 떠올라서 부랴부랴…서버 테스트를 진행 했습니다.
감사합니다.

2개의 좋아요