如何无需登录与管理员同意,通过Flask API调用GraphAPI读取Excel内容
错误根因
当前你使用的客户端凭证流调用Graph API,必须要求Azure管理员为应用分配Files.Read.All等对应应用权限,并授予全局管理员同意,否则生成的访问令牌缺少对应权限声明,就会返回scp or roles claim need to be present的错误,该流在无管理员权限的场景下完全不可用。
无管理员同意、无需前端登录的可行方案
- 方案1:直接获取文件匿名直链本地解析
如果你有权限调整对应Excel文件的共享设置,可以将文件设置为所有拥有链接的人均可查看,获取文件的直接下载链接后,直接用requests下载文件,再用openpyxl/pandas等库本地解析内容,全程不需要调用Graph API,也不需要任何认证逻辑。
示例核心代码:import pandas as pd import requests from io import BytesIO # 替换为公开共享后的Excel文件直链 file_url = "替换为你的Excel文件公开下载链接" res = requests.get(file_url) # 可按需指定读取范围 df = pd.read_excel(BytesIO(res.content), sheet_name="Sheet1", usecols="A:V", nrows=500) print(df.values) - 方案2:使用委派权限+预生成刷新令牌
无需管理员同意,只需拥有该Excel访问权限的普通用户完成一次授权即可,后续可以无交互调用接口:- 在Azure应用注册中,配置平台为
移动和桌面应用,添加委派权限Files.Read,该权限无需管理员同意 - 首次手动走授权码流,让有权限的用户登录同意,获取
refresh_token并持久化存储 - 后续API调用时直接用
refresh_token换取访问令牌,不需要用户再次登录,也无需管理员操作
- 在Azure应用注册中,配置平台为
- 方案3:将文件同步到自主可控存储
如果上述方案都不可行,可以将目标Excel文件通过自动同步规则(如OneDrive同步客户端、Power Automate定时导出)同步到你有权限访问的本地服务器、对象存储等位置,直接读取本地存储的文件即可,不需要调用微软接口。
内容的提问来源于stack exchange,提问作者Kiran Thakur
相关产品推荐
相关产品推荐

