Razorページの承認規則 (ASP.NET Core

Pages アプリでアクセスを制御する方法の 1 Razor つは、起動時に承認規則を使用する方法です。 これらの規則を使用すると、ユーザーを承認し、匿名ユーザーがページの個々のページまたはフォルダーにアクセスできます。 このトピックで説明する規則では、アクセスを制御するために 承認フィルターが自動的 に適用されます。

サンプル コードを表示またはダウンロードします (ダウンロード方法)。

サンプル アプリでは、 を使用せずに cookie 認証を使用します ASP.NET Core Identity 。 このトピックで示す概念と例は、 を使用するアプリにも同様に適用されます ASP.NET Core Identity 。 を使用するには ASP.NET Core Identity 、 のガイダンスに従います IdentityASP.NET Core の概要

ページにアクセスするために承認を要求する

規則を AuthorizePage 使用して、指定 AuthorizeFilter したパスの ページに を追加します。

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

指定されたパスは、ビュー エンジンのパスです。これは、拡張機能を含めず、スラッシュのみを含む Pages ルート相対 Razor パスです。

承認ポリシー を指定するには、AuthorizePage オーバーロード を使用します

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

注意

AuthorizeFilter 、フィルター属性を使用してページ モデル クラスに [Authorize] 適用できます。 詳細については、「フィルター属性を承認 する」を参照してください

ページのフォルダーにアクセスするために承認を要求する

規則を AuthorizeFolder 使用して、指定したパスにあるフォルダー内のすべての AuthorizeFilter ページに を追加します。

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

指定されたパスは、ビュー エンジンのパスです。これは Pages ルート Razor 相対パスです。

承認ポリシー を指定するには、AuthorizeFolder オーバーロード を使用します

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

エリア ページにアクセスするために承認を要求する

規則を AuthorizeAreaPage 使用して、指定 AuthorizeFilter したパスの領域ページに を追加します。

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

ページ名は、指定された領域の pages ルート ディレクトリに対する相対拡張子のないファイルのパスです。 たとえば、ファイル Areas/ Identity /Pages/Manage/Accounts.cshtml のページ名は /Manage/Accounts です

承認ポリシー を指定するには、AuthorizeAreaPage オーバーロード を使用します

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

領域のフォルダーにアクセスするために承認を要求する

規則を AuthorizeAreaFolder 使用して、指定したパスにあるフォルダー内のすべての AuthorizeFilter 領域に を追加します。

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

フォルダー パスは、指定した領域の pages ルート ディレクトリを基準にしたフォルダーのパスです。 たとえば 、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");
});

指定されたパスは、ビュー エンジンのパスです。これは、拡張機能を含めず、スラッシュのみを含む Pages ルート相対 Razor パスです。

ページのフォルダーへの匿名アクセスを許可する

規則を AllowAnonymousToFolder 使用して、指定したパスにあるフォルダー内のすべての AllowAnonymousFilter ページに を追加します。

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

指定されたパスは、ビュー エンジンのパスです。これは Pages ルート Razor 相対パスです。

承認されたアクセスと匿名アクセスの組み合わせに関する注意

ページのフォルダーに承認が必要と指定し、そのフォルダー内のページで匿名アクセスを許可する場合に有効です。

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

ただし、その逆は有効ではありません。 匿名アクセス用にページのフォルダーを宣言し、そのフォルダー内で承認を必要とするページを指定することはできません。

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

[プライベート] ページで承認を要求すると失敗します。 と の両方 AllowAnonymousFilter がページに適用されると、 が優先され、アクセス AuthorizeFilter AllowAnonymousFilter が制御されます。

その他のリソース

Pages アプリでアクセスを制御する方法の 1 Razor つは、起動時に承認規則を使用する方法です。 これらの規則を使用すると、ユーザーを承認し、匿名ユーザーがページの個々のページまたはフォルダーにアクセスできます。 このトピックで説明する規則では、アクセスを制御するために 承認フィルターが自動的 に適用されます。

サンプル コードを表示またはダウンロードします (ダウンロード方法)。

サンプル アプリでは、 を使用せずに cookie 認証を使用します ASP.NET Core Identity 。 このトピックで示す概念と例は、 を使用するアプリにも同様に適用されます ASP.NET Core Identity 。 を使用するには ASP.NET Core Identity 、 のガイダンスに従います IdentityASP.NET Core の概要

ページにアクセスするために承認を要求する

を使用 AuthorizePage して、指定 AddRazorPagesOptions したパス 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);

指定されたパスは、ビュー エンジンのパスです。これは、拡張機能を含めず、スラッシュのみを含む Pages ルート相対 Razor パスです。

承認ポリシー を指定するには、AuthorizePage オーバーロード を使用します

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

注意

AuthorizeFilter 、フィルター属性を使用してページ モデル クラスに [Authorize] 適用できます。 詳細については、「フィルター属性を承認 する」を参照してください

ページのフォルダーにアクセスするために承認を要求する

を使用して、指定したパスにあるフォルダー内のすべてのページに AuthorizeFolder AddRazorPagesOptions 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);

指定されたパスは、ビュー エンジンのパスです。これは Pages ルート Razor 相対パスです。

承認ポリシー を指定するには、AuthorizeFolder オーバーロード を使用します

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

エリア ページにアクセスするために承認を要求する

を使用 AuthorizeAreaPage して、指定 AddRazorPagesOptions したパス AuthorizeFilter の領域ページに を追加します。

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

ページ名は、指定された領域の pages ルート ディレクトリに対する相対拡張子のないファイルのパスです。 たとえば、ファイル Areas/ Identity /Pages/Manage/Accounts.cshtml のページ名は /Manage/Accounts です

承認ポリシー を指定するには、AuthorizeAreaPage オーバーロード を使用します

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

領域のフォルダーにアクセスするために承認を要求する

を使用して、指定したパスにあるフォルダー内のすべての領域に AuthorizeAreaFolder AddRazorPagesOptions AuthorizeFilter を追加します。

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

フォルダー パスは、指定した領域の pages ルート ディレクトリを基準にしたフォルダーのパスです。 たとえば 、Areas/ Identity /Pages/Manage/ の下のファイルのフォルダー パスは /Manage です

承認ポリシー を指定するには、AuthorizeAreaFolder オーバーロード を使用します

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

ページへの匿名アクセスを許可する

を使用 AllowAnonymousToPage して、指定 AddRazorPagesOptions したパス 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);

指定されたパスは、ビュー エンジンのパスです。これは、拡張機能を含めず、スラッシュのみを含む Pages ルート相対 Razor パスです。

ページのフォルダーへの匿名アクセスを許可する

を使用して、指定したパスにあるフォルダー内のすべてのページに AllowAnonymousToFolder AddRazorPagesOptions 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);

指定されたパスは、ビュー エンジンのパスです。これは Pages ルート Razor 相対パスです。

承認されたアクセスと匿名アクセスの組み合わせに関する注意

承認を必要とするページのフォルダーを指定し、そのフォルダー内のページで匿名アクセスを許可するよりも有効です。

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

ただし、その逆は有効ではありません。 匿名アクセス用にページのフォルダーを宣言し、そのフォルダー内で承認を必要とするページを指定することはできません。

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

[プライベート] ページで承認を要求すると失敗します。 と の両方 AllowAnonymousFilter がページに適用されると、 が優先され、アクセス AuthorizeFilter AllowAnonymousFilter が制御されます。

その他のリソース