2017-07-27 46 views
0

我想在Javascript中提取我的任務並添加新的任務,但我們將重點放在提取任務上。使用Microsoft圖形提取任務時未經授權

我做了一個應用程序,並使用msal.js文件來獲取令牌。我得到提示,允許應用程序從我的賬戶讀取/寫入,彈出窗口關閉,我已經獲得了一個令牌!

到目前爲止這麼好,但是當我嘗試獲取我的任務時,API響應「未授權」。當我查看標題時,我可以看到我沿着「持票人[標記]」發送。

我完全無法知道如何獲得我的任務,因爲我確實得到了一個合適的令牌,並且我遵循了引導式設置以確保我沿着令牌發送消息。

在我的應用程序(我在https://apps.dev.microsoft.com上創建的)中,我已經設置了所有與任務相關的權限和User.read以獲得較好的度量。至於我設置了「Web」的平臺。

有什麼我丟失或錯誤配置? My network tab in Chrome

我的init方法:

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) 
    }) 

回答

1

你的令牌作用域的圖表,而不是Outlook。 Tasks.readwrite將默認爲Microsoft Graph,並且不適用於Outlook端點。

更改該位:

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

要:

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

感謝您的回覆!它似乎沒有任何改變,可悲的是:( 其中一個響應頭是'x-ms-diagnostics:2000001; reason =「令牌類型未知。」; error_category =「invalid_token」' – CaptainCarl

+0

您可能會解析你的令牌像https://jwt.io,看看它是否有效 –

+0

現在工作,明顯犯了一個錯字。非常感謝! – CaptainCarl

0

您嘗試使用微軟圖形,因此請求應該像 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端點上使用它,這是行不通的。

+0

當我靠近我的MacBook時,我會給它一個鏡頭,謝謝!另一個說明:哪個/什麼可以(最好)讓我的Microsoft ToDo任務/列表起作用? – CaptainCarl