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")
非公開ページ上で認可を要求すると失敗します。 AllowAnonymousFilter と AuthorizeFilter の両方がページに適用されると、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")
非公開ページ上で認可を要求すると失敗します。 AllowAnonymousFilter と AuthorizeFilter の両方がページに適用されると、AllowAnonymousFilter が優先され、アクセスが制御されます。
その他の技術情報
ASP.NET Core