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

ASP.NET Core 5 WebAPI集成Azure AD后调用Graph API异常问题咨询

问题解决指引

1. 日历访问权限配置修正

你当前无法获取日历项的核心原因确实和权限授权有关,按以下步骤调整即可:

  • 在Azure AD应用注册的「API权限」页面,确认已添加Graph API的委派权限 Calendars.Read(只读日历)或Calendars.ReadWrite(可编辑日历)
  • 联系租户全局管理员,点击权限列表上方的「为<你的租户名称>授予管理员同意」,完成权限的全局授权,普通用户无法自行同意日历类的高权限接口。

2. 配置文件补充校验

确认appsettings.json中已经补全DownstreamApi节点的配置,确保包含日历相关的权限范围:

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "Domain": "<你的租户域名>",
  "ClientId": "<你的应用ClientId>",
  "TenantId": "<你的租户TenantId>"
},
"DownstreamApi": {
  "BaseUrl": "https://graph.microsoft.com/v1.0",
  "Scopes": "User.Read Calendars.Read"
}

3. 接口调用逻辑示例

直接在控制器中注入GraphServiceClient即可完成调用,无需手动处理Token换发,OBO流逻辑已由Microsoft.Identity.Web库自动处理:

[Authorize]
[ApiController]
[Route("api/[controller]")]
public class GraphProxyController : ControllerBase
{
    private readonly GraphServiceClient _graphServiceClient;

    public GraphProxyController(GraphServiceClient graphServiceClient)
    {
        _graphServiceClient = graphServiceClient;
    }

    [HttpGet("my-events")]
    public async Task<IActionResult> GetMyCalendarEvents()
    {
        var events = await _graphServiceClient.Me.Events
            .Request()
            .Top(20)
            .GetAsync();
        return Ok(events);
    }
}

4. 异常排查方法

如果调整后仍无法访问,可按以下步骤定位问题:

  • 将调用Graph时使用的AccessToken复制到JWT解析工具中,检查scp声明是否包含Calendars.Read,如果缺少说明权限配置未生效
  • 确认你在Postman中请求WebAPI时使用的Token受众是你自己的WebAPI ClientId,不要直接用Graph的Token请求你的WebAPI,OBO流会自动完成Token的换发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:30:00