首页 > 解决方案 > 401 Unauthorized - 令牌未被接受

问题描述

我成功地将 Graph API 用于各种事情,但我需要访问 OneNote API 才能在课堂笔记本上执行学生和教师的添加/删除操作。当我以与使用https://www.onenote.com资源对 Graph 相同的方式请求令牌时,它提供了一个令牌,但是当我尝试使用它来访问 OneNote API 时,无论我发送什么(有效)请求,我得到 401 -“请求不包含有效的身份验证令牌。”

我尝试使用 v1.0 端点生成令牌,但结果相同。

我的令牌请求:

POST https://login.microsoftonline.com/ {我的租户}/oauth2/v2.0/token HTTP/1.1 接受:application/json 内容类型:application/x-www-form-urlencoded 主机:login.microsoftonline。 com 内容长度:213 预期:100-继续连接:保持活动状态

grant_type=client_credentials&client_id={我的 appid}&client_secret={我的秘密}&tenant={我的租户}&scope=https%3A%2F%2Fwww.onenote.com%2F.default

或者

POST https://login.microsoftonline.com/ {我的租户}/oauth2/token HTTP/1.1 接受:application/json 内容类型:application/x-www-form-urlencoded 主机:login.microsoftonline.com 内容长度: 161 期望: 100-继续

grant_type=client_credentials&client_id={我的 appid}&client_secret={我的秘密}&resource=https%3A%2F%2Fwww.onenote.com

两者都返回包含 access_token 的内容,例如:{"token_type":"Bearer","expires_in":"3600","ext_expires_in":"3600","expires_on":"1543513719","not_before":"1543509819", “资源”:“ https://www.onenote.com ”,“access_token”:“{一个令牌}”}

请求:GET https://www.onenote.com/api/v1.0/myorganization/groups/ {group id}/notes/ HTTP/1.1 ContentType:application/json 授权:Bearer {token return from /token request} 缓存-控制:无存储,无缓存主机:www.onenote.com

响应:code=40001 message=请求不包含有效的身份验证令牌。

作为参考,这个问题基本上是对以下内容的跟进:使用 API 和课堂笔记本添加学生

标签: c#microsoft-graph-apionenote-api

解决方案


你在正确的轨道上。资源是 1.0 auth 端点的正确方法。范围需要在应用门户上注册,因此您需要返回并在门户中添加 OneNote 范围。

我不是 100% 确定,但 IIRC onenote 的资源可能需要一个尾随的“/”。


推荐阅读