使用ASP.NET Core Identity的ASP.NET Core模板中访问权限是如何限制的?
现有授权规则实现逻辑
你找不到显式的AuthorizeAreaFolder调用,是因为Identity的默认授权规则是在服务注册阶段自动注入的,不需要手动编写配置:
- 当你调用
AddDefaultIdentity<TUser>()或者AddIdentity<TUser, TRole>()注册Identity服务时,组件内部会自动给Identity区域下除/Identity/Account公开路径外的所有页面,全局添加[Authorize]授权要求- 你看到的标注了
[AllowAnonymous]的页面(比如登录、注册、找回密码、邮箱确认)是官方默认放开匿名访问的刚需页面,单独加了特性豁免全局授权 - 其余Identity页面(比如个人信息管理、修改密码、双因素认证设置等)默认要求登录访问,这个规则是全局约定配置,不会写在单个页面模型类上
- 你看到的标注了
- 站点根目录的普通Razor页面默认没有全局授权规则,未标注
[Authorize]的页面默认允许匿名访问,和你观察到的现象一致。
自定义授权规则方式
如果需要调整授权逻辑,有两种常用实现方案:
- 显式覆盖全局授权约定
在注册Razor Pages服务时手动配置授权规则,优先级高于Identity的默认约定:
services.AddRazorPages() .AddRazorPagesOptions(options => { // 自定义Identity区域的授权规则,比如给/Manage路径要求已登录 options.Conventions.AuthorizeAreaFolder("Identity", "/Manage"); // 给自定义文件夹加授权要求,比如指定角色/策略 options.Conventions.AuthorizeFolder("/Admin", "AdminOnlyPolicy"); // 给指定页面放开匿名访问 options.Conventions.AllowAnonymousToPage("/Public/Announcement"); });
- 页面级标注特性
直接在Razor页面模型类,或者cshtml文件的@page指令下方加[Authorize]/[AllowAnonymous]特性,优先级高于全局约定配置。
内容的提问来源于stack exchange,提问作者Gary McGill
相关产品推荐
相关产品推荐

