Azure AD多租户.NET桌面应用获取令牌遇AADSTS650057错误求助
问题描述
我在.NET桌面程序中使用Azure AD多租户应用获取交互式访问令牌,用于发送邮件。已拥有客户端ID、租户(organizations)、重定向URL(http://localhost),该应用在我的机器上运行正常。将此演示应用提供给同组织队友,让他用自己的邮箱获取访问令牌(使用相同客户端ID和重定向URL),交互式窗口正常显示,但登录后出现以下错误:
AADSTS650057: 无效资源。客户端请求访问的资源未在其应用注册的请求权限列表中列出。客户端应用ID:---clientId---(App2)。请求中的资源值:https://outlook.office365.com。资源应用ID:00000002-0000-0ff1-ce00-000000000000。应用注册中的有效资源列表:00000003-0000-0000-c000-000000000000。
Trace ID: deada8ff-60ac-4051-877a-093aa1af8f00
Correlation ID: ddc9c0b7-d6dd-40dd-8331-6f592db6a401
Timestamp: 2023-10-18 17:51:45Z
API权限

演示代码
pca = PublicClientApplicationBuilder .Create(ClientId) .WithAuthority(AzureCloudInstance.AzurePublic, Tenant) .WithRedirectUri(RedirectUrl) .Build(); var outlookScope = new string[] {"https://outlook.office365.com/.default"}; if (accountsResult.Any()) { try { var acquireSilentTask = Task.Run(() => pca .AcquireTokenSilent(outlookScope, accountsResult.FirstOrDefault()) .ExecuteAsync()); // 阻塞调用以静默方式获取令牌 result = acquireSilentTask.Result; } catch { throw; } } else { try { var acquireInteractiveTask = Task.Run(() => pca .AcquireTokenInteractive(outlookScope) .ExecuteAsync()); // 阻塞调用以交互式方式获取令牌 result = acquireInteractiveTask.Result; } catch { throw; } }
解决方案
- 补充Exchange Online权限
错误显示请求的资源是Exchange Online(应用ID00000002-0000-0ff1-ce00-000000000000),但当前应用注册仅配置了Microsoft Graph(应用ID00000003-0000-0000-c000-000000000000)的权限。登录Azure门户,找到对应应用注册,进入API权限页面,添加Exchange Online的委派权限(如Mail.Send),并完成管理员同意(若权限要求)。 - 验证权限同步状态
添加权限后等待10-15分钟,确保Azure AD将权限配置同步到队友所在的租户。 - 调整作用域(可选)
若改用Microsoft Graph实现邮件发送,可将代码中的作用域改为https://graph.microsoft.com/Mail.Send,同时确保应用注册中已添加Microsoft Graph的Mail.Send权限。 - 检查租户策略限制
确认队友所在租户的安全策略未限制多租户应用的权限使用。
内容的提问来源于stack exchange,提问作者It's Siddiqi
相关产品推荐
相关产品推荐

