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

基于Azure AD on-behalf-of流限制用户MS Graph访问权限的方案咨询

方案合理性验证与核心疑问解答

你的整体设计思路是合理的,针对你最关心的「Web API能否代表仅持有User.Read scope的用户申请更高权限」的问题,分两种场景明确说明:

  1. 若走委托权限的OBO流:无法实现。OBO流要求用户本身已被授予对应权限的许可,申请的scopes不能超出用户已有权限范围,仅持有User.Read的用户无法通过OBO流获取更高权限的委托令牌。
  2. 若走客户端凭据流获取应用级权限令牌:完全可以实现。应用级权限是你提前为Web API的服务主体在AAD中单独授予的,和前端用户持有的令牌权限无关,只要你在Web API层做好角色校验即可,也刚好匹配你需要执行委托权限不支持的操作(如创建用户)的需求。

流程优化建议

你原流程中混淆了OBO流和应用权限的使用逻辑,调整后的正确落地方案如下:

  • 1~6步保持不变:SPA端仅申请最低权限User.Read完成登录,用户发起高权限操作时,将用户令牌作为Bearer凭证传给Web API;Web API首先验证令牌有效性,再校验用户所属的AAD角色,仅Administrator角色可进入后续流程,Viewer角色直接返回403拒绝访问。
  • 第7步调整:Web API不需要使用OBO流,直接通过客户端凭据流(使用自身的客户端ID、客户端密钥/证书)向AAD申请Graph的User.ReadWrite.All、Directory.ReadWrite.All应用权限令牌即可。
  • 8~9步保持不变:Web API用申请到的应用权限令牌调用MS Graph接口,完成操作后将结果返回给SPA。

关键注意事项

  • 应用级权限的权限等级极高,所有调用高权限Graph接口的Web API接口必须做严格的角色校验,避免越权访问。
  • Web API的客户端密钥/证书必须妥善存储,推荐使用密钥管理服务保管,禁止硬编码到代码或公开配置中。
  • 仅当你需要执行必须关联用户身份的委托权限操作时,再考虑使用OBO流,当前创建用户的场景使用客户端凭据流更适配。

替代方案参考

如果不想额外维护Web API的权限逻辑,也可以使用AAD的应用角色功能,为SPA对应的应用注册配置Administrator、Viewer两个角色,在前端MSAL初始化时根据用户角色限制可申请的scopes。但该方案的权限限制在前端实现,可被用户手动篡改绕过,安全性远低于带后端校验的方案,仅适合非敏感场景使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:39:01