Angular 5 - Microsoft Graph - 为OneNote

时间:2018-04-17 20:39:45

标签: angular http microsoft-graph onenote

我在从Microsoft图表(对于OneNote API)请求资源时遇到问题。我不确定我是否正确获取了访问令牌。我使用隐式流,就像Angular 5前端应用程序一样。

根据https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-protocols-implicit使用网址获取令牌:

window.location.href = 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?'
      + 'client_id=' + CLIENT_ID
      + '&response_type=token'
      + '&redirect_uri=' + REDIRECT_URI
      + '&scope=' + SCOPE
      + '&response_mode=fragment';

我正在根据文档使用范围'Notes.ReadWrite.All',它似乎工作正常,因为我在登录后获得令牌。

这是我试图请求笔记本的方式:

const headers = new HttpHeaders({
      'Content-type': 'application/json; ' + 'charset=utf-8',
      'Authorization': 'Bearer ' + ACCESS_TOKEN,
    });
    this.http.get('https://graph.microsoft.com/v2.0/me/onenote/notebooks', {headers: headers}).subscribe(
      data => console.log(data),
      err => console.log(err)
    );

但我一直以错误结束:

status: 401, 
statusText: "Unauthorized"
code: "InvalidAuthenticationToken", 
message: "CompactToken parsing failed with error code: 80049403"

感觉解析令牌时遇到问题,或者令牌完全不正确。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

传统上,我使用2个电话完成了这项工作。第一次电话

https://login.microsoftonline.com/common/oauth2/v2.0/authorize

返回您可以使用的代码,以进一步请求访问令牌。

所以在这个初始授权之后 - 我使用了以下端点来请求访问令牌:

https://login.microsoftonline.com/common/oauth2/v2.0/token

同时提供授权后收到的原始代码以及该请求。作为对此的响应,您将收到实际的访问令牌(以及在令牌到期后使用的刷新令牌)。这可以进一步用于您的实际数据请求(有效期为60分钟)。

此处有更多详情: Microsoft Graph - get access on behalf of a user