Bagikan melalui


Razor Konvensi otorisasi Halaman di ASP.NET Core

Salah satu cara untuk mengontrol akses di aplikasi Pages Anda Razor adalah dengan menggunakan konvensi otorisasi saat startup. Konvensi ini memungkinkan Anda untuk mengotorisasi pengguna dan mengizinkan pengguna anonim untuk mengakses halaman atau folder halaman individual. Konvensi yang dijelaskan dalam topik ini secara otomatis menerapkan filter otorisasi untuk mengontrol akses.

Melihat atau mengunduh kode sampel (cara mengunduh)

Aplikasi sampel menggunakan cookie autentikasi tanpa ASP.NET Core Identity. Konsep dan contoh yang ditampilkan dalam topik ini berlaku sama untuk aplikasi yang menggunakan ASP.NET Core Identity. Untuk menggunakan ASP.NET Core Identity, ikuti panduan dalam Pengenalan Identity di ASP.NET Core.

Memerlukan otorisasi untuk mengakses halaman

AuthorizePage Gunakan konvensi untuk menambahkan AuthorizeFilter ke halaman di jalur yang ditentukan:

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

Jalur yang ditentukan adalah jalur Lihat Mesin, yang merupakan Razor jalur relatif akar Halaman tanpa ekstensi dan hanya berisi garis miring ke depan.

Untuk menentukan kebijakan otorisasi, gunakan kelebihan beban AuthorizePage:

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

Catatan

Dapat AuthorizeFilter diterapkan ke kelas model halaman dengan [Authorize] atribut filter. Untuk informasi selengkapnya, lihat Mengotorisasi atribut filter.

Memerlukan otorisasi untuk mengakses folder halaman

AuthorizeFolder Gunakan konvensi untuk menambahkan AuthorizeFilter ke semua halaman dalam folder di jalur yang ditentukan:

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

Jalur yang ditentukan adalah jalur Lihat Mesin, yang merupakan Razor jalur relatif akar Halaman.

Untuk menentukan kebijakan otorisasi, gunakan kelebihan beban AuthorizeFolder:

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

Memerlukan otorisasi untuk mengakses halaman area

AuthorizeAreaPage Gunakan konvensi untuk menambahkan AuthorizeFilter ke halaman area di jalur yang ditentukan:

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

Nama halaman adalah jalur file tanpa ekstensi yang relatif terhadap direktori akar halaman untuk area yang ditentukan. Misalnya, nama halaman untuk file Areas/Identity/Pages/Manage/Accounts.cshtml adalah /Kelola/Akun.

Untuk menentukan kebijakan otorisasi, gunakan overload AuthorizeAreaPage:

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

Memerlukan otorisasi untuk mengakses folder area

AuthorizeAreaFolder Gunakan konvensi untuk menambahkan AuthorizeFilter ke semua area dalam folder di jalur yang ditentukan:

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

Jalur folder adalah jalur folder relatif terhadap direktori akar halaman untuk area yang ditentukan. Misalnya, jalur folder untuk file di bawah Area/Identity/Halaman/Kelola/ adalah /Kelola.

Untuk menentukan kebijakan otorisasi, gunakan kelebihan beban AuthorizeAreaFolder:

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

Perbolehkan akses anonim ke halaman

AllowAnonymousToPage Gunakan konvensi untuk menambahkan AllowAnonymousFilter ke halaman di jalur yang ditentukan:

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

Jalur yang ditentukan adalah jalur Lihat Mesin, yang merupakan Razor jalur relatif akar Halaman tanpa ekstensi dan hanya berisi garis miring ke depan.

Perbolehkan akses anonim ke folder halaman

AllowAnonymousToFolder Gunakan konvensi untuk menambahkan AllowAnonymousFilter ke semua halaman dalam folder di jalur yang ditentukan:

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

Jalur yang ditentukan adalah jalur Lihat Mesin, yang merupakan Razor jalur relatif akar Halaman.

Catatan tentang menggabungkan akses resmi dan anonim

Valid untuk menentukan bahwa folder halaman memerlukan otorisasi lalu menentukan bahwa halaman dalam folder tersebut memungkinkan akses anonim:

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

Sebaliknya, bagaimanapun, tidak valid. Anda tidak dapat mendeklarasikan folder halaman untuk akses anonim lalu menentukan halaman dalam folder tersebut yang memerlukan otorisasi:

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

Memerlukan otorisasi pada halaman Privat gagal. Ketika dan AllowAnonymousFilterAuthorizeFilter diterapkan ke halaman, AllowAnonymousFilter yang diutamakan dan mengontrol akses.

Sumber Daya Tambahan:

