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

调用Microsoft Graph读取Azure AD用户报权限不足错误如何解决?

问题原因

你遇到的授权错误基本由两类问题导致:权限配置错误、代码异步写法不规范。


1. 权限配置问题(核心原因)

你使用的是客户端凭证身份验证流(后台服务无用户登录场景),对应权限配置需要满足两个要求:

  • 必须添加应用权限类型的User.Read.All,不能添加委托权限类型的同名权限:委托权限仅适用于有登录用户的场景,服务后台调用Graph的场景不生效
  • 添加权限后必须点击「授予<租户名称>管理员同意」按钮:应用类权限需要租户管理员手动授权才会实际生效,仅添加权限不会自动生效

你已经添加的User.Read权限对读取全租户用户的场景没有作用,可以删除。


2. 代码层面问题

你的GetUsers方法定义为返回值void,但内部使用了await关键字,属于不符合C#异步规范的写法,会导致异常无法正常捕获,甚至出现非预期的运行错误。


修复方案

第一步:修正权限配置

  1. 进入Azure Portal中对应应用注册的「API权限」页面
  2. 删除已添加的所有委托类型的用户相关权限
  3. 点击「添加权限」-> 选择「Microsoft Graph」-> 选择「应用权限」-> 搜索并勾选User.Read.All
  4. 点击权限列表上方的「授予管理员同意」按钮完成授权

第二步:修正代码写法

调整方法返回值为async Task,修正后的参考代码如下:

public async Task GetUsers() {

    var confidentialClient = ConfidentialClientApplicationBuilder
        .Create("my application id")
        .WithTenantId("my tenant id")
        .WithClientSecret("my application secret")
        .Build();

    var graphClient = new GraphServiceClient("https://graph.microsoft.com/beta", new ClientCredentialProvider(confidentialClient));

    var request = graphClient.Users.Request().Filter("accountEnabled eq true");

    var users = await request.GetAsync();
}

可选校验步骤

如果配置完成后仍报错,可以验证权限是否正确下发:

  • 调用Microsoft Identity平台获取令牌接口,用客户端凭证流获取访问令牌
  • 解析JWT令牌,检查roles声明中是否包含User.Read.All,存在则说明权限配置正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:18:04