Razor ASP.NET Core でのページ承認規則Razor Pages authorization conventions in ASP.NET Core

ページアプリでアクセスを制御する方法の1つ Razor は、起動時に承認規則を使用することです。One way to control access in your Razor Pages app is to use authorization conventions at startup. これらの規則を使用すると、ユーザーを承認し、匿名ユーザーが個々のページやページのフォルダーにアクセスすることを許可できます。These conventions allow you to authorize users and allow anonymous users to access individual pages or folders of pages. このトピックで説明する規則は、アクセスを制御するための 承認フィルター を自動的に適用します。The conventions described in this topic automatically apply authorization filters to control access.

サンプル コードを表示またはダウンロードします (ダウンロード方法)。View or download sample code (how to download)

サンプルアプリでは、を使用 cookie せず ASP.NET Core Identity に認証を使用します。The sample app uses cookie authentication without ASP.NET Core Identity. このトピックで示す概念と例は、を使用するアプリにも同様に適用され ASP.NET Core Identity ます。The concepts and examples shown in this topic apply equally to apps that use ASP.NET Core Identity. を使用するには ASP.NET Core Identity 、「」のガイダンスに従って IdentityASP.NET Core の概要 ください。To use ASP.NET Core Identity, follow the guidance in IdentityASP.NET Core の概要.

ページへのアクセスに承認を要求するRequire authorization to access a page

AuthorizePage AuthorizeFilter 指定されたパスのページにを追加するには、規則を使用します。Use the AuthorizePage convention to add an AuthorizeFilter to the page at the specified path:

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

指定されたパスは、ビューエンジンのパスです。これは、 Razor 拡張子のないページルート相対パスで、スラッシュだけを含みます。The specified path is the View Engine path, which is the Razor Pages root relative path without an extension and containing only forward slashes.

承認ポリシーを指定するには、 authorizepage オーバーロードを使用します。To specify an authorization policy, use an AuthorizePage overload:

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

注意

は、 AuthorizeFilter フィルター属性を使用してページモデルクラスに適用でき [Authorize] ます。An AuthorizeFilter can be applied to a page model class with the [Authorize] filter attribute. 詳細については、「 承認フィルター属性」を参照してください。For more information, see Authorize filter attribute.

ページのフォルダーにアクセスするには承認が必要ですRequire authorization to access a folder of pages

指定し AuthorizeFolder AuthorizeFilter たパスにあるフォルダー内のすべてのページにを追加するには、規則を使用します。Use the AuthorizeFolder convention to add an AuthorizeFilter to all of the pages in a folder at the specified path:

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

指定されたパスは、ページルートの相対パスであるビューエンジンのパスです Razor 。The specified path is the View Engine path, which is the Razor Pages root relative path.

承認ポリシーを指定するには、 authorizefolder オーバーロードを使用します。To specify an authorization policy, use an AuthorizeFolder overload:

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

区分ページへのアクセスに承認を要求するRequire authorization to access an area page

指定し AuthorizeAreaPage AuthorizeFilter たパスの領域ページにを追加するには、規則を使用します。Use the AuthorizeAreaPage convention to add an AuthorizeFilter to the area page at the specified path:

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

ページ名は、指定された領域のページルートディレクトリを基準とした拡張子のないファイルのパスです。The page name is the path of the file without an extension relative to the pages root directory for the specified area. たとえば、ファイル 領域/ Identity /Pages/Manage/Accounts.cshtml のページ名は、/ manage/Accounts です。For example, the page name for the file Areas/Identity/Pages/Manage/Accounts.cshtml is /Manage/Accounts .

承認ポリシーを指定するには、次のように、 Authorizeareapage オーバーロードを使用します。To specify an authorization policy, use an AuthorizeAreaPage overload:

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

領域のフォルダーにアクセスするための承認が必要Require authorization to access a folder of areas

指定し AuthorizeAreaFolder AuthorizeFilter たパスにあるフォルダー内のすべての領域にを追加するには、規則を使用します。Use the AuthorizeAreaFolder convention to add an AuthorizeFilter to all of the areas in a folder at the specified path:

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

フォルダーパスは、指定された領域のページルートディレクトリを基準としたフォルダーのパスです。The folder path is the path of the folder relative to the pages root directory for the specified area. たとえば、[区分]、[/]、 Identity [ 管理 ] の下にあるファイルのフォルダーパスを使用します。For example, the folder path for the files under Areas/Identity/Pages/Manage/ is /Manage .

