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

Azure AD B2C报错:请求中的scope 'files.read'不受支持,如何解决?

问题描述

我为MAUI授权应用配置了Scope(配置截图见指定链接),但代码中设置如下:

public static readonly string[] Scopes = { "files.read", "files.write", };

if (IdentityClient == null)
{
    IdentityClient = PublicClientApplicationBuilder
        .Create(Constants.ClientId)
        .WithAuthority(AzureCloudInstance.AzurePublic, "common")
        .WithB2CAuthority(Constants.AuthoritySignIn)
        .WithIosKeychainSecurityGroup("com.microsoft.adalcache")
        .WithRedirectUri($"msal{Constants.ClientId}://auth")
        .Build();
}

var accounts = await IdentityClient.GetAccountsAsync();
AuthenticationResult result = null;
bool tryInteractiveLogin = false;

try
{
    result = await IdentityClient
        .AcquireTokenSilent(Constants.Scopes, accounts.FirstOrDefault())
        .ExecuteAsync();           
}

调用时触发MSAL异常:

{"error":"invalid_request","error_description":"AADB2C90117: The scope 'files.read' provided in the request is not supported.\r\nCorrelation ID: 23bba783-6562-4111-b097-9282a48e04c6\r\nTimestamp: 2023-06-27 14:56:31Z\r\n"}

请问该异常出现的原因是什么,如何解决?


原因与解决方案

核心原因

  1. 你使用的是Azure AD B2C认证服务,但files.read、files.write属于Microsoft Graph的API权限范围,AD B2C默认不支持直接请求第三方API的Scope,必须完成关联配置后才能使用。
  2. 代码中同时配置了.WithAuthority(AzureCloudInstance.AzurePublic, "common")和.WithB2CAuthority(Constants.AuthoritySignIn),导致认证权限源冲突,AD B2C流程只能保留专属的权限源配置。

解决步骤

  • 修正认证客户端配置
    移除冲突的.WithAuthority配置,确保仅使用AD B2C权限源:

    IdentityClient = PublicClientApplicationBuilder
        .Create(Constants.ClientId)
        .WithB2CAuthority(Constants.AuthoritySignIn)
        .WithIosKeychainSecurityGroup("com.microsoft.adalcache")
        .WithRedirectUri($"msal{Constants.ClientId}://auth")
        .Build();
    
  • 完成AD B2C应用的API权限配置

    1. 登录Azure门户,进入你的AD B2C租户,找到目标MAUI应用的应用注册页面
    2. 进入API权限,点击添加权限,选择Microsoft Graph,添加Files.Read、Files.Write委托权限
    3. 点击授予管理员同意(租户级应用需执行此操作)
    4. 确认配置的Scope名称与代码中完全一致(注意大小写和拼写)
  • 使用完整Scope格式(推荐)
    为避免歧义,建议使用Microsoft Graph Scope的完整格式:

    public static readonly string[] Scopes = { "https://graph.microsoft.com/files.read", "https://graph.microsoft.com/files.write" };
    
  • 补充静默登录失败的处理逻辑
    当前代码未处理静默登录失败的情况,建议添加交互式登录 fallback:

    try
    {
        result = await IdentityClient
            .AcquireTokenSilent(Constants.Scopes, accounts.FirstOrDefault())
            .ExecuteAsync();           
    }
    catch (MsalUiRequiredException)
    {
        // 静默登录失败,触发交互式登录
        result = await IdentityClient
            .AcquireTokenInteractive(Constants.Scopes)
            .ExecuteAsync();
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:22:50