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

Azure AD中SaaS应用自定义权限配置及后续实现咨询

SaaS多租户应用自定义权限与访问管控实现方案

一、设计并配置自定义权限(Azure AD端)

1. 定义应用角色(用户/组级权限)

  • 进入Azure AD应用注册,找到目标应用,切换到应用角色页面。
  • 点击"创建应用角色",针对每个需管控的端点设计对应权限,例如:
    • 名称:Orders.Read,显示名称:"订单只读访问",描述:"允许用户查看本租户下的订单数据",成员类型选择"用户/组"。
    • 名称:Orders.Write,显示名称:"订单读写访问",描述:"允许用户创建、修改本租户下的订单数据"。
  • 保存后,可在Azure AD的用户/组设置中,给特定用户或组分配对应角色。

2. 定义API自定义范围(客户端/细粒度权限)

  • 切换到公开API页面,点击"添加范围":
    • 设置范围名称(如Orders.FullAccess)、显示名称、描述,根据多租户需求选择权限同意范围(如"任何组织目录中的帐户")。
    • 保存后,该范围会作为API权限选项,供客户端请求时指定。

二、确认多租户配置正确性

  • 在应用注册概述页面,检查"支持的帐户类型"是否设置为任何组织目录中的帐户(若需支持外部来宾,可选择包含个人Microsoft帐户的选项)。
  • 确保已配置的重定向URI为内部服务器可访问地址,生产环境必须使用HTTPS,测试环境可临时使用HTTP(不推荐)。

三、后端实现权限验证与端点管控

1. 登录流程中请求权限

  • 在OAuth2.0/OpenID Connect授权请求的scope参数中,包含自定义权限范围与基础OpenID Connect范围,示例:
    scope=openid profile api://<你的应用ID>/Orders.Read

2. 端点权限校验

  • 在后端每个需管控的端点,解析请求携带的Access Token,检查权限声明:
    • 应用角色对应声明类型为roles,自定义API范围对应声明类型为scp。
  • 伪代码示例(.NET环境):
// 校验订单写权限
var hasOrderWritePermission = HttpContext.User.Claims.Any(c => 
    c.Type == "roles" && c.Value == "Orders.Write");

if (!hasOrderWritePermission)
{
    return StatusCode(403, "无订单修改权限");
}

四、租户隔离逻辑实现

  • 用户登录后,从ID Token中提取tid(租户ID)声明,绑定到当前请求上下文或用户会话。
  • 在数据访问层,所有查询操作必须带上租户ID作为过滤条件,确保用户仅能访问所属租户数据,示例:
SELECT * FROM Orders WHERE TenantId = @CurrentTenantId
  • 结合租户ID与应用角色,实现租户级权限隔离,例如限制租户管理员仅能管理本租户内的权限分配。

五、测试与验证

  • 使用Azure AD应用注册中的"快速启动"工具生成测试代码,模拟不同租户、不同权限的用户登录,检查返回的Token中是否包含预期权限声明。
  • 针对每个端点,分别用拥有对应权限和无权限的用户发起请求,验证权限管控逻辑是否生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:05:27