我正在尝试使用python下载在共享点中托管的Excel文件,该共享点是 Microsoft Azure平台的一部分。共享点受密码保护,我有一个帐户和密码,可用于通过浏览器登录,
为了使用python脚本进行身份验证,我遵循了Sharepoint authentication with python中建议的方法。 它使用 O365 rest python客户端库,操作如下:
console.log(this_button[0]['data-product_id'])
但是我收到一条错误消息:
from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext
url = 'https://organization.sharepoint.com/sites/something/somepage.aspx'
username = 'userx@organization.com'
password = 'fakepass'
ctx_auth = AuthenticationContext(url)
if ctx_auth.acquire_token_for_user(username, password):
ctx = ClientContext(url, ctx_auth)
else:
print(ctx_auth.get_last_error())
我确实从多个设备(浏览器)连接到该帐户,仅一次需要使用MFA登录(SMS消息)。有办法解决这个问题吗?请注意,我不是系统管理员。
答案 0 :(得分:1)
错误消息非常直观,启用多因素身份验证(MFA)时不支持用户凭据身份验证。
为避免此错误,可以改而使用SharePoint App-Only flow(受Office365-REST-Python-Client
library支持)。
Setting up an app-only principal with tenant permissions部分介绍了如何对其进行配置,归纳起来包括两个步骤:
一旦创建并同意了应用程序主体,就可以使用它来访问SharePoint资源,如下所示:
site_url = 'https://contoso.sharepoint.com/'
app_principal = {
'client_id': '--client-id-goes-here--',
'client_secret': '--client-secret-goes-here--',
}
context_auth = AuthenticationContext(url=site_url)
context_auth.acquire_token_for_app(client_id=app_principal['client_id'], client_secret=app_principal['client_secret'])
ctx = ClientContext(site_url, context_auth)
web = ctx.web
ctx.load(web)
ctx.execute_query()
print("Web site title: {0}".format(web.properties['Title']))