【发布时间】:2021-01-12 00:53:45
【问题描述】:
非常感谢任何帮助!我尝试了很多库和这样做的方法,似乎没有任何效果。我对 REST API 和使用它们访问 SharePoint 缺乏经验。我已经尝试了各种使用 Python 请求、office365-REST-Python-Client、HttpNtlmAuth、OAuth2、rauth 等的代码示例。
我们的 SharePoint 管理员为我设置了一个 SharePoint 插件来访问我的网站数据。说API中不是我的用户名和密码,而是使用客户端,先获取访问令牌,然后进行API调用。
令人沮丧的是,SharePoint 管理员在 Postman 中设置了调用,API 请求调用以获取访问令牌并获取我希望在那里正常工作的站点文件和文件夹数据。我什至可以使用她创建的相同参数在 Postman 中创建自己的 API 请求,并且效果很好。但是尝试在我的 Python 应用程序中执行此操作给我带来了各种错误和问题。目前,我只是尝试在 Python 中检索我的访问令牌。
这是我当前的代码和错误。括号内的所有文本和所有大写字母都是非文字/模糊的,原因很明显,因为我在网上发布了这个。错误是:
文件“[MY LOCAL DRIVE LOCATION...]\venv\lib\site-packages\office365\runtime\auth\authentication_context.py”,第 45 行,在 acquire_token_for_app raise ValueError('获取令牌失败:{0}'.format(self.provider.error)) ValueError:获取令牌失败:无
from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext
class SharepointService:
site_url = 'https://accounts.accesscontrol.windows.net/[TENANT ID the SP ADMIN GAVE ME]/tokens/OAuth/2?content'
client_id = '[THE CLIENT ID THE SP ADMIN GAVE ME]'
client_secret = '[THE CLIENT SECRET THE SP ADMIN GAVE ME]'
app_principal = {'client_id': client_id, 'client_secret': client_secret}
context_auth = AuthenticationContext(url=site_url)
token = context_auth.acquire_token_for_app(client_id=app_principal['client_id'], client_secret=app_principal['client_secret'])
print(token)
ctx = ClientContext(site_url, context_auth)
web = ctx.web
ctx.load(web)
ctx.execute_query()
print("Web site title: {0}".format(web.properties['Title']))
【问题讨论】:
-
你能解决这个问题吗?我有完全相同的问题。
-
你的代码对我有用,而 shareplum 和 sharepy 没有,我猜他们可能使用了不同的身份验证方法或支持我公司不使用的不同 API
标签: python rest postman access-token sharepoint-online