次の方法で共有


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

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

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

サンプル アプリでは、ASP.NET Core cookieなしでIdentity認証を使用します。 ASP.NET Core Identityを使用するには、「ASP.NET Core の Identity の概要」のガイダンスに従ってください。

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

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

builder.Services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
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");

AuthorizeFilterは、[Authorize] フィルター属性を持つページ モデル クラスに適用できます。 詳細については、「 ASP.NET Core の Razor ページのフィルター メソッド」を参照してください。

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

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

builder.Services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
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");

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

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を追加します。

builder.Services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
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 のルート相対パスで、拡張子がなく、フォワードスラッシュのみを含みます。

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

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

builder.Services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
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が優先され、アクセスが制御されます。

その他のリソース