gpt4 book ai didi

python - 访问共享点列表时 token 不清楚

转载 作者:行者123 更新时间:2023-12-03 03:51:53 24 4
gpt4 key购买 nike

我只想从域(或根站点?)内名为 prod 的组(或站点?)内名为 dataacq 的列表中提取数据 tenant.sharepoint.com (或 tenant-my.sharepoint.com ?)并将其放入 DataFrame 中。

我对通过 app.acquire_token_silent 获取的 token 有疑问。

微软文档难以理解,因为它太重了,而且几乎没有可行的食谱/工作示例(从我的无数问号可以看出)。此外,他们似乎希望将所有 API 集中到 graph.microsoft.com 中,但没有警告 tenant.sharepoint.com/sites/prod/_api/即将停产。

我已从我的应用程序的 Azure 门户获得了以下权限。 Azure API permissions

我不认为我需要所有这些,但我不确定。我只想读一份 list 。那么只需要 Microsoft Graph > Sites.read.All 吗?或者是 Sharepoint > Allsites.Read ?我知道我同时拥有“仅限应用程序”权限和“登录用户”权限。

我确实下载了“快速入门”示例,并且阅读了 https://msal-python.readthedocs.io/en/latest/ 。尽管使用app.acquire_token_silent成功提取了 token ,但使用返回的 token 总是会抛出一些错误,无论范围('https://microsoft.sharepoint-df.com/. default' 或 'https://graph.microsoft.com/.default')或 API 域(graph.microsoft.comtenant.sharepoint.com) 我是使用到请求中:

{'error_description': 
"Exception of type 'Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException' was thrown."}
{'error': {'code': 'AccessDenied',
'message': 'Either scp or roles claim need to be present in the token.',
'innerError': {'date': '2021-02-19T08:05:16',
'request-id': '01efc071-18e6-4006-8780-f771419ebe3e',
'client-request-id': '01efc071-18e6-4006-8780-f771419ebe3e'}}}

另一方面,有一个 API 开发人员测试门户。当我将此门户中给出的 token 复制到我的 python 代码中时,范围/API 域都可以工作。

这例如一个示例,适用于从门户复制和粘贴 token ,但不适用于 app.acquire_token_silent 方法颁发的 token :

r = requests.get(  # Use token to call downstream service
fr'https://graph.microsoft.com/v1.0/sites/root:/sites/prod:/lists/{list_id}/items?expand=fields(select=Created))',
headers={'Authorization': 'Bearer ' + result['access_token'],},)

所以问题出在这个 app.acquire_token_silent 方法或配置文件上。但返回的响应似乎没问题:

{'token_type': 'Bearer',
'expires_in': 3599,
'ext_expires_in': 3599,
'access_token': '...'}

我错过了什么?

最佳答案

根据您在描述中提供的代码r = requests.get.....,看来您使用microsoft graph api来实现它。如果您使用此 api,则应使用 https://graph.microsoft.com/.default 作为 scope 来获取访问 token 。您可以将访问 token 复制到此 page ,解码token并检查其中是否包含权限。

并且根据您注册的应用程序的“API权限”选项卡的屏幕截图,还请对权限Sites.Read.All进行管理员同意操作,尽管它显示不需要管理员同意。

==================================更新======= =======================

似乎方法 acquire_token_silent() 通过客户端凭据流获取访问 token 。因此,我们应该在注册的应用程序中添加“应用程序”类型权限,而不是“委托(delegate)”类型权限。

关于python - 访问共享点列表时 token 不清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66329759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com