You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为整个Razor Pages应用全局应用AuthorizeForScopesAttribute?

可行解决方案如下

方案1:直接注册全局过滤器(最便捷,全应用生效)

AuthorizeForScopesAttribute本身实现了IFilterMetadata接口,直接作为全局过滤器添加即可,不需要写页面约定:

services.AddRazorPages(options =>
{
    // 全局添加Scope校验,所有页面都会生效
    options.Filters.Add(new Microsoft.Identity.Web.AuthorizeForScopesAttribute() 
    { 
        ScopeKeySection = "AdminApi:Scope" 
    });
})
.AddMicrosoftIdentityUI();

如果有部分页面不需要该校验(比如公开页、错误页、登录相关页面),直接在对应PageModel上添加[AllowAnonymous]特性即可。

方案2:修正区域/文件夹约定的路径写法

之前约定不生效大概率是路径参数填写错误:AddAreaFolderApplicationModelConvention的第二个参数是对应区域下Pages文件夹的相对路径,不需要带区域名前缀,示例如下:
假设你的区域结构为 Areas/MyArea/Pages/Manage/*,要给Manage下所有页面加特性,写法如下:

services.AddRazorPages(options =>
{
    options.Conventions.AddAreaFolderApplicationModelConvention(
        areaName: "MyArea",
        folderPath: "/Manage",
        model => model.Filters.Add(new Microsoft.Identity.Web.AuthorizeForScopesAttribute() 
        { 
            ScopeKeySection = "AdminApi:Scope" 
        }));
})
.AddMicrosoftIdentityUI();

如果要给全站非区域页面加,直接用AddFolderApplicationModelConvention,路径填"/"即可。

必要校验项

如果以上方案还是不生效,请检查Program.cs的中间件顺序,必须严格按照以下顺序配置:

app.UseAuthentication();
// 授权中间件必须放在身份验证之后,路由映射之前
app.UseAuthorization();

app.MapRazorPages();

内容的提问来源于stack exchange,提问作者Simone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:54:02