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

使用Entra的Blazor WASM应用如何限制仅俱乐部成员访问?

基于Entra的Blazor WASM应用授权方案优化

针对你不想手动维护邮箱列表、无需邀请用户进目录的需求,以下几个方案可以实现快速授权:

方案一:Entra自定义属性 + 条件访问 + 自动化审批流

这个方案不需要将用户加入你的Entra目录,仅通过用户的身份标识结合自定义属性做授权校验:

  • 步骤1:添加自定义用户属性:在Entra ID中创建一个扩展属性(比如extension_<你的应用ClientId>_IsAuthorized),用于标记用户是否已授权
  • 步骤2:配置条件访问策略:创建策略,针对你的Blazor应用和WebApi,当用户的IsAuthorized属性不为true时,阻止访问或重定向到你的自定义申请页面
  • 步骤3:搭建申请与审批自动化:在Blazor中添加申请页面,用户提交申请后触发Power Automate流程,你收到审批通知(邮件/Teams消息),审批通过后自动调用Graph API将该用户的IsAuthorized属性设为true
  • 代码层面校验:在Blazor和WebApi中配置授权策略,检查用户Claims中是否存在IsAuthorized=true的声明,示例如下:
// Blazor Program.cs 配置授权策略
builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("Authorized", policy => 
        policy.RequireClaim("IsAuthorized", "true"));
});

// 自定义Claims转换,从Graph API获取用户属性
public class ClaimsTransformer : IClaimsTransformation
{
    private readonly GraphServiceClient _graphClient;

    public ClaimsTransformer(GraphServiceClient graphClient)
    {
        _graphClient = graphClient;
    }

    public async Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
    {
        var userId = principal.FindFirstValue(ClaimTypes.NameIdentifier);
        var user = await _graphClient.Users[userId].Request()
            .Select(u => new { u.Id, u.Extensions })
            .GetAsync();
        
        var isAuthorized = user.Extensions.TryGetValue("extension_xxx_IsAuthorized", out var value) && 
                          value.ToString() == "true";
        
        if (isAuthorized)
        {
            ((ClaimsIdentity)principal.Identity).AddClaim(new Claim("IsAuthorized", "true"));
        }
        return principal;
    }
}

方案二:Entra B2B自助注册 + 审批

如果需要统一管理用户角色,可利用Entra B2B的自助注册功能:

  • 开启自助注册:在Entra ID的外部协作设置中,开启"自助注册B2B用户",配置注册页面的字段(比如申请理由)
  • 设置审批规则:配置审批流程,指定你作为审批人,用户提交注册申请后,你在Entra后台或邮件中审批,通过后用户自动加入你的目录,并可自动分配预设角色
  • 授权校验:直接使用Entra的角色声明做授权,比如在WebApi中用[Authorize(Roles = "User")],无需额外维护邮箱列表

方案三:自定义授权数据库 + 轻量审批后台

如果不想依赖Entra的高级功能,可自己实现轻量授权系统:

  • 存储授权状态:在数据库中创建UserAuthorization表,记录用户的Entra ObjectID、邮箱、授权状态
  • 申请与审批:Blazor应用中添加申请页面,用户提交后你收到通知,在自己开发的后台管理页面中一键标记用户为已授权
  • API校验中间件:WebApi中添加中间件,每次请求验证用户的Entra身份后,查询数据库确认是否已授权,未授权则返回403

各方案对比

方案优点缺点
自定义属性+审批流无需维护目录用户,自动化程度高需要调用Graph API,配置稍复杂
B2B自助注册Entra原生支持,角色管理方便用户会加入你的目录,需要管理目录用户
自定义数据库完全自主控制,灵活度高需要开发维护申请和管理页面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:40:14