【发布时间】:2017-02-02 15:40:28
【问题描述】:
这就是我正在做的。
我想开发一个应用程序,该应用程序可以通过 Microsoft Azure 使用 Microsoft Graph API 访问和管理 Office 365 租户中的日历。该公司拥有 Office 365 Business,有 10 个用户并可以访问 Azure Active Directory。我正在使用 python 3.5 并请求库来布局 授权码授予流程。
我已在 Windows Azure Active Directory 中注册了我的应用程序,并为该应用程序提供了所需的所有访问权限以及回复 URL。客户端密钥也已发布。
我阅读了以下链接: https://graph.microsoft.io/en-us/docs/authorization/app_authorization
这里,我遵循的过程:
首先,获取Autorization代码:
def triggerAutorization(request):
state = str(uuid4())
payload = {
"client_id": client_id,
"response_type": "code",
"state": state,
"redirect_uri": "http://localhost:8000/authorized",
"prompt": "consent"
}
url = "https://login.microsoftonline.com/{tenant}/oauth2/authorize?" + urllib.parse.urlencode(payload)
return HttpResponseRedirect(url)
其次,获取令牌
def requestToken(request):
headers = { 'Content-Type' : "application/x-www-form-urlencoded"}
post_data = {
"client_id": client_id,
"client_secret": client_secret,
"code" : request.session['code'],
"redirect_uri" : "http://localhost:8000/authorized",
"grant_type": "authorization_code",
"resource": "https://graph.microsoft.com/"
}
raw_response = requests.post("https://login.microsoftonline.com/{tenant}/oauth2/token?", data=post_data, headers= headers)
json_response = raw_response.json()
if json_response['access_token']:
request.session['access_token'] = json_response['access_token']
return HttpResponseRedirect('/createquote')
第三,一切都很好,我得到了一个访问令牌以及访问日历的权限(我想):
'scope': 'Calendars.Read Calendars.Read.All Calendars.Read.Shared Calendars.ReadWrite Calendars.ReadWrite.All Contacts.Read.Shared Directory.AccessAsUser.All Directory.Read.All Files.Read Files.Read.All Files.Read.Selected Files.ReadWrite Files.ReadWrite.All Mail.Read Mail.ReadWrite.All Mail.Send Mail.Send.All openid profile User.Read User.Read.All User.ReadBasic.All',
'expires_on': '1485932306',
'refresh_token': 'AQAB..',
'resource': 'https://graph.microsoft.com/',
'token_type': 'Bearer',
'expires_in': '3600',
'ext_expires_in': '0',
'not_before': '1485928406',
'access_token': 'eyJ0...',
'id_token': 'eyJ0...'
第四,问题来了,当我尝试进行 api 调用时,因为响应是 500 服务器错误,没有有意义的细节。
def getCalendarList(request):
token = request.session['access_token']
headers = {
'User-Agent' : 'pythoncontacts/1.2',
'Authorization' : 'bearer {0}' . format(token ),
'Content-Type' :"application/json;odata.metadata=minimal;odata.streaming=true"
}
request_id = str(uuid.uuid4())
instrumentation = { 'client-request-id' : request_id,
'return-client-request-id' : 'true' }
headers.update(instrumentation)
raw_response = requests.get("https://graph.microsoft.com/v1.0/me/calendars", headers = headers)
json_response = raw_response.json()
return HttpResponse(" %s" %str(json_response))
有趣的是,当我用“https://graph.microsoft.com/v1.0/me/”更改 api 调用时,它可以工作。
社区,我希望你能帮助我。我已经阅读了大量文档并尝试了不同的方法,但我无法让它发挥作用。
非常感谢提前。
非常感谢您的关注。
【问题讨论】:
-
您能否确认您可以在outlook.offfice365.com 看到此用户的默认日历?此外,从您的描述中不清楚他们是否拥有或使用 Exchange Online。
-
感谢 Marc LaFleur。 !! :-)
标签: azure office365 microsoft-graph-api