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

基于MS Graph管理AAD B2C账户的权限模式选择咨询

问题描述

我已使用MS Graph实现了管理AAD B2C账户的应用,遵循官方文档在B2C租户中注册了MS Graph应用,当前采用客户端凭据提供程序,可创建、修改用户。现计划添加登录页,已配置使用授权码流且以Entra ID为外部身份提供商的登录/注册用户流。请问此场景下是否可通过委托访问(代表Entra用户/账户访问)调用Graph API?若不可行,继续使用仅应用访问是否可行?

编辑(2024年5月30日)
实际上我不确定此场景下使用委托访问是否合理,若我的理解有误请指正。具体场景为:外部AAD中的用户登录我的应用后,尝试管理B2C租户中的本地账户。我对委托访问的理解是用户同意应用代表其访问某资源,但该用户本身对资源并无所有权或权限(不像已配置API权限的应用)。那么,是否更合理的方式是从AAD传递组/角色声明到令牌中用于访问控制(例如控制登录用户是否可查看“用户管理”菜单),而Graph API访问仍采用仅应用访问(客户端凭据流)?

解答

委托访问的可行性与合理性分析

可以通过委托访问调用Graph API,但并不适配你的场景:

  • 前提要求:外部Entra ID用户必须在B2C租户中存在关联身份(比如通过用户流创建的账户,或是作为来宾用户被添加),同时B2C的MS Graph应用需配置对应委托权限并完成管理员同意,且该用户在B2C租户中需拥有账户管理的权限(如分配目录角色)
  • 核心矛盾:你的场景中,外部Entra ID用户本身并非B2C租户的权限用户,即便走委托访问,用户自身没有B2C的操作权限,调用Graph API时会因权限不足失败,因此这种方式不适用。

仅应用访问的可行性与优化方案

继续使用仅应用访问(客户端凭据流)完全可行,且是更适配你场景的方案:

  • 仅应用访问的权限直接赋予应用本身,不依赖登录用户的权限,能稳定实现B2C账户的创建、修改等管理操作
  • 你提到的通过AAD传递组/角色声明做访问控制的思路完全正确:
    • 在外部Entra ID中为用户分配对应角色或组,配置用户流将这些角色/组声明包含到登录后的ID令牌中
    • 你的应用根据令牌中的声明,在业务层控制用户的操作范围:比如判断用户是否有权限进入“用户管理”菜单,或只能执行查看、不能执行修改操作
    • 所有Graph API的调用仍由应用通过客户端凭据流发起,应用持有B2C账户管理的权限,登录用户的操作边界由应用层的访问控制逻辑限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:53:27