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

如何通过Microsoft Graph API获取同组织其他用户的Outlook日历事件?

解决获取其他用户Outlook日历事件的访问拒绝问题

核心原因

获取其他用户日历事件不能用获取自身事件时的委托权限,必须使用应用权限且完成管理员同意。委托权限仅允许访问当前登录用户的资源,应用权限则赋予应用本身访问组织内所有用户日历的权限(前提是配置对应权限并完成管理员同意)。

所需权限

在Azure AD应用注册中添加以下应用权限之一:

  • Calendars.Read:只读访问所有用户日历事件
  • Calendars.ReadWrite:读写访问所有用户日历事件

添加后必须由全局管理员或Exchange管理员完成管理员同意,否则权限不会生效。

正确代码示例(客户端凭据流)

先安装必要的NuGet包:

Install-Package Microsoft.Graph
Install-Package Microsoft.Identity.Client

使用客户端凭据流初始化GraphServiceClient并调用接口:

using Microsoft.Graph;
using Microsoft.Identity.Client;
using System.Collections.Generic;
using System.Threading.Tasks;

public async Task<List<Event>> FetchOtherUserCalendarEvents(string targetUserId)
{
    // 应用注册配置信息
    string clientId = "你的应用ID";
    string tenantId = "你的租户ID";
    string clientSecret = "你的客户端密钥";

    // 初始化客户端凭据认证提供器
    var confidentialClient = ConfidentialClientApplicationBuilder
        .Create(clientId)
        .WithTenantId(tenantId)
        .WithClientSecret(clientSecret)
        .Build();

    var authProvider = new ClientCredentialProvider(confidentialClient);

    // 构建GraphServiceClient实例
    var graphClient = new GraphServiceClient(authProvider);

    // 获取目标用户日历事件
    var eventsResult = await graphClient.Users[targetUserId].Calendar.Events
        .Request()
        .Select("subject,body,bodyPreview,organizer,attendees,start,end,location")
        .GetAsync();

    return eventsResult.ToList();
}

注意事项

  • targetUserId必须是目标用户的用户主体名称(UPN)或Azure AD对象ID,不能使用显示名称
  • 检查Azure AD应用注册的"API权限"页面,确认权限状态为"已授予"(管理员同意完成)
  • 若仅需访问特定用户的日历,也可让用户手动共享日历给应用,但此方式不适合批量访问组织内用户的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:06:00