【问题标题】:Accessing Sharepoint Resources using OAuth via Python通过 Python 使用 OAuth 访问 Sharepoint 资源
【发布时间】:2020-01-20 14:59:07
【问题描述】:
我熟悉 OAuth,但不熟悉 Microsoft 的 API 如何工作。他们有很多杂乱无章的文档,实际上并不能帮助我理解该做什么。我想使用 Python 脚本访问 Sharepoint 文件。我想使用 client_id 和 client_secret 来获取特定共享点站点的访问令牌并访问那里的资源。做这个的最好方式是什么?是否有任何官方的 microsoft API/文档可以简化此过程?
感谢您的帮助!
【问题讨论】:
标签:
python
sharepoint
oauth
【解决方案1】:
检查下面的代码。代码来自这里:get-sharepoint-access-token.py
import cherrypy
import jwt
import urllib.parse, urllib.request
import json
SPSECRET = 'gpYucHkODHOv6JxZJ89Kihl9ncTiTrUCAbOaF1N6uJE='
cherrypy.config.update({'server.socket_port': 3005,
'server.ssl_module': 'builtin',
'server.ssl_certificate': 'cert.pem',
'server.ssl_private_key': 'privkey.pem'})
class GetAccessToken(object):
def index(self, **kwargs):
cl = cherrypy.request.body.params
spapptoken = cl['SPAppToken']
decodedtoken = jwt.decode(spapptoken, SPSECRET, verify=False)
url = json.loads(decodedtoken['appctx'])['SecurityTokenServiceUri']
values = {
'grant_type': 'refresh_token',
'client_id': decodedtoken['aud'].split('/')[0],
'client_secret': SPSECRET,
'refresh_token': decodedtoken['refreshtoken'],
'resource': decodedtoken['appctxsender'].split('@')[0] + '/' + decodedtoken['aud'].split('/')[1].split('@')[0] + '@' + decodedtoken['appctxsender'].split('@')[1]
}
data = urllib.parse.urlencode(values)
binarydata = data.encode('ascii')
req = urllib.request.Request(url, binarydata)
response = urllib.request.urlopen(req)
page = response.read()
return repr(page)
index.exposed = True
cherrypy.quickstart(GetAccessToken())
或者我们可以使用Office365-REST-Python-Client 访问SharePoint。