在 ASP.NET Core razor 页授权约定Razor Pages authorization conventions in ASP.NET Core

本文内容

在 Razor Pages 应用程序中控制访问权限的一种方法是在启动时使用授权约定。这些约定允许用户授权用户,并允许匿名用户访问页面的各个页面或文件夹。本主题中所述的约定会自动应用授权筛选器来控制访问权限。

查看或下载示例代码如何下载

示例应用使用cookie 身份验证,但不 ASP.NET Core 标识概念和本主题中所示的示例同样适用于使用 ASP.NET Core 标识的应用。若要使用 ASP.NET Core 标识,请按照 ASP.NET Core 上的标识简介中的指南进行操作。

需要授权才能访问页面Require authorization to access a page

通过 AddRazorPagesOptions 使用 AuthorizePage 约定,将 AuthorizeFilter 添加到页面中的指定路径:

  1. services.AddRazorPages()
  2. .AddRazorPagesOptions(options =>
  3. {
  4. options.Conventions.AuthorizePage("/Contact");
  5. options.Conventions.AuthorizeFolder("/Private");
  6. options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
  7. options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
  8. });

指定的路径为视图引擎路径,它是不带扩展名的 Razor Pages 根相对路径,并且仅包含正斜杠。

若要指定授权策略,请使用AuthorizePage 重载

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

备注

AuthorizeFilter 可以应用于具有 [Authorize] filter 特性的页模型类。有关详细信息,请参阅授权筛选器属性

需要授权才能访问页的文件夹Require authorization to access a folder of pages

通过 AddRazorPagesOptions 使用 AuthorizeFolder 约定,将 AuthorizeFilter 添加到文件夹中指定路径的所有页面:

  1. services.AddRazorPages()
  2. .AddRazorPagesOptions(options =>
  3. {
  4. options.Conventions.AuthorizePage("/Contact");
  5. options.Conventions.AuthorizeFolder("/Private");
  6. options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
  7. options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
  8. });

指定的路径为视图引擎路径,该路径是 Razor Pages 根相对路径。

若要指定授权策略,请使用AuthorizeFolder 重载

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

需要授权才能访问区域页Require authorization to access an area page

通过 AddRazorPagesOptions 使用 AuthorizeAreaPage 约定,将 AuthorizeFilter 添加到指定路径处的区域页:

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

页面名称是文件的路径,该文件的扩展名相对于指定区域的页根目录。例如,文件区域/标识/页面/管理/帐户的页名称为 /Manage/Accounts

若要指定授权策略,请使用AuthorizeAreaPage 重载

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

需要授权才能访问区域文件夹Require authorization to access a folder of areas

通过 AddRazorPagesOptions 使用 AuthorizeAreaFolder 约定,将 AuthorizeFilter 添加到文件夹中指定路径的所有区域:

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

文件夹路径是文件夹相对于指定区域的页面根目录的路径。例如,"区域/标识/页面/管理/ " 下的文件的文件夹路径为 /Manage

若要指定授权策略,请使用AuthorizeAreaFolder 重载

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

允许匿名访问页面Allow anonymous access to a page

通过 AddRazorPagesOptions 使用 AllowAnonymousToPage 约定,将 AllowAnonymousFilter 添加到页面中的指定路径:

  1. services.AddRazorPages()
  2. .AddRazorPagesOptions(options =>
  3. {
  4. options.Conventions.AuthorizePage("/Contact");
  5. options.Conventions.AuthorizeFolder("/Private");
  6. options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
  7. options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
  8. });

指定的路径为视图引擎路径,它是不带扩展名的 Razor Pages 根相对路径,并且仅包含正斜杠。

允许匿名访问页面文件夹Allow anonymous access to a folder of pages

通过 AddRazorPagesOptions 使用 AllowAnonymousToFolder 约定,将 AllowAnonymousFilter 添加到文件夹中指定路径的所有页面:

  1. services.AddRazorPages()
  2. .AddRazorPagesOptions(options =>
  3. {
  4. options.Conventions.AuthorizePage("/Contact");
  5. options.Conventions.AuthorizeFolder("/Private");
  6. options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
  7. options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
  8. });

指定的路径为视图引擎路径,该路径是 Razor Pages 根相对路径。

合并授权访问和匿名访问时的注意事项Note on combining authorized and anonymous access

有效的方法是指定页面的文件夹需要授权,然后指定该文件夹中的页面允许匿名访问:

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

但是,反之则无效。不能声明用于匿名访问的页面文件夹,然后在该文件夹中指定需要授权的页面:

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

在专用页面上要求授权失败。AllowAnonymousFilterAuthorizeFilter 应用于页面时,AllowAnonymousFilter 优先并控制访问。

