使用Python的Azure Sharepoint多因素身份验证

时间:2019-04-30 14:09:58

标签: python azure authentication sharepoint

我正在尝试使用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消息)。有办法解决这个问题吗?请注意,我不是系统管理员。

1 个答案:

答案 0 :(得分:1)

错误消息非常直观,启用多因素身份验证(MFA)时不支持用户凭据身份验证。

为避免此错误,可以改而使用SharePoint App-Only flow(受Office365-REST-Python-Client library支持)。

Setting up an app-only principal with tenant permissions部分介绍了如何对其进行配置,归纳起来包括两个步骤:

  1. 注册应用程序主体(将其视为“服务帐户”)
  2. 授予权限

一旦创建并同意了应用程序主体,就可以使用它来访问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']))