承認ポリシーを指定するには、 AuthorizeAreaFolder オーバーロードを使用します。To specify an authorization policy, use an AuthorizeAreaFolder overload:

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

ページへの匿名アクセスを許可するAllow anonymous access to a page

指定し AllowAnonymousToPage AllowAnonymousFilter たパスにあるページにを追加するには、規則を使用します。Use the AllowAnonymousToPage convention to add an AllowAnonymousFilter to a page at the specified path:

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

指定されたパスは、ビューエンジンのパスです。これは、 Razor 拡張子のないページルート相対パスで、スラッシュだけを含みます。The specified path is the View Engine path, which is the Razor Pages root relative path without an extension and containing only forward slashes.

ページのフォルダーへの匿名アクセスを許可するAllow anonymous access to a folder of pages

指定し AllowAnonymousToFolder AllowAnonymousFilter たパスにあるフォルダー内のすべてのページにを追加するには、規則を使用します。Use the AllowAnonymousToFolder convention to add an AllowAnonymousFilter to all of the pages in a folder at the specified path:

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

指定されたパスは、ページルートの相対パスであるビューエンジンのパスです Razor 。The specified path is the View Engine path, which is the Razor Pages root relative path.

承認済みアクセスと匿名アクセスの組み合わせに関する注意事項Note on combining authorized and anonymous access

ページのフォルダーで承認が必要であることを指定し、そのフォルダー内のページで匿名アクセスが許可されるように指定することが有効です。It's valid to specify that a folder of pages requires authorization and then specify that a page within that folder allows anonymous access:

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

ただし、逆は無効です。The reverse, however, isn't valid. 匿名アクセス用のページのフォルダーを宣言して、承認が必要なフォルダー内のページを指定することはできません。You can't declare a folder of pages for anonymous access and then specify a page within that folder that requires authorization:

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

プライベートページで承認を要求すると失敗します。Requiring authorization on the Private page fails. との両方 AllowAnonymousFilter がページに適用されると、が優先され、 AuthorizeFilter アクセスが制御さ AllowAnonymousFilter れます。When both the AllowAnonymousFilter and AuthorizeFilter are applied to the page, the AllowAnonymousFilter takes precedence and controls access.

その他の資料Additional resources

ページアプリでアクセスを制御する方法の1つ Razor は、起動時に承認規則を使用することです。One way to control access in your Razor Pages app is to use authorization conventions at startup. これらの規則を使用すると、ユーザーを承認し、匿名ユーザーが個々のページやページのフォルダーにアクセスすることを許可できます。These conventions allow you to authorize users and allow anonymous users to access individual pages or folders of pages. このトピックで説明する規則は、アクセスを制御するための 承認フィルター を自動的に適用します。The conventions described in this topic automatically apply authorization filters to control access.

サンプル コードを表示またはダウンロードします (ダウンロード方法)。View or download sample code (how to download)

サンプルアプリでは、を使用 cookie せず ASP.NET Core Identity に認証を使用します。The sample app uses cookie authentication without ASP.NET Core Identity. このトピックで示す概念と例は、を使用するアプリにも同様に適用され ASP.NET Core Identity ます。The concepts and examples shown in this topic apply equally to apps that use ASP.NET Core Identity. を使用するには ASP.NET Core Identity 、「」のガイダンスに従って IdentityASP.NET Core の概要 ください。To use ASP.NET Core Identity, follow the guidance in IdentityASP.NET Core の概要.

ページへのアクセスに承認を要求するRequire authorization to access a page

を使用して、 AuthorizePage AddRazorPagesOptions 指定し AuthorizeFilter たパスのページにを追加します。Use the AuthorizePage convention via AddRazorPagesOptions to add an AuthorizeFilter to the page at the specified path:

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 拡張子のないページルート相対パスで、スラッシュだけを含みます。The specified path is the View Engine path, which is the Razor Pages root relative path without an extension and containing only forward slashes.

承認ポリシーを指定するには、 authorizepage オーバーロードを使用します。To specify an authorization policy, use an AuthorizePage overload:

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

注意

は、 AuthorizeFilter フィルター属性を使用してページモデルクラスに適用でき [Authorize] ます。An AuthorizeFilter can be applied to a page model class with the [Authorize] filter attribute. 詳細については、「 承認フィルター属性」を参照してください。For more information, see Authorize filter attribute.

ページのフォルダーにアクセスするには承認が必要ですRequire authorization to access a folder of pages

