ASP.NET Core での Razor ページ認可規則

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

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

サンプル アプリでは、ASP.NET Core Identity なしでの cookie 認証が使われています。 このトピックで示す概念と例は、ASP.NET Core Identity を使用するアプリにも等しく適用されます。 Identity を使うには、「ASP.NET Core の 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 ページ ルートの相対パスで、スラッシュだけが含まれます。

認可ポリシーを指定するには、AuthorizePage オーバーロードを使います。

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

Note

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

ページのフォルダーへのアクセスに認可を要求する

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

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

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

認可ポリシーを指定するには、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 ページ ルートの相対パスで、スラッシュだけが含まれます。

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

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

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

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

認可済みアクセスと匿名アクセスの組み合わせに関する注意事項

ページのフォルダーで認可が必要であることを指定し、そのフォルダー内のページで匿名アクセスが許可されるように指定することは可能です。

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

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

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

非公開ページ上で認可を要求すると失敗します。 AllowAnonymousFilterAuthorizeFilter の両方がページに適用されると、AllowAnonymousFilter が優先され、アクセスが制御されます。

その他の技術情報

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

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

サンプル アプリでは、ASP.NET Core Identity なしでの cookie 認証が使われています。 このトピックで示す概念と例は、ASP.NET Core Identity を使用するアプリにも等しく適用されます。 Identity を使うには、「ASP.NET Core の 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 ページ ルートの相対パスで、スラッシュだけが含まれます。

認可ポリシーを指定するには、AuthorizePage オーバーロードを使います。

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

Note

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

ページのフォルダーへのアクセスに認可を要求する

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 ページ ルートの相対パスであるビュー エンジンのパスです。

認可ポリシーを指定するには、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 ページ ルートの相対パスで、スラッシュだけが含まれます。

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

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 ページ ルートの相対パスであるビュー エンジンのパスです。

認可済みアクセスと匿名アクセスの組み合わせに関する注意事項

ページのフォルダーで認可が必要であることを指定し、そのフォルダー内のページで匿名アクセスが許可されるように指定することは可能です。

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

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

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

非公開ページ上で認可を要求すると失敗します。 AllowAnonymousFilterAuthorizeFilter の両方がページに適用されると、AllowAnonymousFilter が優先され、アクセスが制御されます。

その他の技術情報