【问题标题】:Office365-REST-Python-Client Access Token issueOffice365-REST-Python-客户端访问令牌问题
【发布时间】:2019-07-29 18:32:58
【问题描述】:

我发现了许多使用 Office365-REST-Python-Client 的示例,但是,它们都没有正确获取访问令牌。我已经在 Azure 门户下注册了一个应用程序,使用“应用程序权限”授予它 API 权限,创建了一个秘密,并在我的设置字典中使用了 client_secret 和 client_id 以在下面的代码中使用。

def read_folder_and_files(context, list_title):
    """Read a folder example"""
    list_obj = context.web.lists.get_by_title(list_title)
    folder = list_obj.root_folder
    context.load(folder)
    context.execute_query()
    print("List url: {0}".format(folder.properties["ServerRelativeUrl"]))

    files = folder.files
    context.load(files)
    context.execute_query()
    for cur_file in files:
        print("File name: {0}".format(cur_file.properties["Name"]))

    folders = context.web.folders
    context.load(folders)
    context.execute_query()
    for folder in folders:
        print("Folder name: {0}".format(folder.properties["Name"]))


if __name__ == '__main__':
    ctx_auth = AuthenticationContext(url=settings['url'])
    if ctx_auth.acquire_token_for_app(client_id=settings['client_credentials']['client_id'],
                                      client_secret=settings['client_credentials']['client_secret']):
        ctx = ClientContext(settings['url'], ctx_auth)
        read_folder_and_files(ctx, "Documents")
        # read_folder_and_files_alt(ctx, "Documents")
        # upload_file_into_library(target_library, name, content)
        # download_file(ctx)
    else:
        print(ctx_auth.get_last_error())

当我运行上述代码时,出现以下错误:

  File "/usr/local/lib/python3.7/site-packages/office365/runtime/auth/acs_token_provider.py", line 76, in get_authorization_header
    return 'Bearer {0}'.format(self.access_token["access_token"])
KeyError: 'access_token'

我的最终目标是使用 python 数据管道中的元数据将文件上传到 Sharepoint 文档库。 Sharepoint 不在本地托管,包含在我们的 365 许可证中。

亲切的问候

【问题讨论】:

    标签: python sharepoint sharepoint-online document-library


    【解决方案1】:

    因此,当您没有获得访问令牌时,似乎会发生此错误。

    我通过在我的 Azure 门户中放弃客户端和密码来解决此问题,而是在 SharePoint 站点中的以下 URL 下生成它们:

    网址:https://[tenant].sharepoint.com/_layouts/15/appregnew.aspx

    要了解您应该在 [租户] 空间中使用什么,请查看您的 SharePoint URL 并选择“https://”和“.sharepoint.com”之间的文本。这是假设您的 SharePoint 由 Microsoft 托管。

    单击生成按钮,使用相关标题,除非您更清楚,否则只需输入 localhost 作为应用程序域和重定向 URL。 (我的项目只是一个简单的上传脚本)。获取客户端 ID 和密钥的副本。

    如果您希望您的应用拥有完全访问权限,请导航至:

    https://[tenant]-admin.sharepoint.com/_layouts/15/appinv.aspx

    还有另一个链接“https://[tenant].sharepoint.com/_layouts/15/appinv.aspx”,但这不会让您申请完全控制权限。

    将客户端 id 粘贴到 App id 中,使用相同的字段名称或将表单链接在一起会有什么乐趣?单击查找并使用以下 XML 授予完全控制权。

      <AppPermissionRequests AllowAppOnlyPolicy="true">  
       <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="FullControl" />  
      </AppPermissionRequests>  
    

    单击创建,然后在下一页单击信任。您需要以具有完全管理员权限的网站所有者身份登录才能授予此控制权。

    我在这里找到了所有这些信息,如果您需要它会更详细地介绍: https://www.anupams.net/app-only-policy-with-tenant-level-permissions-in-sharepoint-online/

    奖金信息: 我们的 Sharepoint 有两个“站点”,因此默认情况下传递“https://[tenant].sharepoint.com”的基本 URL 会将我带到错误的站点,这意味着我正在查找的文档库不存在。要在设置字典中使用 Office365-REST-Python-Client 解决此问题,请确保 URL 设置具有指向您网站的填充路径,如下所示:

    https://[tenant]-admin.sharepoint.com/sites/[site]

    希望这会有所帮助,这些信息花费了我很多时间!

    【讨论】:

      猜你喜欢
      • 2020-12-20
      • 2021-09-01
      • 2022-07-14
      • 2023-03-15
      • 2019-05-19
      • 2021-11-26
      • 2012-08-23
      • 1970-01-01
      • 2018-02-23
      相关资源
      最近更新 更多