を使用して、 AuthorizeFolder AddRazorPagesOptions 指定し AuthorizeFilter たパスにあるフォルダー内のすべてのページにを追加します。Use the AuthorizeFolder convention via AddRazorPagesOptions to add an AuthorizeFilter to all of the pages in a folder at the specified path:

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 。The specified path is the View Engine path, which is the Razor Pages root relative path.

承認ポリシーを指定するには、 authorizefolder オーバーロードを使用します。To specify an authorization policy, use an AuthorizeFolder overload:

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

区分ページへのアクセスに承認を要求するRequire authorization to access an area page

を使用して AuthorizeAreaPage AddRazorPagesOptions 、指定し AuthorizeFilter たパスの領域ページにを追加します。Use the AuthorizeAreaPage convention via AddRazorPagesOptions to add an AuthorizeFilter to the area page at the specified path:

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

ページ名は、指定された領域のページルートディレクトリを基準とした拡張子のないファイルのパスです。The page name is the path of the file without an extension relative to the pages root directory for the specified area. たとえば、ファイル 領域/ Identity /Pages/Manage/Accounts.cshtml のページ名は、/ manage/Accounts です。For example, the page name for the file Areas/Identity/Pages/Manage/Accounts.cshtml is /Manage/Accounts .

承認ポリシーを指定するには、次のように、 Authorizeareapage オーバーロードを使用します。To specify an authorization policy, use an AuthorizeAreaPage overload:

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

領域のフォルダーにアクセスするための承認が必要Require authorization to access a folder of areas

を使用して、 AuthorizeAreaFolder AddRazorPagesOptions 指定し AuthorizeFilter たパスにあるフォルダー内のすべての領域にを追加します。Use the AuthorizeAreaFolder convention via AddRazorPagesOptions to add an AuthorizeFilter to all of the areas in a folder at the specified path:

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

フォルダーパスは、指定された領域のページルートディレクトリを基準としたフォルダーのパスです。The folder path is the path of the folder relative to the pages root directory for the specified area. たとえば、[区分]、[/]、 Identity [ 管理 ] の下にあるファイルのフォルダーパスを使用します。For example, the folder path for the files under Areas/Identity/Pages/Manage/ is /Manage .

承認ポリシーを指定するには、 AuthorizeAreaFolder オーバーロードを使用します。To specify an authorization policy, use an AuthorizeAreaFolder overload:

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

ページへの匿名アクセスを許可するAllow anonymous access to a page

を使用して AllowAnonymousToPage AddRazorPagesOptions 、指定し AllowAnonymousFilter たパスにあるページにを追加します。Use the AllowAnonymousToPage convention via AddRazorPagesOptions to add an AllowAnonymousFilter to a page at the specified path:

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 拡張子のないページルート相対パスで、スラッシュだけを含みます。The specified path is the View Engine path, which is the Razor Pages root relative path without an extension and containing only forward slashes.

ページのフォルダーへの匿名アクセスを許可するAllow anonymous access to a folder of pages

を使用して、 AllowAnonymousToFolder AddRazorPagesOptions 指定し AllowAnonymousFilter たパスにあるフォルダー内のすべてのページにを追加します。Use the AllowAnonymousToFolder convention via AddRazorPagesOptions to add an AllowAnonymousFilter to all of the pages in a folder at the specified path:

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 。The specified path is the View Engine path, which is the Razor Pages root relative path.

承認済みアクセスと匿名アクセスの組み合わせに関する注意事項Note on combining authorized and anonymous access

承認を必要とするページのフォルダーを指定し、そのフォルダー内のページで匿名アクセスが許可されるように指定することが有効です。It's valid to specify that a folder of pages that require authorization and than specify that a page within that folder allows anonymous access:

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

ただし、逆は無効です。The reverse, however, isn't valid. 匿名アクセス用のページのフォルダーを宣言して、承認が必要なフォルダー内のページを指定することはできません。You can't declare a folder of pages for anonymous access and then specify a page within that folder that requires authorization:

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

プライベートページで承認を要求すると失敗します。Requiring authorization on the Private page fails. との両方 AllowAnonymousFilter がページに適用されると、が優先され、 AuthorizeFilter アクセスが制御さ AllowAnonymousFilter れます。When both the AllowAnonymousFilter and AuthorizeFilter are applied to the page, the AllowAnonymousFilter takes precedence and controls access.

その他のリソースAdditional resources