gpt4 book ai didi

azure - 无法使用工作帐户访问 Office 365 中的日历

转载 作者:行者123 更新时间:2023-12-03 01:49:02 25 4
gpt4 key购买 nike

这就是我正在做的事情。

我想开发一个应用程序,可以通过 Microsoft Azure 使用 Microsoft Graph API 访问和管理 Office 365 租户中的日历。该公司拥有 Office 365 商业版,拥有 10 个用户并可以访问 Azure Active Directory。我正在使用 python 3.5 和 requests 库来布局授权代码授予流程。

我已在 Windows Azure Active Directory 中注册了我的应用程序,并为该应用程序提供了所需的所有访问权限以及回复 URL。客户端 key 也已发布。

我阅读了以下链接: https://graph.microsoft.io/en-us/docs/authorization/app_authorization

<小时/>

这里是我遵循的过程:

首先,获取授权码:

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)

其次,获取token

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')

第三,一切都很好,我获得了访问 token 以及访问日历的权限(我想):

'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 调用时,它就可以工作了。

社区,我希望你能帮助我。我阅读了大量文档并尝试了不同的方法,但我无法让它发挥作用。

非常感谢。

非常感谢您的关注。

最佳答案

我已经找到解决办法了。这恰好是我的 Office 365 计划。使用“Office 365 商业版”创建的用户无法完整使用 Microsoft Graph。经过大量研究后,我注册了 Business Premium 订阅试用版。我根据该计划创建了一个用户,然后使用该帐户登录,最终获得了他的日历。此外,我更改了流程以使用 V2.0 端点。

有趣的是,有时,Microsoft 服务错误响应并不能解释问题的真正原因。

对于可能需要处理相同问题的其他开发人员,请注意实际与 Microsoft Graph 和 Azure AD 配合使用的业务计划。

Office 365 中型企业版(现称为 Office 365 商业高级版)Office 365 企业版 E1、E3、E4 或 K1Office 365 教育Office 365 开发人员

欲了解更多信息,请访问以下网址:

https://msdn.microsoft.com/en-us/office/office365/howto/setup-development-environment#bk_Office365Account

我很乐意发布适合我的代码。最后,请原谅语法或语义错误。

感谢所有社区。

关于azure - 无法使用工作帐户访问 Office 365 中的日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41974827/

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