其他资源Additional resources

在 Razor Pages 应用程序中控制访问权限的一种方法是在启动时使用授权约定。这些约定允许用户授权用户,并允许匿名用户访问页面的各个页面或文件夹。本主题中所述的约定会自动应用授权筛选器来控制访问权限。

查看或下载示例代码如何下载

示例应用使用cookie 身份验证,但不 ASP.NET Core 标识概念和本主题中所示的示例同样适用于使用 ASP.NET Core 标识的应用。若要使用 ASP.NET Core 标识,请按照 ASP.NET Core 上的标识简介中的指南进行操作。

需要授权才能访问页面Require authorization to access a page

通过 AddRazorPagesOptions 使用 AuthorizePage 约定,将 AuthorizeFilter 添加到页面中的指定路径:

  1. services.AddMvc()
  2. .AddRazorPagesOptions(options =>
  3. {
  4. options.Conventions.AuthorizePage("/Contact");
  5. options.Conventions.AuthorizeFolder("/Private");
  6. options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
  7. options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
  8. })
  9. .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

指定的路径为视图引擎路径,它是不带扩展名的 Razor Pages 根相对路径,并且仅包含正斜杠。

若要指定授权策略,请使用AuthorizePage 重载

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

备注

AuthorizeFilter 可以应用于具有 [Authorize] filter 特性的页模型类。有关详细信息,请参阅授权筛选器属性

需要授权才能访问页的文件夹Require authorization to access a folder of pages

通过 AddRazorPagesOptions 使用 AuthorizeFolder 约定,将 AuthorizeFilter 添加到文件夹中指定路径的所有页面:

  1. services.AddMvc()
  2. .AddRazorPagesOptions(options =>
  3. {
  4. options.Conventions.AuthorizePage("/Contact");
  5. options.Conventions.AuthorizeFolder("/Private");
  6. options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
  7. options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
  8. })
  9. .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

指定的路径为视图引擎路径,该路径是 Razor Pages 根相对路径。

若要指定授权策略,请使用AuthorizeFolder 重载

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

需要授权才能访问区域页Require authorization to access an area page

通过 AddRazorPagesOptions 使用 AuthorizeAreaPage 约定,将 AuthorizeFilter 添加到指定路径处的区域页:

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

页面名称是文件的路径,该文件的扩展名相对于指定区域的页根目录。例如,文件区域/标识/页面/管理/帐户的页名称为 /Manage/Accounts

若要指定授权策略,请使用AuthorizeAreaPage 重载

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

需要授权才能访问区域文件夹Require authorization to access a folder of areas

通过 AddRazorPagesOptions 使用 AuthorizeAreaFolder 约定,将 AuthorizeFilter 添加到文件夹中指定路径的所有区域:

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

文件夹路径是文件夹相对于指定区域的页面根目录的路径。例如,"区域/标识/页面/管理/ " 下的文件的文件夹路径为 /Manage

若要指定授权策略,请使用AuthorizeAreaFolder 重载

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

允许匿名访问页面Allow anonymous access to a page

通过 AddRazorPagesOptions 使用 AllowAnonymousToPage 约定,将 AllowAnonymousFilter 添加到页面中的指定路径:

  1. services.AddMvc()
  2. .AddRazorPagesOptions(options =>
  3. {
  4. options.Conventions.AuthorizePage("/Contact");
  5. options.Conventions.AuthorizeFolder("/Private");
  6. options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
  7. options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
  8. })
  9. .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

指定的路径为视图引擎路径,它是不带扩展名的 Razor Pages 根相对路径,并且仅包含正斜杠。

允许匿名访问页面文件夹Allow anonymous access to a folder of pages

通过 AddRazorPagesOptions 使用 AllowAnonymousToFolder 约定,将 AllowAnonymousFilter 添加到文件夹中指定路径的所有页面:

  1. services.AddMvc()
  2. .AddRazorPagesOptions(options =>
  3. {
  4. options.Conventions.AuthorizePage("/Contact");
  5. options.Conventions.AuthorizeFolder("/Private");
  6. options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
  7. options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
  8. })
  9. .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

指定的路径为视图引擎路径,该路径是 Razor Pages 根相对路径。

合并授权访问和匿名访问时的注意事项Note on combining authorized and anonymous access

有效的方法是,指定需要授权的页面文件夹,并指定该文件夹中的页面允许匿名访问:

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

但是,反之则无效。不能声明用于匿名访问的页面文件夹,然后在该文件夹中指定需要授权的页面:

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

在专用页面上要求授权失败。AllowAnonymousFilterAuthorizeFilter 应用于页面时,AllowAnonymousFilter 优先并控制访问。

其他资源Additional resources