Salah satu cara untuk mengontrol akses di aplikasi Pages Anda Razor adalah dengan menggunakan konvensi otorisasi saat startup. Konvensi ini memungkinkan Anda untuk mengotorisasi pengguna dan mengizinkan pengguna anonim untuk mengakses halaman atau folder halaman individual. Konvensi yang dijelaskan dalam topik ini secara otomatis menerapkan filter otorisasi untuk mengontrol akses.

Melihat atau mengunduh kode sampel (cara mengunduh)

Aplikasi sampel menggunakan cookie autentikasi tanpa ASP.NET Core Identity. Konsep dan contoh yang ditampilkan dalam topik ini berlaku sama untuk aplikasi yang menggunakan ASP.NET Core Identity. Untuk menggunakan ASP.NET Core Identity, ikuti panduan dalam Pengenalan Identity di ASP.NET Core.

Memerlukan otorisasi untuk mengakses halaman

AuthorizePage Gunakan konvensi melalui AddRazorPagesOptions untuk menambahkan AuthorizeFilter ke halaman di jalur yang ditentukan:

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);

Jalur yang ditentukan adalah jalur Lihat Mesin, yang merupakan Razor jalur relatif akar Halaman tanpa ekstensi dan hanya berisi garis miring ke depan.

Untuk menentukan kebijakan otorisasi, gunakan kelebihan beban AuthorizePage:

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

Catatan

Dapat AuthorizeFilter diterapkan ke kelas model halaman dengan [Authorize] atribut filter. Untuk informasi selengkapnya, lihat Mengotorisasi atribut filter.

Memerlukan otorisasi untuk mengakses folder halaman

AuthorizeFolder Gunakan konvensi melalui AddRazorPagesOptions untuk menambahkan AuthorizeFilter ke semua halaman dalam folder di jalur yang ditentukan:

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);

Jalur yang ditentukan adalah jalur Lihat Mesin, yang merupakan Razor jalur relatif akar Halaman.

Untuk menentukan kebijakan otorisasi, gunakan kelebihan beban AuthorizeFolder:

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

Memerlukan otorisasi untuk mengakses halaman area

AuthorizeAreaPage Gunakan konvensi melalui AddRazorPagesOptions untuk menambahkan AuthorizeFilter ke halaman area di jalur yang ditentukan:

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

Nama halaman adalah jalur file tanpa ekstensi yang relatif terhadap direktori akar halaman untuk area yang ditentukan. Misalnya, nama halaman untuk file Areas/Identity/Pages/Manage/Accounts.cshtml adalah /Kelola/Akun.

Untuk menentukan kebijakan otorisasi, gunakan overload AuthorizeAreaPage:

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

Memerlukan otorisasi untuk mengakses folder area

AuthorizeAreaFolder Gunakan konvensi melalui AddRazorPagesOptions untuk menambahkan AuthorizeFilter ke semua area dalam folder di jalur yang ditentukan:

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

Jalur folder adalah jalur folder relatif terhadap direktori akar halaman untuk area yang ditentukan. Misalnya, jalur folder untuk file di bawah Area/Identity/Halaman/Kelola/ adalah /Kelola.

Untuk menentukan kebijakan otorisasi, gunakan kelebihan beban AuthorizeAreaFolder:

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

Perbolehkan akses anonim ke halaman

AllowAnonymousToPage Gunakan konvensi melalui AddRazorPagesOptions untuk menambahkan AllowAnonymousFilter ke halaman di jalur yang ditentukan:

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);

Jalur yang ditentukan adalah jalur Lihat Mesin, yang merupakan Razor jalur relatif akar Halaman tanpa ekstensi dan hanya berisi garis miring ke depan.

Perbolehkan akses anonim ke folder halaman

AllowAnonymousToFolder Gunakan konvensi melalui AddRazorPagesOptions untuk menambahkan AllowAnonymousFilter ke semua halaman dalam folder di jalur yang ditentukan:

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);

Jalur yang ditentukan adalah jalur Lihat Mesin, yang merupakan Razor jalur relatif akar Halaman.

Catatan tentang menggabungkan akses resmi dan anonim

Valid untuk menentukan bahwa folder halaman yang memerlukan otorisasi dan daripada menentukan bahwa halaman dalam folder tersebut memungkinkan akses anonim:

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

Sebaliknya, bagaimanapun, tidak valid. Anda tidak dapat mendeklarasikan folder halaman untuk akses anonim lalu menentukan halaman dalam folder tersebut yang memerlukan otorisasi:

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

Memerlukan otorisasi pada halaman Privat gagal. Ketika dan AllowAnonymousFilterAuthorizeFilter diterapkan ke halaman, AllowAnonymousFilter yang diutamakan dan mengontrol akses.

Sumber Daya Tambahan: