ASP.NET Core의 Razor Pages 권한 부여 규칙

Razor Pages 앱에서 액세스를 제어하는 한 가지 방법은 시작 시 권한 부여 규칙을 사용하는 것입니다. 이러한 규칙을 사용하면 사용자에게 권한을 부여하고 익명 사용자가 개별 페이지 또는 페이지 폴더에 액세스할 수 있습니다. 이 항목에서 설명하는 규칙은 권한 부여 필터를 자동으로 적용하여 액세스를 제어합니다.

샘플 코드 보기 및 다운로드(다운로드 방법)

샘플 앱은 ASP.NET Core Identity 없이 cookie 인증을 사용합니다. 이 항목에 나와 있는 개념 및 예제는 ASP.NET Core Identity를 사용하는 앱에 동일하게 적용됩니다. ASP.NET Core를 사용하려면 ASP.NET Core Identity소개Identity의 지침을 따릅니다.

페이지에 액세스하려면 권한 부여 필요

AuthorizePage 규칙을 사용하여 지정된 경로의 페이지에 AuthorizeFilter를 추가합니다.

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

지정된 경로는 보기 엔진 경로입니다. 이 경로는 확장이 없고 슬래시만 포함하는 Razor Pages 루트 상대 경로입니다.

권한 부여 정책을 지정하려면 AuthorizePage 오버로드를 사용합니다.

options.Conventions.AuthorizePage("/Contact", "AtLeast21");

참고 항목

[Authorize] 필터 특성을 사용하여 페이지 모델 클래스에 AuthorizeFilter를 적용할 수 있습니다. 자세한 내용은 필터 특성 권한 부여를 참조하세요.

페이지 폴더에 액세스하려면 권한 부여 필요

AuthorizeFolder 규칙을 사용하여 지정된 경로에서 폴더의 모든 페이지에 AuthorizeFilter를 추가합니다.

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

지정된 경로는 Razor Pages 루트 상대 경로인 보기 엔진 경로입니다.

권한 부여 정책을 지정하려면 AuthorizeFolder 오버로드를 사용합니다.

options.Conventions.AuthorizeFolder("/Private", "AtLeast21");

영역 페이지에 액세스하려면 권한 부여 필요

AuthorizeAreaPage 규칙을 사용하여 지정된 경로의 영역 페이지에 AuthorizeFilter를 추가합니다.

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");

페이지 이름은 지정된 영역에 대한 페이지 루트 디렉터리에 상대적인 확장명 없는 파일의 경로입니다. 예를 들어 Areas/Identity/Pages/Manage/Accounts.cshtml 파일의 페이지 이름은 /Manage/Accounts입니다.

권한 부여 정책을 지정하려면 AuthorizeAreaPage 오버로드를 사용합니다.

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");

영역 폴더에 액세스하려면 권한 부여 필요

AuthorizeAreaFolder 규칙을 사용하여 지정된 경로에서 폴더의 모든 영역에 AuthorizeFilter를 추가합니다.

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");

폴더 경로는 지정된 영역에 대한 페이지 루트 디렉터리에 상대적인 폴더의 경로입니다. 예를 들어 Areas/Identity/Pages/Manage/ 아래에 있는 파일의 폴더 경로는 /Manage입니다.

권한 부여 정책을 지정하려면 AuthorizeAreaFolder 오버로드를 사용합니다.

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");

페이지에 대한 익명 액세스 허용

AllowAnonymousToPage 규칙을 사용하여 지정된 경로의 페이지에 AllowAnonymousFilter를 추가합니다.

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

지정된 경로는 보기 엔진 경로입니다. 이 경로는 확장이 없고 슬래시만 포함하는 Razor Pages 루트 상대 경로입니다.

페이지 폴더에 대한 익명 액세스 허용

AllowAnonymousToFolder 규칙을 사용하여 지정된 경로에서 폴더의 모든 페이지에 AllowAnonymousFilter를 추가합니다.

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

지정된 경로는 Razor Pages 루트 상대 경로인 보기 엔진 경로입니다.

권한 있는 액세스와 익명 액세스 결합에 대한 참고 사항

페이지 폴더에 권한 부여가 필요하도록 지정한 다음 해당 폴더 내의 페이지에서 익명 액세스를 허용하도록 지정하는 것이 유효합니다.

// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")

그러나 그 반대의 경우는 유효하지 않습니다. 익명 액세스를 위해 페이지 폴더를 선언한 다음, 권한 부여가 필요한 해당 폴더 내에 페이지를 지정할 수 없습니다.

// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")

프라이빗 페이지에서 권한 부여가 필요하면 실패합니다. AllowAnonymousFilterAuthorizeFilter가 모두 페이지에 적용되면 AllowAnonymousFilter가 우선적으로 적용되고 액세스가 제어됩니다.

추가 리소스

