使用 Python 访问 Office365 Sharepoint REST 端点(适用于 Python 的 Office365 Sharepoint REST 客户端)

Posted

技术标签:

【中文标题】使用 Python 访问 Office365 Sharepoint REST 端点(适用于 Python 的 Office365 Sharepoint REST 客户端)【英文标题】:Accessing Office365 Sharepoint REST EndPoints using Python (Office365 Sharepoint REST client for Python) 【发布时间】:2020-12-20 21:45:38 【问题描述】:

我正在尝试从 Python 访问 Sharepoint 站点,但 AADSTS 似乎有一个条件访问策略阻止我获取令牌。

有没有人使用 Office365 Python Rest Client 成功连接到 Sharepoint Rest Endpoint?

这是我看到的实际错误

"C:\Python\envs\dev\python.exe c:\Users\xxxxxx.vscode\extensions\ms-python.python-2020.8.105369\pythonFiles\lib\python\debugpy\launcher 52801 -- c:\xxxx\Code\PythonSharepointUpdate\readsharepoint.py " An error occurred while retrieving token from XML response: AADSTS53003: Access has been blocked by Conditional Access policies. The access policy does not allow token issuance. An error occurred while retrieving auth cookies from https://microsoft.sharepoint.com/_vti_bin/idcrl.svc/
I am trying to execute this code from the Sample

    from office365.runtime.auth.user_credential import UserCredential 
    from office365.sharepoint.client_context import ClientContext 
    from office365.runtime.auth.authentication_context import AuthenticationContext 
    site_url = 'https://microsoft.sharepoint.com/teams/' 
    ctx = ClientContext(site_url).with_credentials(UserCredential("user@domain.com", "My Complex Password”)) 
    web = ctx.web 
    ctx.load(web) 
    ctx.execute_query() 
    print("Web title: 0".format(web.properties['Title']))

另外 – 有没有更好的方法来验证 Sharepoint – 我讨厌必须在代码中以明文形式输入我的密码☹

有人使用 ClientCredential 吗? Sharepoint 站点上是否有单独的设置来启用 ClientCredential?我们的 Sharepoint 是否允许我们这样做?

【问题讨论】:

【参考方案1】:

诀窍是使用 ClientCredentials 而不是 UserCredentials。

必须使用新的 ClientID 和 Client Secret 在 Sharepoint 站点上创建一个新应用程序。创建新应用后,必须为新创建的应用授予网站权限。设置权限后,您必须信任该应用。

完整的解释和步骤记录在这里https://github.com/vgrem/Office365-REST-Python-Client/wiki/How-to-connect-to-SharePoint-Online-and-and-SharePoint-2013-2016-2019-on-premises--with-app-principal

【讨论】:

以上是关于使用 Python 访问 Office365 Sharepoint REST 端点(适用于 Python 的 Office365 Sharepoint REST 客户端)的主要内容,如果未能解决你的问题,请参考以下文章

Python 使用office365邮箱

Python 使用office365邮箱

在没有 Office 365 订阅的情况下使用 Azure 多租户应用程序访问用户日历信息

在 Office365 中访问 Exchange CustomAttribute1

office365 邮箱用户完全访问权限管理介绍

如何访问 Lync Online (Office 365) 的 UCWA 终结点?