LogoutRedirectController 구현하기
이 문서는 클라이언트(JavaScript 등)에서 호출하여 사용자의 인증 세션을 종료하고
returnUrl 정보를 유지한 채 Login 페이지로 자동 이동시키는
LogoutRedirectController 구현 방법을 설명합니다.
이 기능은 세션 만료, 강제 로그아웃, 보안 정책 변경 시 자동 로그아웃 처리에 매우 유용합니다.
1. 컨트롤러 코드
아래 코드는 /LogoutRedirect 경로로 GET 요청이 오면 로그아웃을 수행한 뒤
/Identity/Account/Login 페이지로 리디렉션합니다.
이때 Uri.EscapeDataString 을 사용하여 returnUrl 값에 포함된
특수문자(?, &, = 등)가 URL에서 깨지지 않도록 안전한 URL 인코딩을 적용합니다.
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Threading.Tasks;
namespace Azunt.Web.Controllers
{
// JS 등에서 호출할 때 CSRF 검사를 건너뛰기 위해 사용
[IgnoreAntiforgeryToken]
public class LogoutRedirectController : Controller
{
private readonly SignInManager<ApplicationUser> _signInManager;
// DI로 SignInManager 받아오기
public LogoutRedirectController(SignInManager<ApplicationUser> signInManager)
{
_signInManager = signInManager;
}
// /LogoutRedirect 경로로 GET 요청 처리
[HttpGet("/LogoutRedirect")]
public async Task<IActionResult> Index(string returnUrl = "/")
{
// 로그인 상태라면 로그아웃 실행
if (_signInManager.IsSignedIn(User))
{
await _signInManager.SignOutAsync();
}
// 로그인 페이지로 이동하면서 returnUrl 전달
// Uri.EscapeDataString: 특수문자 인코딩을 통해 안전한 URL 생성
var loginUrl = $"/Identity/Account/Login?returnUrl={Uri.EscapeDataString(returnUrl)}";
// 로그인 페이지로 리디렉션
return Redirect(loginUrl);
}
}
}
2. 동작 방식
/LogoutRedirect엔드포인트 호출- 서버에서 로그인 여부 확인 후 로그아웃 처리
- Login 페이지로 리디렉션
- 로그인 성공 시
returnUrl로 복귀
예시 요청:
/LogoutRedirect?returnUrl=/Dashboard
→ 로그아웃 후
/Identity/Account/Login?returnUrl=/Dashboard
로 자동 이동합니다.
3. JavaScript에서 사용 예
window.location.href = "/LogoutRedirect?returnUrl="
+ encodeURIComponent(location.pathname + location.search);
브라우저 URL의 현재 경로와 쿼리스트링을 안전하게 인코딩하여 전달합니다.
4. 사용 목적
- 세션 만료 감지 후 자동 로그아웃 처리
- 보안 정책 변경 시 강제 재로그인 유도
- 여러 테넌트/포털 환경에서 공통 로그아웃 처리
- returnUrl 기반의 자연스러운 재인증 UX 제공
추천 자료: ASP.NET Core 인증 및 권한 부여
추천 자료: .NET Blazor에 대해 알아보시겠어요? .NET Blazor 알아보기를 확인해보세요!