Python访问启用MFA的Office 365 SharePoint列表报错及替代方案问询
现有方案报错原因
你之前用到的所有认证方案都是基于传统用户名密码硬编码的方式,在已启用MFA和条件访问策略的SharePoint环境中,微软早已禁用这类低安全级别的认证方式,所以会触发AADSTS系列报错、403权限拒绝是正常结果。
可行替代方案
- 方案1:使用
Office365-REST-Python-Client的交互式浏览器认证
该方案不需要申请客户端ID、不需要管理员权限,认证时会自动唤起默认浏览器完成MFA校验,权限和你个人账号在网页端的SharePoint权限完全一致。
代码示例:from office365.sharepoint.client_context import ClientContext site_url = "https://你的租户.sharepoint.com/sites/你的站点名" ctx = ClientContext(site_url).with_interactive_credentials() # 执行后会弹出浏览器登录,完成MFA验证即可 web = ctx.web.get().execute_query() print(f"站点名称: {web.title}") # 读取列表示例 target_list = ctx.web.lists.get_by_title("你的列表名") items = target_list.items.get().execute_query() for item in items: print(item.properties) - 方案2:复用浏览器Cookie直接调用REST API
如果你无法使用交互式登录,可先在浏览器登录SharePoint完成MFA校验,从浏览器开发者工具的网络请求中复制FedAuth和rtFa两个Cookie值,直接通过requests携带Cookie调用SharePoint REST API,无需额外认证配置。
代码示例:
注意:Cookie有效期通常为几小时,过期后重新从浏览器复制即可。import requests site_url = "https://你的租户.sharepoint.com/sites/你的站点名" list_api_url = f"{site_url}/_api/web/lists/getbytitle('你的列表名')/items" headers = { "Accept": "application/json;odata=verbose", "Cookie": "FedAuth=你复制的FedAuth值; rtFa=你复制的rtFa值" } res = requests.get(list_api_url, headers=headers) print(res.json()) - 方案3:本地同步后直接读取
如果仅需要读取列表数据,可在OneDrive中开启对应SharePoint站点的本地同步功能,Python直接读取本地同步后的列表文件即可,完全不需要处理认证逻辑,适配所有权限限制场景。
内容的提问来源于stack exchange,提问作者Omega
相关产品推荐
相关产品推荐