Razor Pages 앱에서 액세스를 제어하는 한 가지 방법은 시작 시 권한 부여 규칙을 사용하는 것입니다. 이러한 규칙을 사용하면 사용자에게 권한을 부여하고 익명 사용자가 개별 페이지 또는 페이지 폴더에 액세스할 수 있습니다. 이 항목에서 설명하는 규칙은 권한 부여 필터를 자동으로 적용하여 액세스를 제어합니다.

샘플 코드 보기 및 다운로드(다운로드 방법)

샘플 앱은 ASP.NET Core Identity 없이 cookie 인증을 사용합니다. 이 항목에 나와 있는 개념 및 예제는 ASP.NET Core Identity를 사용하는 앱에 동일하게 적용됩니다. ASP.NET Core를 사용하려면 ASP.NET Core Identity소개Identity의 지침을 따릅니다.

페이지에 액세스하려면 권한 부여 필요

AddRazorPagesOptions를 통해 AuthorizePage 규칙을 사용하여 지정된 경로의 페이지에 AuthorizeFilter를 추가합니다.

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

지정된 경로는 보기 엔진 경로입니다. 이 경로는 확장이 없고 슬래시만 포함하는 Razor Pages 루트 상대 경로입니다.

권한 부여 정책을 지정하려면 AuthorizePage 오버로드를 사용합니다.

options.Conventions.AuthorizePage("/Contact", "AtLeast21");

참고 항목

[Authorize] 필터 특성을 사용하여 페이지 모델 클래스에 AuthorizeFilter를 적용할 수 있습니다. 자세한 내용은 필터 특성 권한 부여를 참조하세요.

페이지 폴더에 액세스하려면 권한 부여 필요

AddRazorPagesOptions를 통해 AuthorizeFolder 규칙을 사용하여 지정된 경로에서 폴더의 모든 페이지에 AuthorizeFilter를 추가합니다.

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

지정된 경로는 Razor Pages 루트 상대 경로인 보기 엔진 경로입니다.

권한 부여 정책을 지정하려면 AuthorizeFolder 오버로드를 사용합니다.

options.Conventions.AuthorizeFolder("/Private", "AtLeast21");

영역 페이지에 액세스하려면 권한 부여 필요

AddRazorPagesOptions를 통해 AuthorizeAreaPage 규칙을 사용하여 지정된 경로의 영역 페이지에 AuthorizeFilter를 추가합니다.

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");

페이지 이름은 지정된 영역에 대한 페이지 루트 디렉터리에 상대적인 확장명 없는 파일의 경로입니다. 예를 들어 Areas/Identity/Pages/Manage/Accounts.cshtml 파일의 페이지 이름은 /Manage/Accounts입니다.

권한 부여 정책을 지정하려면 AuthorizeAreaPage 오버로드를 사용합니다.

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");

영역 폴더에 액세스하려면 권한 부여 필요

AddRazorPagesOptions를 통해 AuthorizeAreaFolder 규칙을 사용하여 지정된 경로에서 폴더의 모든 영역에 AuthorizeFilter를 추가합니다.

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");

폴더 경로는 지정된 영역에 대한 페이지 루트 디렉터리에 상대적인 폴더의 경로입니다. 예를 들어 Areas/Identity/Pages/Manage/ 아래에 있는 파일의 폴더 경로는 /Manage입니다.

권한 부여 정책을 지정하려면 AuthorizeAreaFolder 오버로드를 사용합니다.

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");

페이지에 대한 익명 액세스 허용

AddRazorPagesOptions를 통해 AllowAnonymousToPage 규칙을 사용하여 지정된 경로의 페이지에 AllowAnonymousFilter를 추가합니다.

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

지정된 경로는 보기 엔진 경로입니다. 이 경로는 확장이 없고 슬래시만 포함하는 Razor Pages 루트 상대 경로입니다.

페이지 폴더에 대한 익명 액세스 허용

AddRazorPagesOptions를 통해 AllowAnonymousToFolder 규칙을 사용하여 지정된 경로에서 폴더의 모든 페이지에 AllowAnonymousFilter를 추가합니다.

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

지정된 경로는 Razor Pages 루트 상대 경로인 보기 엔진 경로입니다.

권한 있는 액세스와 익명 액세스 결합에 대한 참고 사항

페이지 폴더에 권한 부여가 필요하도록 지정한 다음, 해당 폴더 내의 페이지에서 익명 액세스를 허용하도록 지정하는 것이 유효합니다.

// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")

그러나 그 반대의 경우는 유효하지 않습니다. 익명 액세스를 위해 페이지 폴더를 선언한 다음, 권한 부여가 필요한 해당 폴더 내에 페이지를 지정할 수 없습니다.

// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")

프라이빗 페이지에서 권한 부여가 필요하면 실패합니다. AllowAnonymousFilterAuthorizeFilter가 모두 페이지에 적용되면 AllowAnonymousFilter가 우선적으로 적용되고 액세스가 제어됩니다.

추가 리소스