使用Azure Function托管身份调用Microsoft Graph API获取工作表
问题解答
关于Get Worksheet API的应用权限支持问题
是的,你理解的没错:Get Worksheet操作不支持应用权限(Application Permission),所以无法直接通过Azure Function的托管身份调用这个API。Graph API文档中“Least privileged permissions”显示“Not supported”,意味着该接口仅支持委托权限(Delegated Permission)——即必须以某个具体用户的身份发起调用,而不能使用服务身份(如Azure Function托管身份这类无用户交互的服务主体)直接访问。
替代方案:用Azure Function托管身份读取Teams中Excel内容的可行路径
方案1:通过Graph DriveItem API获取文件二进制内容,本地解析
- 给Azure Function的托管身份授予
Files.Read.All应用权限(该权限允许服务身份访问Teams关联的SharePoint/OneDrive文件) - 定位目标Excel文件:
- 先通过团队ID调用
GET /groups/{groupId}/drive获取团队默认文档库的Drive ID - 再通过文件路径或名称找到对应的DriveItem ID
- 先通过团队ID调用
- 调用
GET /drives/{drive-id}/items/{item-id}/content获取Excel文件的二进制流 - 在Function中使用EPPlus、NPOI等Excel处理库直接解析二进制内容
方案2:借助SharePoint REST API读取文件
Teams的文件实际存储在关联的SharePoint站点中,可直接调用SharePoint REST API:
- 给托管身份授予
Sites.Read.All应用权限 - 通过团队ID获取对应的SharePoint站点:
GET /groups/{groupId}/sites/root - 调用SharePoint API定位并获取文件内容,再用Excel库解析
方案3:低代码中间层(Logic Apps)
如果场景允许低代码实现,可使用Azure Logic Apps的Teams/Excel连接器,通过托管身份授权读取Excel内容后,再传递给Azure Function处理。此方案适合无需复杂自定义解析逻辑的场景。
内容的提问来源于stack exchange,提问作者DeMaki
相关产品推荐
相关产品推荐

