ASP.NET Core에서 로그인하지 않은 사용자를 로그인 페이지로 리디렉션하기

  • 5 minutes to read

ASP.NET Core 프로젝트에서 여러 레이아웃(_Layout.cshtml) 파일을 사용할 때 특정 레이아웃을 사용하는 경우에는 반드시 로그인이 필요한 경우가 있습니다.

이럴 때 레이아웃 차원에서 인증 체크를 하는 내용을 이번 시간에 살펴보겠습니다.

서론

ASP.NET Core 애플리케이션에서 로그인하지 않은 사용자를 처리하는 것은 일반적인 작업입니다. 이를 처리하는 권장 방법은 미들웨어, 필터 또는 컨트롤러의 인증 및 권한 부여 속성을 사용하는 것입니다. 그러나 이 글에서는 레이아웃 페이지 (_Layout.cshtml)에서 로그인하지 않은 사용자를 로그인 페이지로 리디렉션하는 방법을 살펴보겠습니다.

주의: 이 방법은 레이아웃 페이지에 로직을 추가하는 것이므로 권장되지 않습니다. 가능하면 미들웨어나 필터를 사용하여 처리하는 것이 더 적절한 방법입니다.

1단계: _ViewImports.cshtml 파일 수정

_ViewImports.cshtml 파일에 다음 내용을 추가합니다. (파일이 없다면 생성하세요.)

@using Microsoft.AspNetCore.Identity
@using Microsoft.AspNetCore.Http
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

2단계: _Layout.cshtml 파일 수정

_Layout.cshtml 파일의 최상단에 다음 코드를 추가합니다.

@{
    if (!SignInManager.IsSignedIn(User))
    {
        var returnUrl = HttpContext.Request.Path;
        HttpContext.Response.Redirect($"/Identity/Account/Login?ReturnUrl={returnUrl}");
    }
}

위 코드는 로그인 여부를 확인하고, 로그인하지 않은 경우 로그인 페이지로 리디렉션합니다. 리디렉션되는 페이지의 경로는 프로젝트의 로그인 페이지 경로에 따라 변경해야 할 수도 있습니다. 기본적으로 Identity scaffold를 사용하는 경우 경로는 /Identity/Account/Login으로 설정됩니다.

결론

이 방법은 레이아웃 페이지에 로직을 추가하는 것이므로 권장되지 않습니다. 이 글에서 소개한 방법 로그인 여부를 레이아웃 페이지에서 확인하고 리디렉션을 처리하는 간단한 방법을 제공하지만, 일반적으로 미들웨어, 필터, 또는 컨트롤러에서 인증 및 권한 부여를 처리하는 것이 더 적절하고 안전한 방법입니다. 레이아웃 페이지에서 처리하는 것이 아니라 전체 애플리케이션에 대한 로그인 여부를 강제하려면, 인증 미들웨어를 사용하여 보안을 강화해야 합니다.

예를 들어, ASP.NET Core의 내장 인증 기능을 사용하면 [Authorize] 특성을 컨트롤러나 액션 메서드에 적용하여 로그인한 사용자만 접근할 수 있게 할 수 있습니다. 또한, 정책 기반 권한 부여를 사용하여 더 복잡한 인증 및 권한 부여 요구 사항을 처리할 수 있습니다.

추가로, 전역 필터를 사용하여 애플리케이션 전체에 인증 및 권한 부여를 적용할 수 있습니다. 이렇게 하려면, Startup.cs 파일의 ConfigureServices 메서드에서 전역 인증 필터를 추가해야 합니다.

예시:

public void ConfigureServices(IServiceCollection services)
{
    // 기타 서비스 구성 코드

    services.AddControllersWithViews(options =>
    {
        var policy = new AuthorizationPolicyBuilder()
                         .RequireAuthenticatedUser()
                         .Build();
        options.Filters.Add(new AuthorizeFilter(policy));
    });
}

이렇게 하면, [AllowAnonymous] 속성이 적용된 컨트롤러나 액션 메서드를 제외한 모든 컨트롤러와 액션 메서드에 대해 인증된 사용자만 접근할 수 있게 됩니다.

결국, 레이아웃 페이지에서 로그인 여부를 확인하여 리디렉션하는 방법은 특정 상황에서 빠르게 구현할 수 있는 방법이지만, 보안 및 유지 관리 측면에서 덜 바람직합니다. 레이아웃 페이지는 주로 UI 요소와 레이아웃 구조에 집중해야 하며, 애플리케이션의 인증 및 권한 부여 처리는 별도의 미들웨어, 필터 또는 컨트롤러에서 처리하는 것이 좋습니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com