如何为API服务账户授予特定Microsoft Office365文档访问权限?
Microsoft技术栈中读取特定Excel文档的等效操作
在微软技术栈中,对应Google Cloud服务账户的方案是使用Azure AD服务主体,结合OneDrive/SharePoint的权限共享 + Microsoft Graph API来实现脚本对特定Excel文档的读取权限,具体操作如下:
1. 创建Azure AD服务主体
- 登录Azure门户,进入「Azure Active Directory」→「应用注册」,创建新的应用程序(即服务主体)。
- 记录生成的客户端ID、租户ID,并创建客户端密钥(或使用证书,安全性更高)。
2. 为服务主体授予Excel文档读取权限
手动共享方式(适用于单个文件)
- 打开存储Excel文件的OneDrive for Business或SharePoint库,找到目标文件。
- 在文件的共享设置中,添加服务主体的显示名称(或客户端ID对应的应用名称),授予「读取」权限。
脚本批量授权方式(适用于多文件)
使用PowerShell结合Microsoft Graph PowerShell模块完成:
# 连接到Microsoft Graph Connect-MgGraph -TenantId "你的租户ID" -ClientId "你的客户端ID" -ClientSecret "你的客户端密钥" # 替换为目标Excel文件的ID(可通过Graph Explorer查询获取) $fileId = "目标文件ID" # 替换为服务主体的应用ID和你的租户域名 $servicePrincipalEmail = "服务主体客户端ID@你的租户域名.onmicrosoft.com" # 授予读取权限 New-MgDriveItemPermission -DriveItemId $fileId -Roles @("read") -Recipient @{"emailAddress" = $servicePrincipalEmail}
3. 编写脚本读取Excel内容
以Python为例,使用Microsoft Graph SDK实现:
from msgraph import GraphServiceClient from azure.identity import ClientSecretCredential # 初始化身份凭证 credential = ClientSecretCredential( tenant_id="你的租户ID", client_id="你的客户端ID", client_secret="你的客户端密钥" ) graph_client = GraphServiceClient(credential) # 读取OneDrive中的Excel文件内容 drive_id = "存储文件的驱动器ID" file_id = "目标Excel文件ID" worksheet_id = "目标工作表ID" # 获取工作表指定范围的数据 range_data = graph_client.drives.by_drive_id(drive_id).items.by_drive_item_id(file_id).workbook.worksheets.by_worksheet_id(worksheet_id).range("A1:C10").get() print(range_data.values)
补充说明
- 如果脚本部署在Azure服务(如Azure Function、VM)上,可使用Azure AD托管身份替代手动创建的服务主体,无需管理密钥,安全性更强。
- 所有操作依赖Microsoft Graph API权限,需在应用注册中为服务主体添加「Files.Read」等必要的API权限(需管理员同意)。
内容的提问来源于stack exchange,提问作者David Wolever
相关产品推荐
相关产品推荐

