对Outlook API的POST Ajax调用-访问被拒绝

时间:2019-01-14 22:37:48

标签: javascript jquery ajax outlook-restapi outlook-api

我很难向Outlook API发送python3 -m pip install srblib请求。

我正在本地计算机上工作,并将POST定义为redirectUrl

我的localhost:port请求有效:

GET

但是当我尝试发送var apiUrl = "https://outlook.office.com/api/v2.0/me/calendarview?startdatetime=" + startDateTime + "&enddatetime=" + endDateTime + "&$top=" + 10; $.ajax({ type: 'GET', url: apiUrl, headers: { "Authorization": "Bearer " + token } }).done(function (data) { processResults(data); }).fail(function (response) { handleFailure(); }); 时,我收到此消息:

  

访问被拒绝。检查凭据,然后重试。

我的代码是:

POST

在两种情况下,我都使用相同的令牌,因此这可能不是登录问题。我还允许该应用中的var apiUrl = "https://outlook.office.com/api/v2.0/me/events"; var postData = { "Subject": "Plan summer company picnic", "Body": { "ContentType": "HTML", "Content": "Let's kick-start this event planning!" }, "Start": { "DateTime": "2019-01-15T11:00:00", "TimeZone": "Pacific Standard Time" }, "End": { "DateTime": "2019-01-15T12:00:00", "TimeZone": "Pacific Standard Time" }, "Attendees": [ { "EmailAddress": { "Address": "myMail@gmail.com", "Name": "Name Here" }, "Type": "Required" } ] }; $.ajax({ type: 'POST', url: apiUrl, headers: { "Authorization": "Bearer " + token }, contentType: 'application/json', data: JSON.stringify(postData) }).done(function (data) { processResults(data); }).fail(function (response) { handleFailure(); });

更新

我清除了缓存,登录,进行了Calendars.ReadWrite调用,然后进行了GET调用,然后再次进行了POST调用。两个GET调用均有效,因此问题不是令牌或缓存问题。

1 个答案:

答案 0 :(得分:1)

问题出在身份验证过程中,显然在每个请求上我都必须指定scope,并且它应该包含多个权限。

在标题中,我发现了这一点:

  

x-ms-diagnostics:2000008; reason =“访问此API要求具有以下权限:'Calendars.Read.All,Calendars.Read.Shared,Calendars.ReadWrite.All,Calendars.ReadWrite.Shared'。 ,则该应用程序仅授予以下权限:'Calendars.Read,Calendars.ReadWrite'。“; error_category =” invalid_grant“

即使这是错误的,因为Calendars.Read.AllCalendars.ReadWrite.All不存在,所以它应该是Calendars.ReadCalendars.ReadWrite

身份验证请求应如下所示:

var authUrl = authServer +
          "response_type=" + encodeURI(token) +
          "&client_id=" + encodeURI(clientId) +
          "&scope=" + encodeURI("https://outlook.office.com/Calendars.Read https://outlook.office.com/Calendars.Read.Shared  https://outlook.office.com/Calendars.ReadWrite https://outlook.office.com/Calendars.ReadWrite.Shared") +
          "&redirect_uri=" + redirectUrl +
          "&state=" + stateParam;