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")
プライベート ページでの承認の要求が失敗します。 AllowAnonymousFilterとAuthorizeFilterの両方がページに適用されると、AllowAnonymousFilterが優先され、アクセスが制御されます。
その他のリソース
ASP.NET Core