在 ASP.NET Core razor 页授权约定

作者:Luke Latham

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

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

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

需要授权才能访问页面

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

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

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

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

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

备注

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

需要授权才能访问页的文件夹

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

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

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

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

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

需要授权才能访问区域页

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

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

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

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

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

需要授权才能访问区域文件夹

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

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

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

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

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

允许匿名访问页面

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

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

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

允许匿名访问页面文件夹

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

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

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

合并授权访问和匿名访问时的注意事项

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

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

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

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

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

其他资源

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

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

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

需要授权才能访问页面

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

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");

备注

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

需要授权才能访问页的文件夹

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

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");

需要授权才能访问区域页

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

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

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

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

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

需要授权才能访问区域文件夹

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

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

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

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

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

允许匿名访问页面

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

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 根相对路径, 并且仅包含正斜杠。

允许匿名访问页面文件夹

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

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 应用

下一篇:ASP.NET Core 中的简单授权

关注微信小程序
程序员编程王-随时随地学编程

扫描二维码
程序员编程王

扫一扫关注最新编程教程