java - 尝试使用 Microsoft Graph Java SDK 从共享 Outlook 日历中获取空闲/忙碌时段时出现错误 401
问题描述
我创建了两个新的 Outlook 帐户并与另一个共享一个 Outlook 日历。然后我尝试使用 Graph API Java SDK 获取共享日历空闲/忙碌插槽:
final String accessToken = resolveAccessToken(refreshToken);
final IGraphServiceClient graphServiceClient = client.getClient(accessToken);
ICalendarGetScheduleCollectionPage iCalendarGetScheduleCollectionPage = null;
final DateTimeTimeZone startTime = new DateTimeTimeZone();
startTime.dateTime = RFC339Utils.fromInstant(timeFrame.getStartAt());
final DateTimeTimeZone endTime = new DateTimeTimeZone();
endTime.dateTime = RFC339Utils.fromInstant(timeFrame.getEndAt());
ICalendarGetScheduleCollectionPage iCalendarGetScheduleCollectionNextPage =
graphServiceClient
.me()
.calendar()
.getSchedule(emails, endTime, startTime, availabilityViewInterval)
.buildRequest()
.post();
对于这个请求,我收到了一个带有嵌套内部异常的空响应正文:
System.Net.WebException: The request failed with HTTP status 401: Unauthorized.\r\n at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)\r\n at System.Web.Services.Protocols.SoapHttpClientProtocol.EndInvoke(IAsyncResult asyncResult)\r\n at Microsoft.Exchange.InfoWorker.Common.Availability.Proxy.Service.EndGetUserAvailability(IAsyncResult asyncResult)\r\n at Microsoft.Exchange.InfoWorker.Common.Availability.FreeBusyApplication.EndProxyWebRequest(ProxyWebRequest proxyWebRequest, QueryList queryList, IService service, IAsyncResult asyncResult)\r\n at Microsoft.Exchange.InfoWorker.Common.Availability.ProxyWebRequest.EndInvoke(IAsyncResult asyncResult)\r\n at Microsoft.Exchange.InfoWorker.Common.Availability.AsyncWebRequest.EndInvokeWithErrorHandling()"
然后我尝试执行以下请求
POST https://graph.microsoft.com/v1.0/me/calendar/getSchedule
带有请求正文
{
"schedules": [
"joseph.baker.doodle@outlook.com"
],
"startTime": {
"dateTime": "2019-10-24T09:00:00",
"timeZone": "Pacific Standard Time"
},
"endTime": {
"dateTime": "2019-10-30T18:00:00",
"timeZone": "Pacific Standard Time"
},
"availabilityViewInterval": 60
}
卷曲命令
curl 'https://graph.microsoft.com/v1.0/me/calendar/getSchedule' -H 'Connection: keep-alive' -H 'Accept: application/json, text/plain, */*' -H 'Origin: https://developer.microsoft.com' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36' -H 'SdkVersion: GraphExplorer/3.0' -H 'Authorization: Bearer {insert access token here}' -H 'Content-type: application/json' -H 'Sec-Fetch-Site: same-site' -H 'Sec-Fetch-Mode: cors' -H 'Referer: https://developer.microsoft.com/en-us/graph/graph-explorer' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-GB,en;q=0.9,en-US;q=0.8,sr;q=0.7,hr;q=0.6' --data-binary $'{\n "schedules": [\n "joseph.baker.doodle@outlook.com"\n ],\n "startTime": {\n "dateTime": "2019-10-24T09:00:00",\n "timeZone": "Pacific Standard Time"\n },\n "endTime": {\n "dateTime": "2019-10-30T18:00:00",\n "timeZone": "Pacific Standard Time"\n },\n "availabilityViewInterval": 60\n}' --compressed
我得到了这个回应
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.scheduleInformation)",
"value": [
{
"scheduleId": "joseph.baker.doodle@outlook.com",
"error": {
"message": "Proxy web request failed. , inner exception: System.Net.WebException: The request failed with HTTP status 401: Unauthorized.\r\n at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)\r\n at System.Web.Services.Protocols.SoapHttpClientProtocol.EndInvoke(IAsyncResult asyncResult)\r\n at Microsoft.Exchange.InfoWorker.Common.Availability.Proxy.Service.EndGetUserAvailability(IAsyncResult asyncResult)\r\n at Microsoft.Exchange.InfoWorker.Common.Availability.FreeBusyApplication.EndProxyWebRequest(ProxyWebRequest proxyWebRequest, QueryList queryList, IService service, IAsyncResult asyncResult)\r\n at Microsoft.Exchange.InfoWorker.Common.Availability.ProxyWebRequest.EndInvoke(IAsyncResult asyncResult)\r\n at Microsoft.Exchange.InfoWorker.Common.Availability.AsyncWebRequest.EndInvokeWithErrorHandling()",
"responseCode": "ErrorProxyRequestProcessingFailed"
}
}
]
}
这是 Outlook 方面的错误吗?我将不胜感激任何帮助。
解决方案
Microsoft Graph API 不支持此方案。我不相信日历共享可以通过 Microsoft Graph API 跨邮箱进行访问。
此 API 不允许使用消费者帐户 ( docs ) 进行委派访问。您正在使用 /me,这意味着您正在尝试使用委托访问。
推荐阅读
- python - 'RandomForestRegressor' 对象没有属性 'accuracy_score'
- azure-log-analytics - Azure Log Analytics - SQL 托管实例日志
- python - AttributeError:模块'cv2.cv2'没有属性'SURF_create',2.模块'cv2.cv2'没有属性'xfeatures2d'
- r - 如何在 R 中构建图表并将数据应用于图表?
- angular - Angular 10 + PubNub - 从特定频道读取消息时出现问题
- php - Error retrieving credentials from the instance profile metadata server with credentials defined in .aws folder
- python - MacOS Python Oracle TCPS connection with Oracle instant client - ORA-29024: Certificate validation failure
- swiftui - Selection color of a NavigationLink in List was different in Simulator and Device (SwiftUI)
- php - 如何创建函数 prev_id?
- python - PayPal SDK - AttributeError:“HttpResponse”对象没有属性“get”