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

Python访问SharePoint列表遇AADSTS50059认证错误求助

SharePoint认证报错AADSTS50059的解决方案

问题描述

尝试用Python访问SharePoint列表并导出为CSV文件时,认证环节触发如下错误:

('Error authenticating against Office 365. Error from Office 365:',
'AADSTS50059: No tenant-identifying information found in either the
request or implied by any provided credentials.')

已尝试两种认证方式,均触发相同错误,代码如下:

from config import config

from shareplum import Site 
from shareplum import Office365
from shareplum.site import Version
from requests_ntlm import HttpNtlmAuth

from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext

base_path = config.config['sp_base_path']
username = config.config['sp_user']
password = config.config['sp_password']


##Approach 1
# cred = HttpNtlmAuth('myusername@domain.com', 'Password')
# site = Site('https://xxxxxx.sharepoint.com/logs/Lists/Logs%20Entries/All%20Items.aspx', auth=cred)


##Approach 2
# authcookie = Office365(base_path, username=username, password=password).GetCookies()
# site = Site('https://xxxxxx.sharepoint.com/logs/Lists' ,version=Version.v365, authcookie=authcookie)

错误原因

AADSTS50059错误本质是请求未提供足够的租户识别信息,导致Office 365无法定位对应的认证租户。两种方式的具体问题:

  • 方式1:HttpNtlmAuth适用于本地部署的SharePoint Server,云端SharePoint Online不支持该认证方式,因此无法完成租户认证。
  • 方式2:使用的URL路径错误(https://xxxxxx.sharepoint.com/logs/Lists不是有效站点根URL),且Office365实例初始化时可能未传入正确的租户根域名,导致无法识别租户。

解决方案

方案1:修正Shareplum认证逻辑

针对SharePoint Online,需使用正确的站点根URL初始化Office365实例,获取认证Cookie后再访问目标列表:

from config import config
from shareplum import Site 
from shareplum import Office365
from shareplum.site import Version
import csv

# 替换为你的SharePoint站点根URL
site_root_url = "https://xxxxxx.sharepoint.com/logs"
username = config.config['sp_user']
password = config.config['sp_password']

# 获取认证Cookie(需传入租户根域名)
auth_cookies = Office365("https://xxxxxx.sharepoint.com", username=username, password=password).GetCookies()
# 连接到目标站点
site = Site(site_root_url, version=Version.v365, authcookie=auth_cookies)
# 获取目标列表
target_list = site.List("Logs Entries")
# 拉取列表数据
list_data = target_list.GetListItems()

# 导出为CSV文件
with open("sharepoint_logs.csv", "w", newline="", encoding="utf-8") as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=list_data[0].keys())
    writer.writeheader()
    writer.writerows(list_data)

方案2:使用Office365 Python SDK完成认证与数据导出

借助官方SDK的UserCredential认证方式,确保站点URL和账号信息正确:

from config import config
from office365.sharepoint.client_context import ClientContext
from office365.runtime.auth.user_credential import UserCredential
import csv

site_url = "https://xxxxxx.sharepoint.com/logs"
username = config.config['sp_user']
password = config.config['sp_password']

# 初始化客户端上下文并完成认证
ctx = ClientContext(site_url).with_credentials(UserCredential(username, password))
# 获取目标列表
target_list = ctx.web.lists.get_by_title("Logs Entries")
# 拉取列表项数据
list_items = target_list.get_items().execute_query()

# 整理数据(过滤odata前缀的属性)
export_data = []
for item in list_items:
    clean_item = {k: v for k, v in item.properties.items() if not k.startswith('odata')}
    export_data.append(clean_item)

# 导出为CSV
with open("sharepoint_logs.csv", "w", newline="", encoding="utf-8") as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=export_data[0].keys())
    writer.writeheader()
    writer.writerows(export_data)

关键注意事项

  • 云端SharePoint Online不支持NTLM认证,请勿使用HttpNtlmAuth方式。
  • 所有URL需使用SharePoint站点的根URL(如https://xxx.sharepoint.com/sites/xxx),而非列表页面或片段路径。
  • 认证账号需为完整的Azure AD账号格式(如user@yourtenant.onmicrosoft.com),且具备目标站点和列表的访问权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:17:09