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

如何基于Azure Active Directory安全组控制Razor Page内容可见性与访问权限

前置配置

首先你需要先在Azure AD应用注册中完成组声明配置,让用户登录后令牌中携带所属安全组信息:

  • 进入Azure Portal的「Azure Active Directory」-「应用注册」,找到你的项目对应的应用
  • 左侧菜单选择「令牌配置」,点击「添加组声明」
  • 勾选「安全组」,根据你的需要选择返回组的Object ID(推荐,稳定性更高)或sAMAccountName(组名),保存配置

问题1:仅向APP-Administrator用户组的用户展示Settings页面链接

完成上述配置后,你可以在Index.cshtml中通过判断当前用户的所属组权限,动态渲染链接:

  1. 先在Program.cs中配置角色声明映射,简化权限判断逻辑:
builder.Services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
    // 指定角色声明对应令牌中的groups字段
    options.TokenValidationParameters.RoleClaimType = "groups";
});
  1. 在Index.cshtml中加入权限判断逻辑:
@if (User.IsInRole("这里替换为APP-Administrator组的Object ID或组名"))
{
    <a asp-page="Settings">设置</a>
}

非管理员用户访问Index页面时,不会看到这个链接。


问题2:阻止非管理员用户直接通过URL访问Settings页面

有两种常用实现方式,选其一即可:

方式1:通过Authorize特性直接标记页面

在Settings.cshtml.cs的PageModel类上添加[Authorize]特性,指定允许访问的角色:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.RazorPages;

[Authorize(Roles = "这里替换为APP-Administrator组的Object ID或组名")]
public class SettingsModel : PageModel
{
    // 页面原有逻辑
}

方式2:通过 Razor Pages 约定全局配置

适合需要统一管理多页面权限的场景,在Program.cs中添加配置:

// 先添加授权策略
builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("AdministratorOnly", policy =>
        policy.RequireRole("这里替换为APP-Administrator组的Object ID或组名"));
});

// 给Settings页面绑定授权策略
builder.Services.AddRazorPages()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Settings", "AdministratorOnly");
    });

配置完成后,非管理员用户直接访问Settings页面URL时,会自动返回403禁止访问错误。


注意:如果用户所属安全组超过200个,Azure AD不会在令牌中返回全量组列表,这种场景你需要调用Microsoft Graph API查询用户是否属于目标组,再做权限判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:54:01