使用Microsoft图形提取任务时未经授权

时间:2017-07-27 15:15:59

标签: javascript microsoft-graph

我想在Javascript中获取我的任务并可能添加新的任务,但我们要专注于获取任务。

我创建了一个应用程序并使用msal.js文件来获取令牌。我被提示允许应用程序从我的帐户读取/写入,弹出窗口关闭,我已获得令牌!

到目前为止一切顺利,但是当我尝试获取任务时,API会响应"未经授权的"。当我检查标题时,我可以看到我发送了#34; bearer [token]"但是。

我完全不知道如何完成任务,因为我确实得到了正确的令牌,并且我已按照指导设置确保我发送令牌。

在我的应用中(我在https://apps.dev.microsoft.com创建)我已经设置了所有与任务相关的权限和User.read以获得良好的衡量标准。至于平台我已经设置了#34; Web"。

我有什么遗漏或错误配置吗? My network tab in Chrome

我的初始化方法:

const self = this
this.userAgentApplication = new Msal.UserAgentApplication(this.clientID, null, function (errorDes, token, error, tokenType) {
  // this callback is called after loginRedirect OR acquireTokenRedirect (not used for loginPopup/aquireTokenPopup)
})

this.userAgentApplication.loginPopup(['Tasks.readwrite']).then(function (token) {
  let user = self.userAgentApplication.getUser()
  if (user) {
    self.token = token
    localStorage.setItem('token', token)
    self.getTasks()
  }
}, function (error) {
  console.log(error)
})

我的getTasks方法:

  const bearer = 'Bearer ' + this.token
  let headers = new Headers()
  headers.append('Authorization', bearer)
  let options = {
    method: 'GET',
    headers: headers
  }

  // Note that fetch API is not available in all browsers
  fetch('https://outlook.office.com/api/v2.0/me/tasks', options).then(function (response) {
    let contentType = response.headers.get('content-type')
    if (response.status === 200 && contentType && contentType.indexOf('application/json') !== -1) {
      response.json().then(function (data) {
        console.log(data)
      })
      .catch(function (error) {
        console.log(error)
      })
    } else {
      response.json().then(function (data) {
        console.log(data)
      })
      .catch(function (error) {
        console.log(error)
      })
    }
  })
  .catch(function (error) {
    console.log(error)
  })

2 个答案:

答案 0 :(得分:1)

您的令牌的范围是图表,而不是Outlook。 Tasks.readwrite将默认使用Microsoft Graph,并且不会对Outlook端点起作用。

改变这一位:

this.userAgentApplication.loginPopup(['Tasks.readwrite'])

要:

this.userAgentApplication.loginPopup(['https://outlook.office.com/Tasks.readwrite'])

答案 1 :(得分:0)

您正在尝试使用Microsoft Graph,因此请求应如下所示 GET https://graph.microsoft.com/beta/users/{id|userPrincipalName}/outlook/tasks

这里记录了:https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/api/outlookuser_list_tasks

我相信你有一个Microsoft Graph令牌但是你试图在Outlook REST端点上使用它,这是行不通的。