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

如何实现Office 365 Server-to-Server集成并调用Microsoft Graph API?

可以实现Server-to-Server的Microsoft Graph集成

当然可以!这种不需要用户交互的服务端定时任务场景,正好适合用Microsoft Graph的**客户端凭据流(Client Credentials Flow)**来实现服务到服务的集成,完全不用依赖用户登录重定向的流程。下面给你一步步拆解实现方式:

1. 先在Azure AD中注册服务应用

  • 登录Azure门户,注册一个单租户或多租户应用(根据你的组织需求选择)
  • 给应用添加应用权限(注意是「应用权限」不是「委托权限」,因为没有用户参与交互),比如要读取文件元数据可以加Files.Read.All,读取Groups/Teams信息加Group.Read.All,添加后必须由租户管理员完成管理员同意,否则API调用会失败
  • 生成认证凭据:推荐用证书(安全性更高),也可以生成客户端密钥,后续用来获取访问令牌

2. 通过客户端凭据流获取访问令牌

你可以用Microsoft官方的身份认证库(比如Microsoft.Identity.Client)来简化令牌获取流程,以C#为例:

using Microsoft.Identity.Client;

var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "你的Office 365租户ID";
var clientId = "Azure AD中注册的应用ID";
var clientSecret = "你生成的客户端密钥"; // 如果用证书的话,这里换成证书相关配置

var confidentialClient = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithClientSecret(clientSecret)
    .WithAuthority(new Uri($"https://login.microsoftonline.com/{tenantId}"))
    .Build();

// 获取应用级别的访问令牌
var authResult = await confidentialClient.AcquireTokenForClient(scopes).ExecuteAsync();
var accessToken = authResult.AccessToken;

这里的https://graph.microsoft.com/.default表示使用你在应用注册时配置的所有应用权限。

3. 调用Microsoft Graph API获取文件元数据

拿到令牌后,就可以调用Graph API获取Groups/Teams的文件信息了,同样以C#为例(用Microsoft.Graph库):

using Microsoft.Graph;
using System.Net.Http.Headers;

var graphClient = new GraphServiceClient(
    new DelegateAuthenticationProvider((requestMessage) =>
    {
        requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
        return Task.CompletedTask;
    }));

// 示例:获取指定Team/Group下的所有文件元数据
var targetGroupId = "你要访问的Group/Team的ID";
var driveItems = await graphClient.Groups[targetGroupId].Drive.Root.Children
    .Request()
    .Select("id, name, createdDateTime, lastModifiedDateTime, size, webUrl") // 指定要获取的元数据字段
    .GetAsync();

// 遍历处理获取到的文件信息
foreach (var item in driveItems)
{
    Console.WriteLine($"文件名: {item.Name}");
    Console.WriteLine($"大小: {item.Size} bytes");
    Console.WriteLine($"最后修改时间: {item.LastModifiedDateTime}");
    Console.WriteLine($"文件链接: {item.WebUrl}\n");
}

关键注意事项

  • 应用权限必须经过租户管理员同意,个人账号无法完成这个操作
  • 遵循最小权限原则:只给应用完成任务必需的权限,不要分配过高权限
  • 定时任务的实现:可以用Windows任务计划、Linux Cron,或者云服务比如Azure Functions Timer Trigger来定期执行这段代码
  • 安全性建议:优先使用证书代替客户端密钥,避免密钥泄露风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:09:08