我已经在Azure Active Directory中注册了一个应用程序,以从Microsoft Graph调用findMeetingTimes
。我能够成功授权,获得令牌并进行其他Graph API调用,但是会收到401 - Unauthorized response
,端点https://graph.microsoft.com/v1.0/me/findMeetingTimes
的错误代码为“ UnknownError”。
我正在使用Microsoft工作帐户进行这些活动,并且能够使用该帐户登录并查看日历。我尝试了其他与日历相关的API调用,包括/me/calendar/getSchedule
和/me/events
,并收到了成功的响应。我主要使用Postman进行测试,但是尝试使用Graph Explorer并获得相同的响应。
我还检查了我使用的令牌是否包含Calendars.Read.Shared
和Calendars.ReadWrite.Shared
的正确范围。我最初尝试仅使用Calendars.Read.Shared
的范围,但无济于事。
这是我在请求令牌时收到的响应:
{
"token_type": "Bearer",
"scope": "Calendars.Read.Shared Calendars.ReadWrite.Shared User.Read profile openid email",
"expires_in": 3600,
"ext_expires_in": 3600,
"access_token": "foo",
"refresh_token": "bar"
}
我发出的请求(主体为空,因为所有主体参数都是可选的):
POST /v1.0/me/findMeetingTimes HTTP/1.1
Host: graph.microsoft.com
Content-Type: application/json
Authorization: Bearer foo
我收到的401回复:
{
"error": {
"code": "UnknownError",
"message": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"/>\r\n<title>401 - Unauthorized: Access is denied due to invalid credentials.</title>\r\n<style type=\"text/css\">\r\n<!--\r\nbody{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}\r\nfieldset{padding:0 15px 10px 15px;} \r\nh1{font-size:2.4em;margin:0;color:#FFF;}\r\nh2{font-size:1.7em;margin:0;color:#CC0000;} \r\nh3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} \r\n#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:\"trebuchet MS\", Verdana, sans-serif;color:#FFF;\r\nbackground-color:#555555;}\r\n#content{margin:0 0 0 2%;position:relative;}\r\n.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}\r\n-->\r\n</style>\r\n</head>\r\n<body>\r\n<div id=\"header\"><h1>Server Error</h1></div>\r\n<div id=\"content\">\r\n <div class=\"content-container\"><fieldset>\r\n <h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2>\r\n <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>\r\n </fieldset></div>\r\n</div>\r\n</body>\r\n</html>\r\n",
"innerError": {
"request-id": "foo",
"date": "2019-06-21T13:52:00"
}
}
}
还有其他可以更改的配置来解决此问题吗?
答案 0 :(得分:0)
我们设法找到了问题所在:我试图调用API的O365租户是政府租户,并且没有在租户中启用/安装“ findMeetingTimes”功能。
我们目前的解决方法是使用Outlook REST API,它具有类似的功能:https://docs.microsoft.com/en-us/previous-versions/office/office-365-api/api/version-2.0/calendar-rest-operations#FindMeetingTimes