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

Azure AD用户断言报错:缺少Directory.Read.All权限范围的技术咨询

解决"Token missing scope 'Directory.Read.All'"权限问题

我来帮你一步步排查并解决这个令牌权限缺失的问题:

1. 检查UI应用请求令牌的Scope参数

你用ADAL获取令牌时,必须明确指定包含Directory.Read.All的scope,格式要对应你的Web API配置:

  • 如果是Web API自身需要验证这个权限,scope应该是你的Web API的应用ID URI加上权限名称,比如在UI的代码里:
    var requestedScopes = new[] { "api://{你的Web API客户端ID}/Directory.Read.All" };
    var authResult = await authContext.AcquireTokenAsync(requestedScopes, userCredential, clientId);
    
  • 如果你的Web API需要代表用户调用Microsoft Graph的Directory.Read.All接口,那得用**On-Behalf-Of(OBO)**流程:先让UI获取访问Web API的令牌,再由Web API用这个令牌向Azure AD申请访问Graph的令牌。

2. 确认Azure AD中权限的管理员同意状态

Directory.Read.All是需要管理员级同意的委托权限,普通用户没法自行授权。你要登录Azure门户检查:

  • 进入UI应用的「API权限」页面,查看Directory.Read.All权限的状态是否为「已授予{你的租户名称}的管理员同意」。如果显示「需要管理员同意」,点击页面上的「授予管理员同意」按钮完成授权。
  • 同时确认Web API的「API权限」页面是否正确添加了该委托权限(不过你的场景是UI调用Web API,重点还是UI应用的权限配置)。

3. 校验Web API的Bearer验证配置

你的Web API用UseWindowsAzureActiveDirectoryBearerAuthentication做令牌验证,得确保配置正确处理scope:

  • 可以在配置里添加TokenValidationParameters,明确指定要验证的scope和受众:
    private void ConfigureAuthentication(IAppBuilder app)
    {
        app.UseWindowsAzureActiveDirectoryBearerAuthentication(
            new WindowsAzureActiveDirectoryBearerAuthenticationOptions
            {
                Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
                TokenValidationParameters = new TokenValidationParameters
                {
                    ValidAudience = ConfigurationManager.AppSettings["ida:Audience"], // 要和Web API的客户端ID/应用ID URI一致
                    ScopeClaimType = "scp", // 指定存储scope的声明字段
                    // 可选:添加自定义验证逻辑,检查scp是否包含Directory.Read.All
                    ValidateIssuer = true
                }
            });
    }
    
  • 确保ValidAudience设置正确,避免令牌受众不匹配导致的验证失败。

4. 解析令牌确认Scope是否存在

用JWT解析工具查看UI获取的令牌内容,检查scp声明里是否包含Directory.Read.All:

  • 如果scp里没有这个值,说明UI获取令牌时没成功请求到该权限,回到步骤1和2重新排查。
  • 如果scp里有这个值但Web API还是报错,那大概率是Web API的验证逻辑有问题,仔细检查步骤3的配置。

额外提示

ADAL已经被微软官方弃用了,建议你后续迁移到MSAL.NET(Microsoft Authentication Library),它对权限请求、令牌缓存和最新Azure AD特性的支持更完善,能减少这类权限问题的出现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:06:41