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

ASP.NET Core Web API调用Graph报AADSTS65001错误求助

AADSTS65001 报错根因

该错误是代理流(On-Behalf-Of, OBO)全链路权限配置缺失导致:你仅在Web API应用注册中配置了Microsoft Graph的委托权限,但前端Web应用获取初始访问令牌时,没有申请对应的Graph权限,用户从未对这些Graph权限完成授权,Web API拿前端传过来的访问令牌向AAD申请Graph访问令牌时,AAD判定无对应权限授权,直接抛出异常。

修复步骤

1. 补全前端Web应用的权限配置

  • 进入Azure AD中前端MVC Web应用的注册页,打开「API权限」板块
  • 除了已添加的自定义Web API权限api://<web-api-client-id>/scope.name,额外添加你在DownstreamApi中配置的所有Microsoft Graph委托权限:User.Read、Presence.Read、MailboxSettings.Read、Mail.Read、Calendars.Read、Files.ReadWrite
  • 对新增的所有Graph权限执行「授予管理员同意」操作

2. 修改前端令牌获取逻辑

前端向AAD申请访问Web API的令牌时,必须将需要的Graph权限和自定义API权限一起写入scope参数,让用户登录环节一次性完成所有委托权限的授权,示例代码:

// 申请令牌时传入全量所需权限
var scopes = new string[] {
    "api://<your-web-api-client-id>/scope.name",
    "user.read",
    "presence.read",
    "mailboxsettings.read",
    "mail.read",
    "calendars.read",
    "files.readwrite"
};

如果前端使用增量同意机制,需要确保调用API收到授权挑战响应时,能自动触发增量授权流程补全缺失权限。

3. 修正Web API侧配置与代码问题

  • 补全Web API的AzureAD配置项:OBO流兑换令牌需要Web API提供自身客户端凭证做认证,必须在AzureAd配置块中添加提前在Azure AD中创建的客户端密钥:
"AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "租户域名",
    "TenantId": "租户ID",
    "ClientId": "Web API客户端ID",
    "ClientSecret": "Web API客户端密钥"
}
  • 移除控制器中的同步阻塞调用:不要使用.GetAwaiter().GetResult()同步等待异步方法,会引发线程池死锁,改为标准异步await调用:
[HttpGet]
public async Task<ActionResult<IEnumerable<DealDto>>> GetDealsWithAccount()
{
    // 直接await异步调用Graph接口
    User user = await _graphServiceClient.Me.Request().GetAsync();
    // 业务逻辑处理
    return Ok();
}
  • 确认DownstreamApi中配置的所有Graph权限均为委托类型权限,OBO流不支持应用类型权限。

4. 验证结果

清除浏览器本地登录缓存,重新登录前端Web应用,完成权限授权后再次调用对应API接口,即可正常获取Microsoft Graph返回数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:36:15