Angular 5 - Microsoft Graph - 为 OneNote 请求资源时出现错误 401

Angular 5 - Microsoft Graph - Error 401 while requesting resource for OneNote

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

根据https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-protocols-implicit用url获得的令牌:

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"

感觉是解析令牌有问题,或者令牌根本不正确。在此先感谢您的帮助。

传统上,我使用 2 个调用来完成此操作。第一次通话

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

returns code 然后您可以使用它来进一步请求访问令牌。

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

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

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

这里有更多详细信息: Microsoft Graph - get access on behalf of a user