繁体   English   中英

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

[英]POST Ajax call to Outlook API - Access is denied

我很难向 Outlook API 发送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调用。 两个GET调用都有效,所以问题不是令牌或缓存问题。

问题出在身份验证过程中,显然在每个请求上我都必须指定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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM